技术支持: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)主页