JavaWeb14.4【servlet&http&request:综合案例-用户登录】

2021/6/30 17:24:10

本文主要是介绍JavaWeb14.4【servlet&http&request:综合案例-用户登录】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

 

 

 

 

 

 

 

 

 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8     <form action="/day14_test/loginServlet" method="post"> <!--action路径的写法:虚拟目录+Servlet的资源路径-->
 9         用户名:<input type="text" name="username"> <br>
10         密码:<input type="password" name="password"><br>
11 
12         <input type="submit" value="登录">
13 
14     </form>
15 </body>
16 </html>

 

1 driverClassName=com.mysql.jdbc.Driver
2 url=jdbc:mysql:///day14
3 username=root
4 password=root
5 initialSize=5
6 maxActive=10
7 maxWait=3000

 

 

 

 

  1 package com.haifei.domain;
  2 
  3 /**
  4  * 用户的实体类  javabean
  5  */
  6 /*public class User {
  7 
  8     private int id;
  9     private String username;
 10     private String password;
 11 
 12     public User() {
 13     }
 14 
 15     public User(int id, String username, String password) {
 16         this.id = id;
 17         this.username = username;
 18         this.password = password;
 19     }
 20 
 21     public void setId(int id) {
 22         this.id = id;
 23     }
 24 
 25     public void setUsername(String username) {
 26         this.username = username;
 27     }
 28 
 29     public void setPassword(String password) {
 30         this.password = password;
 31     }
 32 
 33     public int getId() {
 34         return id;
 35     }
 36 
 37     public String getUsername() {
 38         return username;
 39     }
 40 
 41     public String getPassword() {
 42         return password;
 43     }
 44 
 45     @Override
 46     public String toString() {
 47         return "User{" +
 48                 "id=" + id +
 49                 ", username='" + username + '\'' +
 50                 ", password='" + password + '\'' +
 51                 '}';
 52     }
 53 }*/
 54 
 55 public class User {
 56 
 57     private int id;
 58     private String username;
 59     private String password;
 60 
 61     private String gender;
 62     public void setHehe(String gender){ //BeanUtilsTest演示特例,一般不要这样写
 63         this.gender = gender;
 64     }
 65     public String getHehe(){
 66         return gender;
 67     }
 68 
 69     public void setId(int id) {
 70         this.id = id;
 71     }
 72 
 73     public void setUsername(String username) {
 74         this.username = username;
 75     }
 76 
 77     public void setPassword(String password) {
 78         this.password = password;
 79     }
 80 
 81     public int getId() {
 82         return id;
 83     }
 84 
 85     public String getUsername() {
 86         return username;
 87     }
 88 
 89     public String getPassword() {
 90         return password;
 91     }
 92 
 93     @Override
 94     public String toString() {
 95         return "User{" +
 96                 "id=" + id +
 97                 ", username='" + username + '\'' +
 98                 ", password='" + password + '\'' +
 99                 ", gender='" + gender + '\'' +
100                 '}';
101     }
102 }
 1 package com.haifei.util;
 2 
 3 import com.alibaba.druid.pool.DruidDataSource;
 4 import com.alibaba.druid.pool.DruidDataSourceFactory;
 5 
 6 import javax.sql.DataSource;
 7 import java.io.IOException;
 8 import java.io.InputStream;
 9 import java.sql.Connection;
10 import java.sql.SQLException;
11 import java.util.Properties;
12 
13 /**
14  * JDBC工具类 使用Durid连接池
15  */
16 public class JDBCUtils {
17 
18     private static DataSource ds;
19 
20     static {
21         //tips:选中多行代码,快捷键ctrl+alt+t 可选多种形式将所选代码包裹起来,如trycatch、if、循环等
22         try {
23             //1 加载配置文件
24             Properties prop = new Properties();
25             InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"); //字节输入流
26             prop.load(is);
27 
28             //2 初始化连接池对象
29             ds = DruidDataSourceFactory.createDataSource(prop);
30         } catch (IOException  e) {
31             e.printStackTrace();
32         } catch (Exception e) {
33             e.printStackTrace();
34         }
35     }
36 
37     /**
38      * 获取连接池对象
39      * @return
40      */
41     public static DataSource getDataSource(){
42         return ds;
43     }
44 
45     /**
46      * 获取连接对象
47      * @return
48      * @throws SQLException
49      */
50     public static Connection getConnection() throws SQLException {
51         return ds.getConnection();
52     }
53 
54 }
 1 package com.haifei.dao;
 2 
 3 import com.haifei.domain.User;
 4 import com.haifei.util.JDBCUtils;
 5 import org.springframework.dao.DataAccessException;
 6 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 7 import org.springframework.jdbc.core.JdbcTemplate;
 8 
 9 /**
10  * 操作数据库中User表的类
11  */
12 public class UserDao {
13 
14     //声明JDBCTemplate对象,在此类中的所有方法共用
15     private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
16 
17     /**
18      * 登录方法
19      * @param loginUser  此User仅包含页面输入的用户名和密码
20      * @return   查询成功时返回的User包含User对象的全部信息;查询不到时返回null
21      */
22     public User login(User loginUser){
23         //tips:选中多行代码,快捷键ctrl+alt+t 可选多种形式将所选代码包裹起来,如trycatch、if、循环等
24 
25         try {
26 
27             String sql = "select * from user where username=? and password=?";
28             User user = template.queryForObject(sql,
29                     new BeanPropertyRowMapper<User>(User.class),
30                     loginUser.getUsername(), loginUser.getPassword());
31             return user;
32 
33         } catch (DataAccessException e) {
34             e.printStackTrace(); //此处应记录在日志文件中
35             return null;
36         }
37     }
38 
39 
40 }
 1 package com.haifei.test;
 2 
 3 import com.haifei.dao.UserDao;
 4 import com.haifei.domain.User;
 5 import org.junit.Test;
 6 
 7 /**
 8  * 在UserDao完成后,应先进行测试
 9  *  采用JUnit进行单元测试
10  *  注解@Test public void testXxx(){}
11  */
12 public class UserDaoTest {
13 
14     @Test
15     public void testLogin(){
16         User loginUser = new User();
17         loginUser.setUsername("zhangsan");
18 //        loginUser.setPassword("123");
19         loginUser.setPassword("123111"); //报错 --> 优化UserDao代码
20         //org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
21         //at com.haifei.dao.UserDao.login(UserDao.java:23)
22 
23         UserDao userDao = new UserDao();
24         User user = userDao.login(loginUser);
25 
26         System.out.println(user); //User{id=3, username='zhangsan', password='123'}
27     }
28 
29 }
 1 package com.haifei.web.servlet;
 2 
 3 import com.haifei.dao.UserDao;
 4 import com.haifei.domain.User;
 5 import org.apache.commons.beanutils.BeanUtils;
 6 
 7 import javax.servlet.ServletException;
 8 import javax.servlet.annotation.WebServlet;
 9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 import java.io.IOException;
13 import java.lang.reflect.InvocationTargetException;
14 import java.util.Map;
15 
16 @WebServlet("/loginServlet")
17 public class LoginServlet extends HttpServlet {
18     @Override
19     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
20         /*//设置编码
21         req.setCharacterEncoding("utf-8");
22         //获取请求数据
23         String username = req.getParameter("username");
24         String password = req.getParameter("password");
25         //封装user对象
26         User loginUser = new User();
27         loginUser.setUsername(username);
28         loginUser.setPassword(password);
29         //调用UserDao的login方法
30         UserDao userDao = new UserDao();
31         User user = userDao.login(loginUser);
32         //判断查询结果
33         if (user != null){
34             //登录成功
35             req.setAttribute("user", user); //键值对
36             req.getRequestDispatcher("/successServlet").forward(req, resp);
37         }else {
38             //登录失败
39             req.getRequestDispatcher("/failServlet").forward(req, resp);
40         }*/
41 
42 
43 
44         //设置编码
45         req.setCharacterEncoding("utf-8");
46 
47         Map<String, String[]> map = req.getParameterMap();
48         User loginUser = new User();
49         //使用BeanUtils工具类来封装user(简化操作,不管user对象有多少个参数都一次性封装好)
50         try {
51             BeanUtils.populate(loginUser, map); //注意此工具类来自apache.commons包下
52         } catch (IllegalAccessException e) {
53             e.printStackTrace();
54         } catch (InvocationTargetException e) {
55             e.printStackTrace();
56         }
57 
58         //调用UserDao的login方法
59         UserDao userDao = new UserDao();
60         User user = userDao.login(loginUser);
61         //判断查询结果
62         if (user != null){
63             //登录成功
64             req.setAttribute("user", user); //键值对
65             req.getRequestDispatcher("/successServlet").forward(req, resp);
66         }else {
67             //登录失败
68             req.getRequestDispatcher("/failServlet").forward(req, resp);
69         }
70     }
71 
72     @Override
73     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
74         this.doPost(req, resp);
75     }
76 }
 1 package com.haifei.web.servlet;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.annotation.WebServlet;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import java.io.IOException;
 9 
10 @WebServlet("/failServlet")
11 public class FailServlet extends HttpServlet {
12     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
13         //在页面上显示提示信息
14         response.setContentType("text/html;charset=utf-8"); //设置编码
15         response.getWriter().write("登录失败,用户名或密码错误"); //输出
16     }
17 
18     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
19         this.doPost(request, response);
20     }
21 }
 1 package com.haifei.web.servlet;
 2 
 3 import com.haifei.domain.User;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 import java.io.IOException;
11 
12 @WebServlet("/successServlet")
13 public class SuccessServlet extends HttpServlet {
14     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
15         //获取request域中共享的user对象
16 //        Object user = request.getAttribute("user");
17         User user = (User) request.getAttribute("user");
18         if (user != null) {
19             //在页面上显示提示信息
20             response.setContentType("text/html;charset=utf-8"); //设置编码
21             response.getWriter().write("登录成功!" + user.getUsername() + ",欢迎您"); //输出
22         }
23     }
24 
25     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
26         this.doPost(request, response);
27     }
28 }
 1 package com.haifei.test;
 2 
 3 import com.haifei.domain.User;
 4 import org.apache.commons.beanutils.BeanUtils;
 5 import org.junit.Test;
 6 
 7 import java.lang.reflect.InvocationTargetException;
 8 
 9 /**
10  * 测试BeanUtils工具类的setProperty()和getProperty()
11  */
12 public class BeanUtilsTest {
13 
14     @Test
15     public void test(){
16         /*User user = new User();
17         try {
18             BeanUtils.setProperty(user, "username", "zhangsan");
19         } catch (IllegalAccessException e) {
20             e.printStackTrace();
21         } catch (InvocationTargetException e) {
22             e.printStackTrace();
23         }
24         System.out.println(user); //User{id=0, username='zhangsan', password='null'}*/
25 
26 
27 
28 
29         /*User user = new User();
30         try {
31             BeanUtils.setProperty(user, "gender", "male");
32         } catch (IllegalAccessException e) {
33             e.printStackTrace();
34         } catch (InvocationTargetException e) {
35             e.printStackTrace();
36         }
37         System.out.println(user); //User{id=0, username='null', password='null', gender='null'}*/
38 
39         User user = new User();
40         try {
41             BeanUtils.setProperty(user, "hehe", "male");
42         } catch (IllegalAccessException e) {
43             e.printStackTrace();
44         } catch (InvocationTargetException e) {
45             e.printStackTrace();
46         }
47         System.out.println(user); //User{id=0, username='null', password='null', gender='male'}
48 
49 
50 
51         String gender = null;
52         try {
53             gender = BeanUtils.getProperty(user, "hehe");
54         } catch (IllegalAccessException e) {
55             e.printStackTrace();
56         } catch (InvocationTargetException e) {
57             e.printStackTrace();
58         } catch (NoSuchMethodException e) {
59             e.printStackTrace();
60         }
61         System.out.println(gender); //male
62     }
63 
64 
65 }

 



这篇关于JavaWeb14.4【servlet&http&request:综合案例-用户登录】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程