技术支持:JAVA、JSP
服务器:TOMCAT 7.0.86
编程软件:IntelliJ IDEA 2021.1.3 x64
OK,那我们进入正题,随着前面一篇博客的尚未完结
基于JSP、java、Tomcat三者的项目实战--校园交易网(2)登录功能实现
我们继续注册功能的实现,注册功能我们会用到dao层,实体类(entity层)和util层
注册页面如下

网页层
zhuce.jsp
<%@page contentType="text/html;charset=utf-8" pageEncoding="UTF-8" %>
<%@page import="java.util.*,java.text.*,entiy.*" %>
<!DOCTYPE html>
<html>
<head>
    <title>交易网注册</title>
    <script>
        function f2(){
            alert("确认注册?");
        }
    </script>
    <style>
        h1 {
            font-size: 40px;
            color: blanchedalmond;
            text-align: center;
            font-family: 'Courier New', Courier, monospace;
            font-style: italic;
        }
    </style>
</head>
<body>
<h1 name="top">交易网</h1>
<table align="center" cellspacing="0">
    <tr>
        <td>
            <table border="1" cellspacing="0">
                <form action="zhuce" method="post">
                    <tr>
                        <td>
                            <table cellpadding="30">
                                <tr>
                                    <td colspan="2" align="center"><strong>注册</strong></td>
                                </tr>
                                <tr>
                                    <td>昵称:
                                        <input type="text" id="name" name="name">
                                    </td>
                                </tr>
                                <tr>
                                    <td>帐号:
                                        <input type="text" id="idname" name="idname">(输入九位以内整数字)
                                    </td>
                                </tr>
                                <tr>
                                    <td>密码:
                                        <input type="password" id="pd" name="pd">
                                    </td>
                                </tr>
                                <tr>
                                    <td align="center" colspan="2">
                                        <input type="submit" value="注册" onclick="f2();">
                                    </td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                </form>
            </table>
        </td>
    </tr>
    <tr>
        <td align="right">关于交易网</td>
    </tr>
</table>
</body>
</html>
1. 页面结构和布局
- HTML 结构: 
  - 页面使用了基本的 HTML 结构,包括了 <!DOCTYPE html>声明和<html>,<head>,<body>标签。
- 页面标题为 "交易网注册",并在页面顶部展示了一个标题为 "交易网" 的大标题。
- 使用了嵌入的 JavaScript 和 CSS 来增强页面功能和样式。
 
- 页面使用了基本的 HTML 结构,包括了 
2. 技术功能
-  CSS 样式: - 使用了内嵌样式表 <style>,定义了h1元素的样式,包括字体大小、颜色、对齐方式和字体样式。
 
- 使用了内嵌样式表 
-  JavaScript 功能: - 在 <head>部分定义了一个 JavaScript 函数f2(),当用户点击注册按钮时,会弹出一个确认框,提醒用户确认注册。
 
- 在 
-  HTML 表单: - 使用了 HTML 表单 <form>来收集用户的注册信息。
- 包含了昵称、帐号(应为 ID)、密码输入框。
- 提供了一个注册按钮,点击时触发注册事件,并调用 f2()函数进行确认。
 
- 使用了 HTML 表单 
3. 表单提交
- 表单提交动作: 
  - 表单的提交动作指向 action="zhuce",使用 POST 方法提交。
- 当用户填写完信息后,点击注册按钮时,会将用户输入的数据发送到指定的 zhuce接口或页面进行处理。
 
- 表单的提交动作指向 
4. 连接服务
- 服务连接说明: 
  - 页面中的注册表单定义了 action="zhuce",这意味着提交的数据将会发送到zhuce这个服务端点。
- 在实际开发中,你需要编写后端处理逻辑,接收这些数据并进行相应的处理,比如验证用户信息、保存到数据库等操作。
- 根据实际情况,zhuce可能是一个后端处理接口(比如 Servlet、Spring MVC 控制器等),负责接收 POST 请求,解析请求体中的数据,并执行相应的业务逻辑。
 
- 页面中的注册表单定义了 
总的来说
这段代码实现了一个简单的注册页面,使用了基本的 HTML、CSS 和 JavaScript 技术。用户填写表单后,通过 POST 方法将数据发送到指定的后端服务(zhuce),以便后端处理注册逻辑。在真实环境中,你需要确保 zhuce 服务端点正确处理请求,并与前端页面配合良好,实现用户注册功能。
服务层
zhuceServlet
package Servlet;
import dao.StudentDAO;
import entiy.Student;
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 zhuceServlet extends HttpServlet {
    public void service(HttpServletRequest request,
                        HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String name = request.getParameter("name");
        String idname = request.getParameter("idname");
        String pd = request.getParameter("pd");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        try {
            if (name == null || idname == null || pd == null ||
                    name.isEmpty() || idname.isEmpty() || pd.isEmpty()) {
                throw new IllegalArgumentException("参数不能为空");
            }
            StudentDAO dao = new StudentDAO();
            Student e1 = new Student();
            e1.setName(name);
            e1.setIdname(Integer.parseInt(idname));
            e1.setPd(pd);
            dao.save(e1);
            response.sendRedirect("denglu.jsp");
        } catch (NumberFormatException e) {
            out.println("ID必须是数字");
        } catch (IllegalArgumentException e) {
            out.println(e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            out.println("系统繁忙,请稍后再试!");
        } finally {
            out.close();
        }
    }
}
不同于登录服务的实现,在这个方法内更为深刻的是我们在这里调用了我们的dao层和entity层
-  服务方法 (service方法) 解析:- service方法重写了- HttpServlet类的方法,处理 HTTP 请求。
- request.setCharacterEncoding("utf-8")设置请求的字符编码为 UTF-8,确保能正确处理中文字符。
- 通过 request.getParameter方法获取提交的表单参数name,idname,pd。
- response.setContentType("text/html;charset=utf-8")设置响应的内容类型为 HTML,并指定字符集为 UTF-8。
- 在 try-catch块中进行注册逻辑处理:- 首先检查参数是否为空,如果为空则抛出异常。
- 创建 StudentDAO的实例dao,用于数据库操作。
- 创建 Student对象e1,并设置其属性。
- 调用 dao.save(e1)方法将学生信息保存到数据库中。
- 使用 response.sendRedirect("denglu.jsp")实现注册成功后的重定向到登录页面。
 
- catch块捕获可能出现的异常:- NumberFormatException:当- idname不是数字时抛出,输出 "ID必须是数字"。
- IllegalArgumentException:当参数为空时抛出,输出异常消息。
- Exception:捕获其他异常,并打印异常堆栈信息,并输出 "系统繁忙,请稍后再试!"。
 
- finally块确保- PrintWriter被关闭,释放资源。
 
4. 总结
这段代码通过 Servlet 处理用户注册请求,验证用户提交的表单数据,将有效数据保存到数据库中,并在操作成功或失败时给予相应的响应。在实际应用中,需要确保 StudentDAO 类正确实现了数据库访问逻辑,并且 denglu.jsp 页面存在且正确配置。

服务层下调用的dao层
dao层的StudentDao中的save方法
我们仔细看服务层的代码

它只调用了dao层的save方法

则在dao中我们写下了许多的方法,我们调用的是dao层的save方法
public void save(Student e) throws Exception {
        Connection conn = null;
        PreparedStatement prep = null;
        try {
            conn = DBUtil.getConnection();
            prep = conn.prepareStatement(
                    "INSERT INTO users (name, idname, pd) VALUES (?, ?, ?)");
            prep.setString(1, e.getName());
            prep.setInt(2, e.getIdname());
            prep.setString(3, e.getPd());
            prep.executeUpdate();
        } catch (Exception e1) {
            e1.printStackTrace();
            throw e1;
        } finally {
            // Close PreparedStatement and Connection
            if (prep != null) {
                try {
                    prep.close();
                } catch (SQLException e2) {
                    e2.printStackTrace();
                }
            }
            DBUtil.close(conn);
        }
    }save方法中又调用了util包中的DButil
DButil
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBUtil {
    public static Connection getConnection() throws Exception {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/sdjyy?" +
                            "useUnicode=true&characterEncoding=utf8","root","asd123"
            );
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
        return conn;
    }
    public static void close(Connection conn){
        if(conn!=null){
            try {
                conn.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args)throws Exception{
        Connection conn = getConnection();
        System.out.println(conn);
    }
}
写到这里,服务层的代码才算闭环。
最后还要记得写上web.xml文件
   <servlet>
        <servlet-name>zhuce</servlet-name>
        <servlet-class>Servlet.zhuceServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>zhuce</servlet-name>
        <url-pattern>/zhuce</url-pattern>
    </servlet-mapping>于此,注册功能便可以实现了
忘记说了
tomcat服务器的操作步骤是

点入run之后等待服务器的加载,他会自动跳出一个网页出来
你可以在网页上输入你的jsp网页的文件名,比如denglu.jsp,也可以输入你的web.xml的sevlet-name。

主页传送门
基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页



















