(jsp四)簡單功能的實現:顯示
a.list.jsp頁面程式碼
<body>
<table border="1px" width="60%">
<tr>
<th>ID</th>
<
<th>密碼</th>
<th>年齡</th>
<th>性別</th>
<
</tr>
<%--
<!--
方式一:通過java程式碼+html程式碼獲取list集合內容
注:需要將java程式碼與html程式碼分開書寫,如下所示
報錯原因:需要導包
-->
<%
List<Student> list=(List<Student>)request.getAttribute("list");
if(list!=null){
for(Student s:list){
%>
<tr>
<th><%=s.getSid()%></th>
<th><%=s.getSname()%></th>
<th><%=s.getSpwd()%></th>
<th><%=s.getSage()%></th>
<th><%=s.getSsex()%></th>
<th>刪除|修改</th>
</tr>
<%
}
}
%>
--%>
<!--
方式二:通過jstl方式
-->
<c:forEach items="${list}" var="s" varStatus="vs">
<tr>
<th>${vs.count}</th>
<th>${s.sname}</th>
<th>${s.spwd}</th>
<th>${s.sage}</th>
<th>${s.ssex}</th>
<th>刪除|修改</th>
</tr>
</c:forEach>
</table>
</body>
注:JSTL(Java Stander Tag Libary):java標準標籤庫
步驟:
1)匯入jar包(jstl.jar,standard.jar)
2)匯入標籤庫(taglib指令匯入):<%@taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core”%>
3)使用相應的標籤完成相應的功能
a)判斷
<c:if test=”${}”></c:if>
b)迴圈
<c:forEach items=”” var=”” varStatus=””></c:forEach>
Items:表示要遍歷的集合(items的值是一個EL表示式)
var:表示每次迴圈拿到的物件
varStatus:表示迴圈迭代的下標(varStatus的值是一個EL表示式)
index正在便利的下標,從0開始
count遍歷資料的條數
導包方法:游標停留在需要導包的屬性名之後,Alt+/出現列表找到包匯入即可
b.StudentServlet新增程式碼
//登入
if("login".equals(flag)){
String sname=request.getParameter("sname");
String spwd=request.getParameter("spwd");
Student stu=dao.findStudentBySnameAndSpwd(sname, spwd);
if(stu==null){
//查無此人,則進行提示並返回登入頁面
//設值繫結,將某繫結值繫結至request並給其一個繫結名,則重定向檔案可通過該繫結名獲取該繫結值
//第一個引數為繫結名,第二個引數為繫結值
request.setAttribute("login_error","查無此人");
//請求轉發
request.getRequestDispatcher("login.jsp").forward(request, response);
}else{
//顯示
flag=null;
}
}
//顯示
if(flag==null){
List<Student> list=dao.findAllStudent();
request.setAttribute("list",list);
request.getRequestDispatcher("list.jsp").forward(request, response);
}
注:如果直接執行servlet,我們需要讓頁面能夠做顯示操作,但是如果直接執行servlet的話是沒有頁面傳送flag值的,那麼這時flag值是為null的,所以如果我們要做顯示操作,只需要當flag為null時,讓頁面做現實操作即可。那麼現在有一個問題,當登入成功的時候,下一個頁面應該是什麼?當然是顯示頁面,如何實現?我們可以通過在登入完成驗證成功後給flag賦值使得flag=null,就可以進行顯示操作,這樣的話就必須要求顯示功能放在所有功能的後面,才能夠使得每一個功能執行完後給賦值flag=null後進入到顯示邏輯。如果要直接進入顯示頁面做顯示,需要先執行servlet,否則list.jsp無法獲取到值
c.IStudentDAO新增查詢所有方法public List<Student> findAllStudent();
d.StudentDAOImpl新增程式碼
public List<Student> findAllStudent() {
List<Student> list=new ArrayList<Student>();
try{
conn=DBUtil.getConnection();
ps=conn.prepareStatement("SELECT sid,sname,spwd,sage,ssex FROM student");
rs=ps.executeQuery();
while(rs.next()){
Student stu=new Student(rs.getInt("sid"),rs.getString("sname"),rs.getString("spwd"),rs.getInt("sage"),rs.getString("ssex"));
list.add(stu);
}
}catch(Exception e){
e.printStackTrace();
}finally{
DBUtil.closeConnection(rs, ps, conn);
}
return list;
}