展示一個DisplayTag自定義標簽,從Session獲取用戶列表渲染HTML表格,未登錄則轉發登錄頁。
app.tld):標簽名display,屬性page(轉發頁面)。DisplayTag):doEndTag()檢查Sessionalluser屬性,存在則遍歷List<User>輸出<table>(ID/Name/Password三列),否則pageContext.forward(page)轉發登錄頁。返回SKIP_PAGE終止頁面後續處理。LoginAction):驗證用戶名密碼,成功調用UserDAO.showAll()獲取列表存入Sessionalluser,轉發indexGo。<%@ taglib uri="/WEB-INF/app.tld" prefix="app" %> <app:display page="login.jsp"/>。public int doEndTag() throws JspException {
HttpSession session = pageContext.getSession();
boolean valid = session != null && session.getAttribute("alluser") != null;
if (!valid) { pageContext.forward(page); return SKIP_PAGE; }
List users = (List) session.getAttribute("alluser");
JspWriter out = pageContext.getOut();
out.println("<table border='2' width='100%' height='100%'>");
out.println("<tr><th>ID</th><th>Name</th><th>password</th></tr>");
for (User u : users) {
out.println("<tr><td>" + u.getId() + "</td><td>" + u.getUsername() + "</td><td>" + u.getPassword() + "</td></tr>");
}
out.println("</table>");
return SKIP_PAGE;
}
displaytag成熟庫。<c:forEach>+EL或Struts 2標簽。release()重置屬性確保標簽實例復用安全。