承接登入模組,本文示範登入成功後,Controller 從 Service 取得學生清單存入 Session,前端 JSP 使用 EL 表達式 ${...} 搭配 JSTL <c:forEach> 進行表格渲染,無需 Scriptlet,程式碼更乾淨。
public class Student {
private int sid; private String sname, sage;
// getter/setter/建構子略
}
// 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;
}
}
// 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);
}
}
// 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);
}
}
<%@ 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 規範 |
<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>