




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 }



所有评论(0)