zoukankan      html  css  js  c++  java
  • 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”,登录结果如下:

  • 相关阅读:
    国内外手机号码正则表达式
    apt安装Neo4j
    经典决策树模型
    自动文档摘要评价方法
    scrapy-splash解析javascript
    ubuntu安装splash
    iptables的删除命令中的相关问题
    ARTS第七周
    ARTS第六周
    ARTS第五周
  • 原文地址:https://www.cnblogs.com/cxq1126/p/7598769.html
Copyright © 2011-2022 走看看