Web+Tomcat+Servlet+MySQL实现登录页面【JavaWeb笔记一】

news/2024/5/19 1:46:26 标签: java, jdbc, javaweb

目录

功能描述:

实现框图:

具体实现过程

一、环境搭建

服务器环境搭建:

页面部分环境搭建:

数据库部分环境搭建:

二、代码实现过程

1、创建一个带表单提交的 html 页面(login.html)

2、在 web.xml 文件下绑定 Servlet 的对象类

java%20%EF%BC%88LoginServer.java%EF%BC%89%20%E7%B1%BB%E6%9D%A5%E6%89%A7%E8%A1%8C%20Servlet%20%E6%93%8D%E4%BD%9C-toc" style="margin-left:80px;">3、创建 java (LoginServer.java) 类来执行 Servlet 操作

jdbc%20%E5%AE%8C%E6%88%90%E6%95%B0%E6%8D%AE%E5%BA%93%E9%83%A8%E5%88%86%E6%93%8D%E4%BD%9C%20%EF%BC%88Demo.java%EF%BC%89-toc" style="margin-left:80px;">4、jdbc 完成数据库部分操作 (Demo.java

5、通过测试 @Test 完成数据库的连接测试  


功能描述:

网页登录模块,页面有表单验证,后台连接数据库真实判断, 跳转到不同页面给用户提示(页面如下图)

 

实现框图:

网页登录->访问服务器->查询数据库->返回结果->页面显示登陆结果(实现框图如下图)

 

具体实现过程

 

一、环境搭建

服务器环境搭建:

【本项目基于IDEA+Tomcat】所以需要在IEDA上配置Tomcat:

Run > Edit Configurations > Application server : 配置 Tomcat 服务器

 

页面部分环境搭建:

1、创建的是JavaEE项目 > Additional Libraries and Frameworks : 勾选Web Application

2、WEB-INF 下创建 classes(用于放置之后生成的字节文件)

                 File > Project Structure > Modules > Path >选择输出路径 Use module compile output path

                 lib(用于存放之后项目需要用到的依赖包)

                 File > Project Structure > Modules > Dependencies > + (指定当前目录下的lib) > jar directory

3、后面连接数据库,需要将jdbc的驱动(依赖jar包),放到次目录下(web/WEB-INF/lib)

 

数据库部分环境搭建:

1、为了完成数据库操作,需要引入测试 @Test 来测试数据库操作是否正常

创建一个 test 文件夹,并将其转换为测试文件夹 右键: > Mark Directory as > Test Sources Root

2、创建一个lib文件夹 用于存放依赖包

3、引入依赖包:①junit-4.8.jar  ②mysql-connector-java-5.1.37-bin.jar

File > Project Structure > Libraines > + (选择当前项目文件夹)> + (classes) 导入lib下的 junit 和 mysql-connector > 不加载modules

File > Project Structure > Modules > Path > Dependencies > + > 2 Library > java > 选择当前项目文件夹

 

二、代码实现过程

1、创建一个带表单提交的 html 页面(login.html)

 <form action="/login" method="post"> 提交跳转到/login  请求方法为Post

~/web/login.html

<head>
    <meta charset="UTF-8">
    <title>登录</title>
    <style>
        * {margin: 0px;padding: 0px;}
        #box {width: 500px;height: 250px;background-color: antiquewhite;position: absolute;left: 50%;top: 50%;margin: -125px -250px;}
        h1 {width: 500px;height: 100px;background-color: aqua;display: table-cell;vertical-align: middle;text-align: center;}
        .title{position: relative;top: 20px;left: 40px;font-weight: 1000;}
        .res{position: relative;top: 20px;left: 60px;}
        .text{position: relative;top: 20px;left: 90px;font-size: 12px;color:grey;}
        .reset{position: relative;top: 20px;left: 150px;font-size: 20px;}
        .submit{position: relative;top: 20px;left: 200px;font-size: 20px;}
    </style>
</head>

<body>
<div id="box">
    <h1>登录模块</h1>
    <form action="/login" method="post">
        <span class="title">Username</span><input type="text" name="username" class="res"><span class="text">请输入用户名称</span><br /><br />
        <span class="title">Password</span><input type="password" name="password" class="res"><span class="text">请输入账户密码</span><br /><br />
        <input type="reset" value="重置" class="reset">
        <input type="submit" value="登录" class="submit">
    </form>
</div>
</body>

 

2、在 web.xml 文件下绑定 Servlet 的对象类

~/web/WEB-INF/web.xml

<servlet>
    <servlet-name>login</servlet-name>                      <!-- 绑定对象的名字 -->
    <servlet-class>com.yuyu.LoginServer</servlet-class>     <!-- 对应绑定的 Servlet 对象 -->
</servlet>
<servlet-mapping>
    <servlet-name>login</servlet-name>                      <!-- 绑定对象的名字 -->
    <url-pattern>/login</url-pattern>                       <!-- 页面表单提交的跳转对象 -->
</servlet-mapping>

 

java%20%EF%BC%88LoginServer.java%EF%BC%89%20%E7%B1%BB%E6%9D%A5%E6%89%A7%E8%A1%8C%20Servlet%20%E6%93%8D%E4%BD%9C" style="margin-left:0pt;">3、创建 java (LoginServer.java) 类来执行 Servlet 操作

public class LoginServer extends HttpServlet{}     继承 HTTPServlet 来重载 Servlet中的方法

java">~/src/com/yuyu/web/LoginServer.java

public class LoginServer extends HttpServlet {
    //数据库操作对象
    Demo1 demo1 = new Demo1();

    /**
     * 处理 Get 方法
     * @param req   请求对象
     * @param resp  响应对象
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理Get方法
        //Get方法登录时直接跳转到loginError页面
        //req.getRequestDispatcher("loginError.html").forward(req,resp);
        //由后台给前台返回一段js代码
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print("<script>alert('请通过表单进行登录');location.href='/login.html'</script>");
    }

    /**
     * 处理 Post 方法
     * @param req     请求对象
     * @param resp    响应对象
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理Post方法
        //处理编码问题
        req.setCharacterEncoding("utf-8");
        //1、接收参数     根据参数得到前端请求的内容
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println("username="+username+",password="+password);
        //2、跳转页面测试
        Person person = null;
        try {
            //通过得到的内容查询数据库,如果能查询到结果则返回一个person对象,查不到返回 null
            person = Demo1.selectPerson(username,password);
        } catch (Exception e) {
            e.printStackTrace();
        } 
        // 非空则说明查询到了对象 直接跳转到相应界面
        if (person != null) {
            //跳转到 success.html 显示登陆成功的页面
            req.getRequestDispatcher("/success.html").forward(req, resp);
        }else {
            //跳转到 error.html 显示登陆失败的页面
            req.getRequestDispatcher("/error.html").forward(req, resp);
        }
    }

    @Override
    public void destroy() {
        System.out.println("销毁方法");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("初始化");
    }
}

 

jdbc%20%E5%AE%8C%E6%88%90%E6%95%B0%E6%8D%AE%E5%BA%93%E9%83%A8%E5%88%86%E6%93%8D%E4%BD%9C%20%EF%BC%88Demo.java%EF%BC%89" style="margin-left:0pt;">4、jdbc 完成数据库部分操作 (Demo.java

使用 jdbc 操作数据库的必要步骤:

java"> //1. 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//2. 通过驱动管理器,获取JDBC的连接对象
//   连接地址格式:
//      主协议:子协议://ip地址:端口号/数据库名称
//      mysql(的格式): [jdbc:mysql://localhost:3306/users(useUnicode=true&characterEncoding=utf-8)[加上编码]]
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/users?useUnicode=true&characterEncoding=utf-8","root","123465");
//3. 通过连接对象,创建SQL执行对象(SQL执行环境)
Statement state = conn.createStatement();
//4. 通过SQL执行对象,执行SQL
//excute()增删改查都能执行,有返回值:真假
// 但返回值true代表有结果集返回,假为返回不是结果集(不是执行失败)
state.execute("create table person(id int primary key auto_increment,username varchar(20),password varchar(20))");
//state.executeUpdate();执行增删改
//state.executeQuery();执行查询
//5. 释放连接
state.close();
conn.close();

 

创建表格:

java">~/src/com/yuyu/dao/Demo1.java

创建表格:
public static void createTable() throws ClassNotFoundException, SQLException {
    //1. 加载数据库驱动
    Class.forName("com.mysql.jdbc.Driver");
    //2. 通过驱动管理器,获取JDBC的连接对象
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/users?useUnicode=true&characterEncoding=utf-8","root","123465");
    //3. 通过连接对象,创建SQL执行对象(SQL执行环境)
    Statement state = conn.createStatement();
    //4. 通过SQL执行对象,执行SQL
    state.execute("create table person(id int primary key auto_increment,username varchar(20),password varchar(20))engine=innodb default charset=utf8");
    //5. 释放连接
    state.close();
    conn.close();
}

 

插入数据:

java">public static void insertData() throws ClassNotFoundException, SQLException {
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/usersuseUnicode=true&characterEncoding=utf-8","root","123465");
    Statement state = conn.createStatement();
    state.execute("insert into person values(null,'123','123')");
    state.execute("insert into person values(null,'456','456')");
    state.execute("insert into person values(null,'789','789')");
    state.execute("insert into person values(null,'000','000')");
    state.close();
    conn.close();
}

 

查询数据:返回一个person对象,用于 Servlet 响应请求

java">public static Person selectPerson(String username,String password) throws ClassNotFoundException, SQLException {
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/users?useUnicode=true&characterEncoding=utf-8","root","123465");
    Statement state = conn.createStatement();
    //查询结果返回的是一个结果集
    ResultSet res = state.executeQuery("select * from person where username='" + username + "' and password='" + password + "'");
    int id = 0;
    String usernameCheck = null;
    String passwordCheck = null;
    Person person = null;
    while (res.next()){
        id = res.getInt("id");
        usernameCheck = res.getString("username");
        passwordCheck = res.getString("password");
        System.out.println("有此用戶:id="+id+";username="+usernameCheck+";password="+passwordCheck);
        person = new Person(id,usernameCheck,passwordCheck);
    }
    res.close();
    state.close();
    conn.close();
    return person;
}

 

5、通过测试 @Test 完成数据库的连接测试  

Ctrl + shift + T 创建测试类  (在 test 目录下的 Demo1Test.java

java">~/test/com/yuyu/dao/Demo1Test.java

public class Demo1Test {

    @Test
    public void createTable() throws SQLException, ClassNotFoundException {
        Demo1.createTable();
    }

    @Test
    public void insertData() throws SQLException, ClassNotFoundException {
        Demo1.insertData();
    }

    @Test
    public void selectPerson() throws SQLException, ClassNotFoundException {
        Demo1.selectPerson("123","123");
    }
}

 


http://www.niftyadmin.cn/n/1012000.html

相关文章

主管人员的人际领导技能

1. 高内聚力团队具有的特质 成员之间相互信任。 针对不同意见进行直接的辩论。 积极投入到决策和行动计划中去。 对影响工作计划的行为负责。 把重点放在集体的成绩上。团队式协作就是透过个体的活性化和彼此之间有效的互动&#xff0c;使个体动力整合成为团体动力的过程。主管…

奇妙的VHD

VHD文件真是个奇妙的东西&#xff0c;它可以在物理机上使用&#xff1b;也可以在虚拟机上使用&#xff1b;可以把父文件和快照文件合并&#xff0c;组成一个文件带走&#xff1b;也可以安装操作系统&#xff0c;挂载在真实的操作系统上共享物理机资源。 1、VHD文件的产生&#…

MVC模式笔记【JavaWeb笔记二】

目录 MVC模式概念&#xff1a; 包结构&#xff1a; 基于MVC模式的项目&#xff1a; 页面如下图&#xff1a; 项目包结构&#xff1a; 项目框图&#xff1a; 代码实现过程&#xff1a; 1、初始页面&#xff08;index.jsp&#xff09; 2、Servlet&#xff08;XxxxxServle…

Android 中关于删除文件以及文件夹的命令

记录一下命令&#xff1a; tools>adb remount tools>adb shell #su #cd system/sd/data //进入系统内指定文件夹 #ls //列表显示当前文件夹内容 #rm -r xxx //删除名字为xxx的文件夹及其里面的所有文件 #rm xxx //删除文件xxx #rmdir xxx //删除xxx的文件夹转载于…

smartupload.jar实现文件上传【JavaWeb笔记三】

目录 实习过程&#xff1a; 0、导入依赖包&#xff1a;smartupload.jar 1、上传页面&#xff08;index.jsp&#xff09; 2、后台实现&#xff08;UploadServlet.java&#xff09; 3、上传成功后的检验 &#xff08;success.jsp&#xff09; 实习过程&#xff1a; 0、导入…

异步调用Web服务方法

基于Ajax技术构建的门户是web 2.0这一代中最为成功的Web应用程序。而这块市场上iGoogle和Pageflakes这两大站点已经走在了时代的前列。 当你打开Pageflakes&#xff0c;将会看到如下的界面&#xff1a; 接下来就是界面上的各个“部件”去向服务器请求各种web服务&#xff0c;而…

一对多【Java实现多表操作笔记一】

一对多 原则&#xff1a;一方存多方的集合&#xff0c;多方存一方的对象 实例&#xff1a;学生和年级关系&#xff1a;学生是多方&#xff0c;年级是一方 实现过程&#xff1a; 1、javabean 数据库中使用外键列保证两表关系&#xff0c;实体类中使用属性保证两表关系 [src.…

【翻译】我钟爱的HTML5和CSS3在线工具

我真的喜欢上了HTML5, CSS3, JavaScript编程&#xff0c;但是有一些代码还是需要一些辅助工具来做才行&#xff0c;例如&#xff0c;CSS3的Gradient渐变如果手写代码的话真的不爽&#xff0c;还有像animation动画,transform转变或者是需要矢量扩展的style代码都是很复杂的。网上…