• JavaWeb基础之Servlet简单实现用户登陆


        学习javaweb遇到了一些坑,一些问题总结下来,记个笔记。

        学习servlet遇到的一些坑:

          servlet实现用户登陆遇到的坑解决办法:
          https://www.cnblogs.com/swxj/archive/2013/06/05/3119206.html

          打开配置选择server runtime envir-->绑定运行环境

          tomcat创建要自定义值

          导入tomcat自带的jar包:项目右键--->build path-->add library-->选择Server Runtime--->选择tomcat服务器,这样就能自动导入所有tomcat下的jar包了!无需再二次导入。

       使用Servlet简单实现用户登陆功能

           除了这些jar包另外还需要二次导入jar包:c3p0-* jar包+commons-dbutils-*jar包

           首先创建一张表用于测试用户登陆:

              User表:    

    /*Mysql数据库*/
    create table user(
       username varchar(20),
       password varchar(30),
       id int                 
    );

      创建设置公共的servlet模块

          1.套servlet模块直接调用模块

          配置servlet加载项
          eclipse里面搜索templates 找到java-->editor--->templates然后new

            公共的模块代码:

        设置模块名称servlet,创建servlet之后直接ser+alt+/自动补全就会全部代码结构就位。

    package ${enclosing_package};
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class ${primary_type_name} extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.getWriter().write("hello world!");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

    因为用到c3p0jar包所以固定模式下的c3p0-config.xml

            

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
    
        <default-config>
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://127.0.0.1/数据库名</property>
            <property name="user">数据库名</property>
            <property name="password">数据库密码</property>
            <property name="initialPoolSize">5</property>
            <property name="maxPoolSize">20</property>
        </default-config>
    
        <named-config name="test">
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://127.0.0.1/数据库名</property>
            <property name="user">数据库用户名</property>
            <property name="password">数据库密码</property>
        </named-config>
    
    </c3p0-config>

      用到commons-dbutils-*jar包,需要一个数据库dbutilsl类

          创建包名:cn.test.utils,文件名:DataSourceUtils.java

          内容如下:

            

    package cn.test.utils;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import javax.sql.DataSource;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class DataSourceUtils {
    
        private static DataSource dataSource = new ComboPooledDataSource();
    
        private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
    
        // 直接可以获取一个连接池
        public static DataSource getDataSource() {
            return dataSource;
        }
    
        // 获取连接对象
        public static Connection getConnection() throws SQLException {
    
            Connection con = tl.get();
            if (con == null) {
                con = dataSource.getConnection();
                tl.set(con);
            }
            return con;
        }
    
        // 开启事务
        public static void startTransaction() throws SQLException {
            Connection con = getConnection();
            if (con != null) {
                con.setAutoCommit(false);
            }
        }
    
        // 事务回滚
        public static void rollback() throws SQLException {
            Connection con = getConnection();
            if (con != null) {
                con.rollback();
            }
        }
    
        // 提交并且 关闭资源及从ThreadLocall中释放
        public static void commitAndRelease() throws SQLException {
            Connection con = getConnection();
            if (con != null) {
                con.commit(); // 事务提交
                con.close();// 关闭资源
                tl.remove();// 从线程绑定中移除
            }
        }
    
        // 关闭资源方法
        public static void closeConnection() throws SQLException {
            Connection con = getConnection();
            if (con != null) {
                con.close();
            }
        }
    
        public static void closeStatement(Statement st) throws SQLException {
            if (st != null) {
                st.close();
            }
        }
    
        public static void closeResultSet(ResultSet rs) throws SQLException {
            if (rs != null) {
                rs.close();
            }
        }
    
    }

          创建User的用户类:  cn.test.domain->User.java

              

    package cn.test.domain;
    //创建一个信息类
    public class User {
        private String username;
        private String password;
        private int id;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        @Override
        public String toString() {
            return "User [username=" + username + ", password=" + password + ", id=" + id + "]";
        }
        
        
        
    }

      创建需要登陆的表单html视图页面:WebContent-->login.html

          

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <form action="/TestPro/login" method="post">
            账号:<input type="text" name="username"><br/>
            密码:<input type="password" name="password"><br/>
            <input type="submit" value="登陆">
        </form>
    </body>
    </html>

      设置我们的login servlet路径

        cn.test.loginServlet--->LoginServlet.java 设置访问路径是login

        

    package cn.test.loginServlet;
    
    import java.io.IOException;
    import java.sql.SQLException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.BeanHandler;
    import com.mchange.*;
    import cn.test.domain.User;
    import cn.test.utils.DataSourceUtils;
    
    public class LoginServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
    
            QueryRunner queryRunner = new QueryRunner(DataSourceUtils.getDataSource());
            String sql = "select * from user where username=? and password=?";
            User user = null;
            try {
                user = queryRunner.query(sql, new BeanHandler<User>(User.class), username, password);
                // System.out.println(user);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            if (user != null) {
                response.getWriter().write(user.toString());
            } else {
                response.getWriter().write("sorry you username or password is Error!");
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

        访问http://localhost:对应端口/项目名称/login.html即可进行测试!

  • 相关阅读:
    1202实验三 进程调度实验
    1111实验二 作业调度模拟实验
    1009实验一 认识DOS
    一起了解操作系统发展史
    0909
    进程调度模拟程序
    试验三同学评论
    实验三 进程调度模拟程序
    作业调度模拟程序
    DOS命令解释程序的编写
  • 原文地址:https://www.cnblogs.com/piaomiaohongchen/p/9074173.html
Copyright © 2020-2023  润新知