Servlet从数据库中拿到结果以后,
对用户来说,
他们并不关心你怎么拿的,
恰恰最重要的是,
他们要看到信息展示在网页上。
那这个该怎么实现?
。。。。。。
言归正传:
拿到数据以后,想要把数据展示到Jsp页面上,这样办:
跳转 (转发和重定看大佬文章,清晰又明白 转发和重定向的区别和使用)
关键点:
重定向的特点
- 地址栏:显示新的地址
- 请求次数:2次
- 根目录:http://localhost:8080/ 没有项目的名字
- 请求域中的数据会丢失,因为是2次请求
重定向使用哪个方法?[服务器回应给浏览器的信息,所以是response.]
response.sendRedirect("/pages/loginsuccess.jsp");
转发的特点
- 地址栏不发生变化,显示的是上一个页面的地址
- 请求次数:只有1次请求
- 根目录:http://localhost:8080/项目地址/,包含了项目的访问地址
- 请求域中数据不会丢失
转发使用哪个方法?[转发是由Servlet直接”原封不动“的交给其他Servlet来处理,所以请求request.]
request.getRequestDispatcher("/地址").forward(request, response);
由于我们需要把查询到的数据发送到Jsp,所以我们要在这个跳转的过程中,保证数据不会丢失,所以我们用转发的方式(重定向因为是二次请求,所以会丢失获取到的数据)。
现在我们确定了第一个跳转问题:那就是转发方式。
第二个问题是,我们怎么把ResultSet传送到Jsp并进行"遍历"呢?
。。。
这里省略掉思考的时间。
。。。
我们采用集合,处理这个问题。
List<User> users = new ArrayList<>();
while (resultSet.next()){
User user = new User(resultSet.getString("username"),resultSet.getString("password"),resultSet.getString("sex"));//每次都新建一个对象
users.add(user);
}
request.setAttribute("users",users); //将需要送到jsp的数据放到request请求域中,让request帮忙带到jsp
request.getRequestDispatcher("/pages/loginsuccess.jsp").forward(req,resp);
我们知道,ResultSet无法使用循环直接遍历,而是需要使用While处理(原因待补充,我先给自己留个坑)。
Jsp部分,需要做些什么呢?直接使用,需要引入taglib,具体可以看这篇文章
<table border="1">
<tr>
<td>姓名</td>
<td>密码</td>
<td>性别</td>
</tr>
<c:forEach items="${requestScope.users}" var="user">
<tr>
<td>${user.username}</td>
<td>${user.password}</td>
<td>${user.sex}</td>
</tr>
</c:forEach>
</table>
后来,