a.list.jsp页面代码
<body>
<table border="1px" width="60%">
<tr>
<th>ID</th>
<th>姓名</th>
<th>密码</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;
}