Servlet学习(三)——实例:用户登录并记录登陆次数

1、前提:在Mysql数据库下建立数据库web13,在web13下创建一张表user,插入几条数据如下:

2、创建HTML文件,命名为login,作为登录界面(以post方式提交)

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>Insert title here</title>
 6 </head>
 7 <body>
 8     <form action="/WEB13_sevrlet/login" method="post">
 9         用户名:<input type="text" name="username"><br/>
10         密码:<input type="password" name="password"><br/>
11         <input type="submit" value="登录"><br/>
12     </form>
13 </body>
14 </html>

3、创建连接池

c3p0-config.xml文件如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <c3p0-config>
 3 
 4   <default-config>  
 5     <property name="driverClass">com.mysql.jdbc.Driver</property>
 6     <property name="jdbcUrl">jdbc:mysql:///web13</property>
 7     <property name="user">root</property>
 8     <property name="password">12345</property>
 9   </default-config>
10 
11 </c3p0-config>

 DataSourceUtils.java文件如下:(可作为套用模板)

 1 package com.itheima.utils;
 2 
 3 import java.sql.Connection;
 4 import java.sql.ResultSet;
 5 import java.sql.SQLException;
 6 import java.sql.Statement;
 7 
 8 import javax.sql.DataSource;
 9 
10 import com.mchange.v2.c3p0.ComboPooledDataSource;
11 
12 public class DataSourceUtils {
13     private static DataSource dataSource = new ComboPooledDataSource();
14     private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
15 
16     // 直接可以获取一个连接池
17     public static DataSource getDataSource() {
18         return dataSource;
19     }
20 
21     // 获取连接对象
22     public static Connection getConnection() throws SQLException {
23         Connection con = tl.get();
24         if (con == null) {
25             con = dataSource.getConnection();
26             tl.set(con);
27         }
28         return con;
29     }
30 
31     // 开启事务
32     public static void startTransaction() throws SQLException {
33         Connection con = getConnection();
34         if (con != null) {
35             con.setAutoCommit(false);
36         }
37     }
38 
39     // 事务回滚
40     public static void rollback() throws SQLException {
41         Connection con = getConnection();
42         if (con != null) {
43             con.rollback();
44         }
45     }
46 
47     // 提交并且 关闭资源及从ThreadLocall中释放
48     public static void commitAndRelease() throws SQLException {
49         Connection con = getConnection();
50         if (con != null) {
51             con.commit(); // 事务提交
52             con.close();// 关闭资源
53             tl.remove();// 从线程绑定中移除
54         }
55     }
56 
57     // 关闭资源方法
58     public static void closeConnection() throws SQLException {
59         Connection con = getConnection();
60         if (con != null) {
61             con.close();
62         }
63     }
64 
65     public static void closeStatement(Statement st) throws SQLException {
66         if (st != null) {
67             st.close();
68         }
69     }
70 
71     public static void closeResultSet(ResultSet rs) throws SQLException {
72         if (rs != null) {
73             rs.close();
74         }
75     }
76 }

4、编写Servlet实现类

User类代码如下:

 1 package com.itheima.domain;
 2 
 3 public class User {
 4     private int id;
 5     private String name;
 6     private String password;
 7     
 8     public User(){
 9         
10     }
11     
12     public int getId() {
13         return id;
14     }
15 
16     public void setId(int id) {
17         this.id = id;
18     }
19 
20     public String getName() {
21         return name;
22     }
23 
24     public void setName(String name) {
25         this.name = name;
26     }
27 
28     public String getPassword() {
29         return password;
30     }
31 
32     public void setPassword(String password) {
33         this.password = password;
34     }
35 }

LoginServlet.java代码如下:

 1 package com.itheima.login;
 2 
 3 import java.io.IOException;
 4 import java.sql.SQLException;
 5 
 6 import javax.servlet.ServletContext;
 7 import javax.servlet.ServletException;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 
12 import org.apache.commons.dbutils.QueryRunner;
13 import org.apache.commons.dbutils.handlers.BeanHandler;
14 
15 import com.itheima.domain.User;
16 import com.itheima.utils.DataSourceUtils;
17 
18 public class LoginServlet extends HttpServlet {
19     
20     @Override
21     public void init() throws ServletException{
22          //在Servletcontext域中存一个数据count
23         int count=0;
24         this.getServletContext().setAttribute("count", count);
25     }
26 
27     public void doGet(HttpServletRequest request, HttpServletResponse response)
28             throws ServletException, IOException {
29         
30         //1.获得用户名和密码
31         String username=request.getParameter("username");
32         String password=request.getParameter("password");
33         
34         //2.从数据库中验证该用户名和密码是否正确
35         QueryRunner runner=new QueryRunner(DataSourceUtils.getDataSource());
36         String sql="select * from user where username=? and password=?";
37         User user=null;
38         try {
39             user=runner.query(sql, new BeanHandler<User>(User.class),username,password);
40         } catch (SQLException e) {
41             e.printStackTrace();
42         }
43         //3.根据返回的结果给用户不同显示信息 
44         if(user!=null){
45             //从Servletcontext中取出count进行++运算
46             ServletContext context=this.getServletContext();
47             Integer count=(Integer)context.getAttribute("count");
48             count++;
49             //用户登录成功
50             response.getWriter().write(user.toString()+"--you are success login person"+count);
51             context.setAttribute("count", count);
52         }else{
53             //用户登录失败
54             response.getWriter().write("Sorry,your username or password is wrong!");
55         }
56     }
57 
58     public void doPost(HttpServletRequest request, HttpServletResponse response)
59             throws ServletException, IOException {
60         doGet(request, response);
61     }
62 }

5、编写Servlet配置文件,代码如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
 3   <display-name>WEB13_sevrlet</display-name>
 4   <context-param>
 5     <param-name>driver</param-name>
 6     <param-value>com.mysql.jdbc.Driver</param-value>
 7   </context-param>
 8   
 9   <welcome-file-list>
10     <welcome-file>index.html</welcome-file>
11     <welcome-file>index.htm</welcome-file>
12     <welcome-file>index.jsp</welcome-file>
13     <welcome-file>default.html</welcome-file>
14     <welcome-file>default.htm</welcome-file>
15     <welcome-file>default.jsp</welcome-file>
16   </welcome-file-list>
17   
18   <servlet>
19     <description></description>
20     <display-name>LoginServlet</display-name>
21     <servlet-name>LoginServlet</servlet-name>
22     <servlet-class>com.itheima.login.LoginServlet</servlet-class>
23   </servlet>
24   <servlet-mapping>
25     <servlet-name>LoginServlet</servlet-name>
26     <url-pattern>/login</url-pattern>
27   </servlet-mapping>
28   
29   <servlet>
30     <description></description>
31     <display-name>ContextServlet</display-name>
32     <servlet-name>ContextServlet</servlet-name>
33     <servlet-class>com.itheima.context.ContextServlet</servlet-class>
34   </servlet>
35   <servlet-mapping>
36     <servlet-name>ContextServlet</servlet-name>
37     <url-pattern>/context</url-pattern>
38   </servlet-mapping>
39 
40 </web-app>

6、测试,访问“http://localhost:8080/WEB13_sevrlet/login.html”

分别输入“Tom”,“123”,登录结果如下:

分别输入“Lucy”,“1234”,登录结果如下:

分别输入“Jack”,“123”,登录结果如下:

原文地址:https://www.cnblogs.com/cxq1126/p/7598769.html