当前位置: 首页 > article >正文

JavaEE 前后端交互与数据库连接练习

        我将详细总结一个JavaEE练习项目,该项目展示了前后端交互以及与数据库连接的基本流程。该项目使用Maven构建,并部署在Tomcat服务器上。通过这个练习,可以掌握如何在JavaEE中处理用户请求、访问数据库以及进行页面跳转。

项目结构

该项目是一个典型的Maven Web项目,其目录结构如下:

 

- src
  - main
    - java
      - com.ffyc.dao
        - IUserDao.java
        - IUserDaoImpl.java
      - com.ffyc.entity
        - User.java
      - com.ffyc.filter
        - CodingFilter.java
      - com.ffyc.servlet
        - LoginServlet.java
    - resources
      - (资源文件,如配置文件)
    - webapp
      - WEB-INF
        - web.xml
      - index.html
      - login-success.html
  • src/main/java: 放置Java类文件,包括DAO层、实体类、过滤器和Servlet。

  • src/main/resources: 放置资源文件,如配置文件、properties文件等。

  • src/main/webapp: 放置Web资源,如HTML页面、JSP文件、过滤器配置等。

    • WEB-INF: 放置web.xml等配置文件,以及class文件。

    • index.html: 登录页面。

    • login-success.html: 登录成功后的页面。

 代码解释

1. 数据访问层 (DAO层)

IUserDao.java
package com.ffyc.dao;

import com.ffyc.entity.User;

public interface IUserDao {
    User find(String username, String password);
}
  • 定义了一个find方法,用于根据用户名和密码查询用户信息。

IUserDaoImpl.java
package com.ffyc.dao;

import com.ffyc.entity.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class IUserDaoImpl implements IUserDao {
    private final String USERNAME = "root";
    private final String PASSWORD = "123456";
    private final String URL = "jdbc:mysql://localhost:3306/stu_db?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
    private Connection conn;
    private PreparedStatement pst;
    private ResultSet rs;

    public IUserDaoImpl() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public User find(String username, String password) {
        String sql = "select * from user_tab where user_username =? and user_password =?";
        try {
            pst = conn.prepareStatement(sql);
            pst.setString(1, username);
            pst.setString(2, password);
            rs = pst.executeQuery();
            if (!rs.next()) {
                return null;
            } else {
                Integer id = rs.getInt("user_id");
                String u = rs.getString("user_username");
                String p = rs.getString("user_password");
                String name = rs.getString("user_name");
                User user = new User();
                user.setId(id);
                user.setUsername(u);
                user.setPassword(p);
                user.setName(name);
                return user;
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}
  • 实现了IUserDao接口的find方法。

  • 建立数据库连接,执行SQL查询,返回用户对象。

2. 实体类

User.java
package com.ffyc.entity;

import lombok.Data;

@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private String name;
}
  • 使用Lombok的@Data注解,自动生成getter和setter方法。

  • 表示用户实体类,包含用户ID、用户名、密码和姓名。

3. 过滤器

CodingFilter.java
package com.ffyc.filter;

import javax.servlet.*;
import java.io.IOException;

public class CodingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=utf-8");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}
  • 实现了Filter接口,设置请求和响应的编码为UTF-8,防止乱码。

4. Servlet

LoginServlet.java
package com.ffyc.servlet;

import com.ffyc.dao.IUserDao;
import com.ffyc.dao.IUserDaoImpl;
import com.ffyc.entity.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(value = "/login.do")
public class LoginServlet extends HttpServlet {
    private IUserDao userDao;

    public LoginServlet() {
        userDao = new IUserDaoImpl();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        User user = userDao.find(username, password);
        if (user == null) {
            resp.sendRedirect("index.html");
        } else {
            resp.sendRedirect("login-success.html");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
  • 使用@WebServlet注解映射URL /login.do

  • 获取请求参数usernamepassword,调用userDao.find方法查询用户。

  • 根据查询结果重定向到不同的页面。

5. 前端页面

index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页面</title>
</head>
<body>
<form action="http://localhost:8099/login.do" method="post">
    <fieldset>
        <legend>用户登录</legend>
        <div>
            <input type="text" name="username" placeholder="用户名">
        </div>
        <div>
            <input type="password" name="password" placeholder="密码">
        </div>
        <div>
            <input type="submit" value="登录">
            <input type="reset" value="取消">
        </div>
    </fieldset>
</form>
</body>
</html>
  • 提供一个简单的登录表单,提交到/login.do

 login-success.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录成功页面</title>
</head>
<body>
<img src="https://img95.699pic.com/photo/40236/5997.jpg_wh300.jpg"/>
<h1>登录成功</h1>
</body>
</html>

项目配置

1. web.xml配置

WEB-INF目录下的web.xml文件中配置过滤器:

<filter>
    <filter-name>CodingFilter</filter-name>
    <filter-class>com.ffyc.filter.CodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

2. 数据库配置

IUserDaoImpl.java中配置了数据库连接信息:

private final String USERNAME = "root";
private final String PASSWORD = "123456";
private final String URL = "jdbc:mysql://localhost:3306/stu_db?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";

需要确保数据库stu_db中存在user_tab表,并且表结构与代码中查询的字段一致。

总结

通过这个练习,我学习了JavaEE中前后端交互的基本流程,包括:

  1. 前端页面: 使用HTML表单收集用户输入,并提交到Servlet。

  2. Servlet处理请求: 获取请求参数,调用DAO层方法查询数据库。

  3. 数据库访问: 通过DAO层建立数据库连接,执行SQL查询,返回结果。

  4. 页面跳转: 根据查询结果重定向到不同的页面。

        这个练习为我打下了JavaEE开发的基础,理解了MVC架构中各层的作用和交互方式。今后我将继续深入学习JavaEE,掌握更多高级功能和最佳实践。


http://www.kler.cn/a/466653.html

相关文章:

  • 云架构Web端的工业MES系统设计之区分工业过程
  • STLG_01_10_程序设计C语言 - 字符串
  • 模型 九屏幕分析法
  • GPT系统重大升级,开创国内先河:o1支持图片识别功能正式上线
  • 软件工程期末大复习(六)面向对象分析
  • 后台管理系统动态面包屑Breadcrumb组件的实现
  • mybatisPlus拦截sql失败----已解决
  • basic-validation-using-flask-gladiator-module-in-python
  • APM 3.0.2 | 聚合B站、油管和MF的音乐播放器,支持歌词匹配
  • 2025 小模型技术:驱动低代码与物联网融合发展新引擎
  • Markdown段落的空行缩进用法
  • STM32 拓展 RTC(实时时钟)
  • 前端,npm install安装依赖卡在sill idealTree buildDeps(设置淘宝依赖)
  • ElasticSearch11-8.x 新特性
  • JupyterLab notebook环境在Ubuntu24.04下的安装和Windows 10下vscode远程使用jupyter
  • 鸿蒙应用开发搬砖经验之—使用DevTools工具调试前端页面
  • SpringBoot + Vue 项目创建详细步骤
  • BERT算法实现SQuAD问答系统任务和IMDB文本分类任务
  • uniapp 微信小程序 自定义日历组件
  • LiveData 原理分析
  • OpenSSL SSL_connect: Connection was reset in connection to github.com:443
  • 图像去雾 | 基于Matlab的图像去雾系统(四种方法)
  • 【开源】创建自动签到系统—QD框架
  • Statistic for ML
  • 《Java核心技术II》管道化Optional值
  • Flutter中的网络请求图片存储为缓存,与定制删除本地缓存