idea使用JDBC创建一个简单的WEB登录页面

本文介绍了一个基于Servlet和MySQL实现的简单登录系统项目。通过客户端和服务端的交互完成用户登录验证,涉及Servlet处理流程、JDBC数据库操作及SQL语句编写等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习目标:

在学习了servlet和http之间的交互,也迎来了第一个小项目,在此之前也学习了MySQL-JDBC,于是尝试做一个简单的登录页面

例如:

  • 主要温习了SQL语句以及HTTP交互协议

代码撰写流程:

登录小项目流程
1、使用原生的方式生成页面

2、客户端先发送请求,得到要登录的页面

3、用户填写相应的用户数据,发送请求给服务端

4、服务端接受到请求后进行逻辑处理

5、服务端将处理之后的结果返回给客户端

1.首先要常见一个loginservlet的一个Java类:客户端先发送请求

package com.mashibing.control;

import com.mashibing.entity.User;
import com.mashibing.service.UserService;
import com.mashibing.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;

public class LoginServlet extends HttpServlet {
    UserService userService=new UserServiceImpl();
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
          this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
          String name=request.getParameter("name");
          String pwd=request.getParameter("pwd");
          User user=new User(name,pwd);
          User u= null;
        try {
            u = userService.checkUser(user);
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println(u);
        if(u!=null){
            response.getWriter().write("success");
        }else {
            response.getWriter().write("failure");
        }

    }
}

2.得到登录页面

package com.mashibing.control;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class PageServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        this.doGet(request, response);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("接受到客户端的请求,返回响应登陆页面");
        response.setContentType("text/html");
        PrintWriter out=response.getWriter();
        out.write("<html>");
        out.write("<head>");
        out.write("</head>");
        out.write("<body>");
        out.write("<form action='login' method='get'>");
        out.write("name:<input type='text' name='name' value=''/><br/>");
        out.write("pwd:<input type='text' name='pwd' value=''/><br/>");
        out.write(" <input type='submit' value='loading'>");
        out.write("</from>");
        out.write("</body>");
        out.write("</html>");
    }
}

3.用户填写相应的用户数据,发送请求给服务端

package com.mashibing.entity;

public class User {
    private int id;
    private String name;
    private String pwd;

    public User( String name, String pwd) {
        this.name = name;
        this.pwd = pwd;
    }public User(int id, String name, String pwd) {
        this.name = name;
        this.pwd = pwd;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}
package com.mashibing.dao.impl;

import com.mashibing.dao.UserDao;
import com.mashibing.entity.User;

import java.sql.*;

public class UserDaoImpl implements UserDao {
    @Override
    public User checkUser(User user)  {
        Connection connection=null;
        Statement statement=null;
        PreparedStatement pst=null;
        ResultSet resultSet=null;
        User u=null;
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            //因为JDBC中是MYSQL专门提供的jar包,所以url都是一致的,后面的user和password是根据数据库那边自己设置的
            connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/login","root","20010612Syf@");
            statement=connection.createStatement();
            //这是一条查询的SQL语句
            pst = connection.prepareStatement("select * from user where name = ?and pwd =?");
            pst. setString(1,user.getName());
            pst.setString(2, user.getPwd());
            resultSet = pst.executeQuery();
           /* String sql="select * from user where username=?";
            pst=con.prepareStatement(sql);*/

          //  resultSet=statement.executeQuery("select name,pwd from user");

          // pst = con.prepareStatement;
            //调用next()方法可以将游标移动到下一行,如果下一代没有数据,则返回false
            while(resultSet.next()){
                //注意这里打印输出的数据类型需要和数据库表中的数据一致,不然也会报错
                u=new User(resultSet.getInt("id"),resultSet.getString("name"),resultSet.getString("pwd"));
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{//调用finally方法,强制执行下面三个方法,关闭数据流,节约内存
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
      /*  Connection con=null;
        PreparedStatement pst=null;
        ResultSet rs=null;
        User u=null;

        try{
        Class.forName("com.mysql.cj.jdbc.Driver");

        con= DriverManager.getConnection("jdbc:mysql://localhost:3306/login","root", "20010612@Syf");

        pst = con.prepareStatement("select * from user where name = ?and pwd =?");
        pst. setString(1,user.getName());
        pst.setString(2, user.getPwd());
        rs = pst.executeQuery();
        while (rs.next()){
            u=new User(rs.getInt("id"),rs.getString("name"),rs.getString("pwd"));
        }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                pst.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }*/
     return u;
    }
}
package com.mashibing.dao;

import com.mashibing.entity.User;

import java.sql.SQLException;

public interface UserDao {
    User checkUser(User user) throws ClassNotFoundException, SQLException;
}
package com.mashibing.service.impl;


import com.mashibing.dao.UserDao;
import com.mashibing.dao.impl.UserDaoImpl;
import com.mashibing.entity.User;
import com.mashibing.service.UserService;

import java.sql.SQLException;

public class UserServiceImpl implements UserService {
     UserDao userDao=new UserDaoImpl();

     /* @Override
      public User checkUser(User user)  {
          return userDao.checkUser(user);
      }*/

    @Override
    public User checkUser(User user) throws SQLException, ClassNotFoundException {
        return userDao.checkUser(user);
    }
}

package com.mashibing.service;

import com.mashibing.entity.User;

import java.sql.SQLException;

public interface UserService {
    User checkUser(User user) throws SQLException, ClassNotFoundException;
}

中间出现的坎坷可谓是一波三折

肠子都哭青了的事情

servlet.jar不小心加错了,应该在Libraries里面添加的,但是由于惯性居然在Modules加了,导致servlet.jar一直加载失败

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--用来获取登陆页面的请求-->
    <servlet>
        <servlet-name>PageServlet</servlet-name>
        <servlet-class>com.mashibing.control.PageServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>PageServlet</servlet-name>
    <url-pattern>/page</url-pattern>
</servlet-mapping>

    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.mashibing.control.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

</web-app>

 最最让人难受的事情还得是SQL语句写错,做了各种各样的尝试,更换版本、修改了MYSQL配置,一度以为是密码的错误,甚至修改了my.ini配置文件。

感想:纪念一下第一个小项目,用别人做过的项目就连环境配置都要一模一样啊

### 如何在 IntelliJ IDEA 2024 中创建 Struts 项目 #### 准备工作 为了成功创建一个基于 Struts 的项目,在开始之前需要确保已下载并准备好以下资源: - **Struts2 库**:如果网络不可用,需提前手动下载所需的 JAR 文件。 - **Web 容器支持**:例如 Apache Tomcat 或其他兼容的 Servlet 容器。 --- #### 创建新项目 1. 打开 IntelliJ IDEA 并选择 `File` -> `New` -> `Project...`[^2]。 2. 在弹出窗口中选择 `Java Enterprise` 类型,并勾选 `Web Application` 和 `Struts 2 Framework` 支持。点击 `Next` 继续设置项目名称和存储路径[^3]。 --- #### 配置本地 Struts2 Jar 包 当无法联网时,可以通过手动导入方式完成依赖配置: 1. 下载完整的 Struts2 发行版压缩包(通常包含核心库及其依赖项)。 2. 将解压后的 JAR 文件复制到项目的 `lib` 目录下。 3. 右键单击这些 JAR 文件,选择 `Add as Library...` 来将其添加至模块的类路径中[^1]。 --- #### 编写基本配置文件 ##### web.xml 设置 在 `WEB-INF/web.xml` 文件中定义过滤器链来启用 Struts 功能: ```xml <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 上述 XML 片段用于初始化 Struts 过滤器以拦截请求。 --- #### 测试页面开发 可以在 `webapp` 目录下新增测试页面验证环境是否正常运行。例如创建名为 `index.jsp` 的入口页以及对应的 Action 处理逻辑[^4]: ```jsp <!-- index.jsp --> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Home Page</title> </head> <body> <h1>Welcome to the Struts Demo!</h1> <a href="${pageContext.request.contextPath}/hello">Say Hello</a> </body> </html> ``` 同时编写简单的 Action 映射规则于 `struts.xml` 内部声明: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <package name="default" namespace="/" extends="struts-default"> <action name="hello" class="com.example.HelloAction"> <result>/success.jsp</result> </action> </package> </struts> ``` 以上代码片段展示了如何映射 URL 请求到指定的动作处理器上。 --- #### 数据库连接 (可选) 对于涉及持久化操作的应用场景,可以额外增加 JDBC 属性设定以便访问外部数据源[^5]: ```properties # jdbc.properties example configuration file content. jdbc.driverClass=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC jdbc.username=root jdbc.password=password ``` 注意替换占位符为实际使用的数据库凭证信息前缀。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值