查询所有用户
方式一:不通过转发(最麻烦的)
步骤如下:
1.新建servlet类UserServlet类用于查询
2.编写index.jsp文件查询表格
3.写web拦截请求
4.写Service()方法,和dao方法
5.返回html页面内容
UserDao类
代码如下
public List<User> getAll() {
Connection con=DBUtil.getConnection();
List<User>list=new ArrayList<User>();
try {
Statement statement=con.createStatement();
String sql="select *from t1";
ResultSet re=statement.executeQuery(sql);
while(re.next())
{
User user=new User();
user.setId(re.getInt("id"));
user.setUsername(re.getString("username"));
user.setPassword(re.getString("password"));
list.add(user);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return list;
}
Service层
UserServlet类
public class UserServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
{
try {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
List<User> users=new ArrayList<User>();
UserService service=new UserService();
users=service.getAll();
PrintWriter writer=response.getWriter();
writer.println("<!DOCTYPE html>");
writer.println("<html lang=\"en\">");
writer.println("<head>");
writer.println("<meta charset=\"UTF-8\">");
writer.println("<title>Title</title>");
writer.println("</head>");
writer.println("<body>");
writer.println("<table border=\"1\">");
writer.println("<thead>");
writer.println(" <tr>\n" +
" <td>id</td>\n" +
" <td>username</td>\n" +
" <td>password</td>\n" +
" </tr>");
writer.println("</thead>");
writer.println("<tbody>");
for(User user:users)
{
writer.println("<tr></tr>");
writer.println("<td>"+user.getId()+"</td>");
writer.println("<td>"+user.getUsername()+"</td>");
writer.println("<td>"+user.getPassword()+"</td>");
writer.println("<tr></tr>");
}
writer.println("</tbody>");
writer.println("</table>");
writer.println("</body>");
writer.println("</html>");
writer.println("");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
热部署:更改页面信息时,不用重新运行刷新即可
方式二:通过转发jsp页面
1.UserServlet类,request绑定list->获取转发器->开始转发
request.setAttribute("list",users);
RequestDispatcher re=request.getRequestDispatcher("/user.jsp");
re.forward(request,response);
2.jsp页面通过request获取list,循环打出
<%@ page import="java.util.List" %>
<%@ page import="com.buka.edu.bean.User" %><%--
Created by IntelliJ IDEA.
User: 86157
Date: 2022/2/20
Time: 11:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<%--编码--%>
<html>
<head>
<title>Title</title>
</head>
<body>
<%List <User>users=(List<User>) request.getAttribute("list");%>
<h1><%=users%></h1>
<table border="1">
<thead>
<th>
<tr>
<td>id</td>
<td>username</td>
<td>password</td>
</tr>
</th>
</thead>
<tbody>
<%
for(int i=0;i<users.size();i++)
{%>
<tr>
<td><%=users.get(i).getId()%></td>
<td><%=users.get(i).getUsername()%></td>
<td><%=users.get(i).getPassword()%></td>
</tr>
<%}%>
</tbody>
</table>
</body>
</html>
运行结果:
缺陷:容易出现空指针异常
方式三:通过el表达式和jstl标签
<%--
Created by IntelliJ IDEA.
User: 86157
Date: 2022/2/20
Time: 11:23
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>//jstl标签(api提供迭代方法)
<html>
<head>
<title>El表达式</title>
</head>
<body>
${list}//el表达式自动找到与request绑定的key
<table border="1">
<thead>
<tr>
<td>id</td>
<td>username</td>
<td>password</td>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="user">
<tr>
直接点属性,相当于get方法
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.password}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
好处:避免了空指针,页面报错误信息
运行结果:
隐藏访问
把jsp页面放在web-inf 下面,不通过转发就不能直接访问了