这里与前面的实现用户登录作业有点类似,唯一不同的地方就是新建了UserDAO的类来用于访问数据库中的用户表,并根据用户名和密码查询用户信息,所以要在数据库中准备好对应的用户数据
UserDAO:
public class UserDAO { public static void main(String[] args) { System.out.println(new UserDAO().getUser("tom", "123").getId()); } public User getUser(String name, String password) { User result = null; try { Class.forName("com.mysql.jdbc.Driver"); Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/cart?characterEncoding=UTF-8", "root", "123456"); String sql = "select * from user where name = ? and password = ?"; PreparedStatement ps = c.prepareStatement(sql); ps.setString(1, name); ps.setString(2, password); ResultSet rs = ps.executeQuery(); if (rs.next()){ result = new User(); result.setId(rs.getInt(1)); result.setPassword(password); result.setName(name); } ps.close(); c.close(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } } |
同样,需要新建JSP页面展示:
最重要的地方还是servlet这里404的高发期,基本上出现404找不到页面很多都是映射有问题,地址有问题,我也是几经折腾,尝试和参考无数答案
@WebServlet("/login") protected void service(HttpServletRequest request, HttpServletResponse response) |
这里控制器的作用是用于处理用户登录验证并根据验证结果进行重定向,
第一个要注意的细节地方response.sendRedirect("/login.jsp");
有无/的区别:如果参数以斜杠(/)开头,则表示相对于当前web应用程序的根目录;如果没有斜杠,则表示相对于当前请求的URL路径。因此,response.sendRedirect("/login.jsp")
将重定向到web应用程序的根目录下的login.jsp页面,而response.sendRedirect("login.jsp")
将重定向到与当前请求相同的目录下的login.jsp页面。
其次,涉及的控制器代码很多容易把功能记混,要注意其实现的功能,功能不同,相应的实现细节也不同,用什么对象来存储,是否重定向等等,在商品列表和用户模块上:前者用于获取商品列表并将其传递给JSP页面进行展示;后者用于处理用户登录验证并根据验证结果进行重定向。它们所使用的DAO和Bean类也不同,所处理的数据类型不同。