技术支持: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 Connectionif (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。