第十一周作业

这里与前面的实现用户登录作业有点类似,唯一不同的地方就是新建了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")
public class UserLoginServlet extends HttpServlet {
   
    private static final long serialVersionUID = 1L;

    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        User user = new UserDAO().getUser(name, password);
        if (null != user) {
            request.getSession().setAttribute("user", user);
           response.sendRedirect("listProduct");   
        } else
            response.sendRedirect("login.jsp");

 

这里控制器的作用是用于处理用户登录验证并根据验证结果进行重定向,

第一个要注意的细节地方response.sendRedirect("/login.jsp");  

有无/的区别:如果参数以斜杠(/)开头,则表示相对于当前web应用程序的根目录;如果没有斜杠,则表示相对于当前请求的URL路径。因此,response.sendRedirect("/login.jsp")将重定向到web应用程序的根目录下的login.jsp页面,而response.sendRedirect("login.jsp")将重定向到与当前请求相同的目录下的login.jsp页面。

其次,涉及的控制器代码很多容易把功能记混,要注意其实现的功能,功能不同,相应的实现细节也不同,用什么对象来存储,是否重定向等等,在商品列表和用户模块上:前者用于获取商品列表并将其传递给JSP页面进行展示;后者用于处理用户登录验证并根据验证结果进行重定向。它们所使用的DAO和Bean类也不同,所处理的数据类型不同。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值