how2j.cn

相关下载
文件名 文件大小
cart.rar 873k
使用站长秘制下载工具

工具版本兼容问题
要进行购买,还需要用户处于登陆状态,因为后续生成的订单,需要挂在某个用户的名下。

步骤 1 : SQL   
步骤 2 : User   
步骤 3 : UserDAO   
步骤 4 : login.jsp   
步骤 5 : UserLoginServlet   
步骤 6 : 配置web.xml   
步骤 7 : listProduct.jsp   
步骤 8 : 测试   

步骤 1 :

SQL

Product模块类似的,不提供完整的用户CRUD(增 删 改 查) 也是通过SQL准备User数据。
create table user( id int, name varchar(50), password varchar(50) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table user(
id int,
name varchar(50),
password varchar(50)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into user values(1,'tom','123');


insert into user values(1,'tom','123');
步骤 2 :

User

User 类
package bean; public class User { private int id; private String name; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
步骤 3 :

UserDAO

根据name和password查询表user,如果有数据就表示账号密码正确
package dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import bean.User; 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", "admin"); 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; } }
步骤 4 :

login.jsp

登陆页面
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%> <!DOCTYPE html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <form action="login" method="post"> 账号: <input type="text" name="name"> <br> 密码: <input type="password" name="password"> <br> <input type="submit" value="登录"> </form>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="java.util.*"%>

<!DOCTYPE html>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<form action="login" method="post">
	账号: <input type="text" name="name"> <br> 
	密码: <input type="password" name="password"> <br> 
	<input type="submit" value="登录">
</form>
步骤 5 :

UserLoginServlet

登陆Servlet, 通过name和password获取user对象

如果对象不为空,就表示账号密码正确,跳转到产品显示界面 /listProduct
如果对象为空,就跳转到登陆界面,重新登陆
package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import bean.User; import dao.UserDAO; public class UserLoginServlet extends HttpServlet { 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"); } }
步骤 6 :

配置web.xml

在web.xml中为路径/login加上相关配置
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>ProductListServlet</servlet-name> <servlet-class>servlet.ProductListServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ProductListServlet</servlet-name> <url-pattern>/listProduct</url-pattern> </servlet-mapping> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>servlet.UserLoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> </web-app>
步骤 7 :

listProduct.jsp

修改listProduct.jsp,如果用户登陆了,就显示用户的名字
<c:if test="${!empty user}">
<div align="center">
当前用户: ${user.name}
</div>
</c:if>
listProduct.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" isELIgnored="false"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <c:if test="${!empty user}"> <div align="center"> 当前用户: ${user.name} </div> </c:if> <table align='center' border='1' cellspacing='0'> <tr> <td>id</td> <td>名称</td> <td>价格</td> <td>购买</td> </tr> <c:forEach items="${products}" var="product" varStatus="st"> <tr> <td>${product.id}</td> <td>${product.name}</td> <td>${product.price}</td> <td> <form action="addOrderItem" method="post"> 数量<input type="text" value="1" name="num"> <input type="hidden" name="pid" value="${product.id}"> <input type="submit" value="购买"> </form> </tr> </c:forEach> </table>
步骤 8 :

测试

访问登陆页面,输入账号密码: tom: 123

http://127.0.0.1/login.jsp
测试


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2018-03-29 关于页面访问链接加后缀的问题 以及/
linzt



1.为什么访问login页面需要加.jsp后缀?而访问listProduct页面则不用? 2.UserLoginServlet中的response.sendRedirect("/login.jsp"); 以及 response.sendRedirect("/listProduct");为什么也是一个加.jsp一个不加? 3.UserLoginServlet中的response.sendRedirect("/login.jsp"); 以及 ProductListServlet中的request.getRequestDispatcher("listProduct.jsp").forward(request, response); 为什么一个要加/一个不加? 按站长大大的代码运行都成功了,只有这一点还有迷惑了。。。。求教站长和大神们

							

							


1 个答案

凡凡 答案时间:2018-04-03
前两个问题其实是一样的: jsp就相当于html页面,是用于展示给我们看的页面,我们需要先进入login.jsp这个页面去填写自己的账号和密码,不知道你注意没有,在login.jsp里面有一个<form action="login" method="post">,当点击submit时触发该动作(也就是login); login会去web.xml中找到了一个对应的servlet.UserLoginServlet ,Servlet就相当于一个控制器,将你在login.jsp页面填写的账号密码取出来进行验证。 那么访问listProduct页面呢,没有上述表单提交这一步。web.xml里有一个配置的url就是/listProduct,它对应的是servlet.ProductListServlet,这个控制器会取出Product里的数据并将其显示至listProduct.jsp上。 最后一个问题: 运用sendRedirect()方法可以让你重定向到任何URL,而forward()方法只能重定向到同一个Web应用程序中的某个资源。 表单form中的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如服务器根路径是http://localhost:8080/Test则提交至http://localhost:8080/uu;而Forward代码中的"/uu"则代表相对于WEB应用的路径。如http://localhost:8080/Test应用则提交至http://localhost:8080/Test/uu。如果不加的则提交至http://localhost/uu




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2018-03-01 登陆不上,UserDAO拿不到user
lllkkk



进入登陆页面,然后输入账号密码,跳回登陆页面,根据后台输出判断,在进过UserDAO中getUser(),这个方法没有拿到user信息,userDAO中的部分代码贴上去了,并且加了syso输出语句验证了下,在 ResultSet以后没有进入if(rs.next())判断中。这是为什么
   PreparedStatement ps = c.prepareStatement(sql);
 
            ps.setString(1, name);
            ps.setString(2, password);
            ResultSet rs = ps.executeQuery();
            System.out.println("34行,ResultSet中是否有值、"+rs);
           if(rs.next()){//这个方法没有进去?
                result = new User();
                System.out.println("ResultSet中if()//");//这句话后台没有输出,result拿不到,是null
                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();
        }
        System.out.println("UserDao(),result是否存在::"+result);//后台输出是null
        return result;
    }

							






答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2017-12-07 我直接把项目导入,然后报错,好像是少了一些jar包
2017-11-27 UserLoginServlet的service方法中重定向sendRedirect("/listProduct")这里不加斜杠吧
2017-11-13 请问站长,怎么前面访问listProduct不加后缀.jsp,访问login要加后缀
2017-11-11 用户查询提问 setName(name)
2017-10-23 为什么try里的代码不执行呢?
2017-10-14 在listProduct页面没有出现用户名。
2017-08-29 关于登陆验证是不是专门做个UserVertify的java bean比较好
2017-08-20 登陆后跳转到了listproduct 但是显示的是空白页面。。。用了右上角的程序 也是这样。。想问下是什么问题
2017-08-19 登陆后能跳转到http://127.0.0.1/listProduct 但是显示空白页
2016-05-26 如果没有登录就跳转到登录页面




提问之前请登陆
关于 J2EE-购物车-用户模块 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 620943819
站长会在每个工作日早上尽量回答提问(如果有漏掉没有回答的,请进群提醒一下)
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
站长是玻璃心,提问的时候请语气温柔些 kiss~
截止2017-5-19日累计提问 1638个,站长回答了 1546个
截止2017-8-15日累计提问 2788个,站长回答了 2544个

上传截图