首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

MVC 實作學生資料展示:JSP EL 表達式與 JSTL 迴圈輸出

     編輯:Java 綜合教學

MVC 實作學生資料展示:JSP EL 表達式與 JSTL 迴圈輸出

承接登入模組,本文示範登入成功後,Controller 從 Service 取得學生清單存入 Session,前端 JSP 使用 EL 表達式 ${...} 搭配 JSTL <c:forEach> 進行表格渲染,無需 Scriptlet,程式碼更乾淨。

後端流程

1. 實體類 Student.java

public class Student {
    private int sid; private String sname, sage;
    // getter/setter/建構子略
}

2. DAO 層

// StudentDao.java
public interface StudentDao {
    List getStudentByTid(int tid);
}

// StudentDaoImpl.java
public class StudentDaoImpl implements StudentDao {
    public List getStudentByTid(int tid) {
        List list = new ArrayList<>();
        String sql = "SELECT * FROM student WHERE tid=?";
        try (Connection con = JDBCUtil.getConnection();
             PreparedStatement ps = con.prepareStatement(sql)) {
            ps.setInt(1, tid);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Student s = new Student();
                s.setSid(rs.getInt("sid"));
                s.setSname(rs.getString("sname"));
                s.setSage(rs.getString("sage"));
                list.add(s);
            }
        } catch (SQLException e) { e.printStackTrace(); }
        return list;
    }
}

3. Service 層

// SearchService.java
public interface SearchService {
    List getStudents(int tid);
}

// SearchServiceImpl.java
public class SearchServiceImpl implements SearchService {
    private StudentDao dao = new StudentDaoImpl();
    public List getStudents(int tid) {
        return dao.getStudentByTid(tid);
    }
}

4. Controller

// SearchController.java
@WebServlet("/selectStus")
public class SearchController extends HttpServlet {
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        SearchService svc = new SearchServiceImpl();
        Teacher teacher = (Teacher) req.getSession().getAttribute("teacher");
        List students = svc.getStudents(teacher.getTid());
        req.getSession().setAttribute("students", students); // 存入 Session
        req.getRequestDispatcher("main.jsp").forward(req, resp);
    }
}

前端 main.jsp

<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<html>
<body>
  <form action="selectStus">
    <input type="submit" value="查詢學生資料">
  </form>

  <table border="1" class="table table-bordered">
    <tr><th>學生編號</th><th>學生姓名</th><th>學生年齡</th></tr>
    <c:forEach items="${students}" var="stu" varStatus="status">
      <tr>
        <td>${stu.sid}</td>
        <td>${stu.sname}</td>
        <td>${stu.sage}</td>
      </tr>
    </c:forEach>
  </table>
</body>
</html>

關鍵點解析

技術用法說明
EL 表達式${students}自動從 page/request/session/application 域尋找屬性
JSTL core<c:forEach>迭代 Collection/Map/陣列,支援 varStatus 取得索引
屬性存取${stu.sid}自動呼叫 getSid(),符合 JavaBean 規範

web.xml 設定

<servlet>
  <servlet-name>selectStus</servlet-name>
  <servlet-class>com.zr.controller.SearchController</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>selectStus</servlet-name>
  <url-pattern>/selectStus</url-pattern>
</servlet-mapping>

優缺點比較

  • 優點:JSP 無 Java 程式碼,前後端分離度較高,易維護
  • 缺點:資料量大時 Session 佔用記憶體,建議改用請求域或分頁查詢(參考上一篇 EasyUI 版)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved