步骤 2 : User 步骤 3 : UserDAO 步骤 4 : login.jsp 步骤 5 : UserLoginServlet 步骤 6 : 配置web.xml 步骤 7 : listProduct.jsp 步骤 8 : 测试
与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');
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;
}
}
根据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;
}
}
登陆页面
<%@ 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>
登陆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");
}
}
在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>
修改listProduct.jsp,如果用户登陆了,就显示用户的名字
<c:if test="${!empty user}">
<div align="center"> 当前用户: ${user.name} </div> </c:if> <%@ 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>
访问登陆页面,输入账号密码: tom: 123
http://127.0.0.1/login.jsp
HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。
![]()
问答区域
2018-03-29
关于页面访问链接加后缀的问题 以及/
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
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
如果没有登录就跳转到登录页面
提问之前请登陆 |