| 
 步骤 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公众号,关注后实时获知最新的教程和优惠活动,谢谢。
			   
		
		
		 	问答区域     
		 	
				
		  
	 
	  		
	  
	  	2025-03-14
	  		
	  				
	  					 
	  
					
						UserDAO里main函数静态调用的问题 
					
					
						
							
						
											
							
					
					
					
	   
 
		回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢	
	 
	  		
	  
	  	2020-06-06
	  		
	  				
	  					 
	  
					
						用来调试的语句为什么没有打印出来? 
					
					
						
							
						
											
							
					
					
					
	   
 
4 个答案 
	 newbeeee 跳转到问题位置 答案时间:2020-11-07 servlet类不运行主方法 每天都要学Java啊 跳转到问题位置 答案时间:2020-09-09 在 servlet 中 new UserDAO()  不会调用主方法。普通类随着类的加载执行的是构造方法、静态块、静态属性等
System.out.println(new UserDAO().getUser("tom", "123").getId());  写在主方法里,是为了能快速检查这个类是否连接成功了。直接 run 这个类,就能很快看到效果。 kira_ 跳转到问题位置 答案时间:2020-06-23 @gugubird class首先运行的不就是main方法吗? gugubird 跳转到问题位置 答案时间:2020-06-18 主方法又没运行,怎么会打印呢 
		回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢	
	 
	  		
	  
	  	2020-05-07
	  		
	  				
	  					 
	  
					
						这个位置为什么前一个跳转不加.jsp后缀,后一个需要加上.jsp 
					
					
						
							
						
											
							
					
					
					
	   
	  		
	  
	  	2020-04-22
	  		
	  				
	  					 
	  
					
						重定向路径带不带"/" 
					
					
						
							
						
											
							
					
					
					
	   
	  		
	  
	  	2020-04-08
	  		
	  				
	  					 
	  
					
						配置web.xml的作用是什么?看不懂这块 
					
					
						
							
						
											
							
					
					
					
	   提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 19 条以前的提问,请 点击查看 
			
			提问之前请登陆
			
		 
		提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢	
	 | |||||||||||||