赞
踩
开始时间:2021-06-30
1.创建用户信息表
CREATE TABLE MyUsers(
userId int primary key auto_increment,#用户编号
userName varchar(50),#用户名称
password varchar(50),#用户密码
sex char(1), #用户性别'男′或则'女'
email varchar(50) #用户邮箱
)
insert into MyUsers(userName,password,sex,email)values('JDH','111','男','mike@163.com')
2.创建entity.Users 实体类
package Entity; public class Users { private Integer UserId; private String UserName; private String Password; private String sex; private String email; public Integer getUserId() { return UserId; } public void setUserId(Integer userId) { UserId = userId; } public String getUserName() { return UserName; } public void setUserName(String userName) { UserName = userName; } public String getPassword() { return Password; } public void setPassword(String password) { Password = password; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Users() { } public Users(Integer userId, String userName, String password, String sex, String email) { UserId = userId; UserName = userName; Password = password; this.sex = sex; this.email = email; } }
3.将之前写的JDBC工具类【复用】
package Util; import java.sql.*; public class JDBCUtil { private Connection con = null; private PreparedStatement ps = null; //注册Driver,在第一次调用工具类时就加载 static { Driver driver = null; try { //注意这个地方,之前写没问题,但这里这样写就报了一个乱码错误 driver = new com.mysql.cj.jdbc.Driver(); DriverManager.registerDriver(driver); //改为下面的方式才恢复 Class.forName("com.mysql.cj.jdbc.Driver"); } catch (SQLException throwables) { throwables.printStackTrace(); } } //创建connection public Connection createCon() { String url = "jdbc:mysql://localhost:3306/mysql"; String user = "root"; String password = "333"; try { con = DriverManager.getConnection(url, user, password); } catch (SQLException throwables) { throwables.printStackTrace(); } return con; } //2.获取连接 //封装PreparedStatement对象 public PreparedStatement createPs(String sql) { try { Connection con = createCon(); ps = con.prepareStatement(sql); } catch (SQLException throwables) { throwables.printStackTrace(); } return ps; } public void close() { if (ps != null) { try { ps.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } public void close(Connection con) { close(); if (con != null) { try { con.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } public void close(ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } close(); } }
4.在web下WEB-INF下创建lib文件存放mysql的jar包,并设置为library
配置好后,我们捋一捋整个通信过程
最开始是写一个前端页面,从前端中给出请求,通过Http请求包将用户信息【get/post等方法】发送到Tomcat服务器中
Tomcat服务器收到请求包时会自动生成 请求对象【request】和响应对象【response】
这两个对象交给Tomcat下的Servlet对象,
建立Servlet对象
<?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>UserAddServlet</servlet-name>
<servlet-class>Controller.UserAddServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserAddServlet</servlet-name>
<url-pattern>/UserAdd</url-pattern>
</servlet-mapping>
</web-app>
package Controller; import Entity.Users; import dao.UserDao; import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; import java.io.PrintWriter; public class UserAddServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userName, password, sex, email; UserDao dao = new UserDao(); Users user = null; int result = 0; PrintWriter out = null; userName = request.getParameter("userName"); password = request.getParameter("password"); sex = request.getParameter("sex"); email = request.getParameter("email"); user = new Users(null, userName, password, sex, email); result = dao.add(user); //既有文字信息又有HTML页面代码,所以做好解释工作 response.setContentType("text/html;charset=utf-8"); out = response.getWriter(); if (result == 1) { out.print("<font style='color:red;font-size:40'>用户信息注册成功</font>"); } else { out.print("<font style='color:red;font-size:40'>用户信息注册失败</font>"); } } }
写一个DAO对象处理连接数据库的问题
package dao; import Entity.Users; import Util.JDBCUtil; import java.sql.PreparedStatement; import java.sql.SQLException; public class UserDao {`在这里插入代码片` private JDBCUtil jdbcUtil = new JDBCUtil(); //用户注册 public int add(Users user) { String sql = "insert into myusers(UserName,Password,sex,email)" + "values(?,?,?,?)"; PreparedStatement ps = jdbcUtil.createPs(sql); int result = 0; try { ps.setString(1, user.getUserName()); ps.setString(2, user.getPassword()); ps.setString(3, user.getSex()); ps.setString(4, user.getEmail()); result = ps.executeUpdate(); } catch (SQLException throwables) { throwables.printStackTrace(); } finally { jdbcUtil.close(); } return result; } }
准备一下前端页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/TestSystem/UserAdd" method="get"> <table border="2"> <tr> <td>用户姓名</td> <td><input type="text" name="userName"/></td> </tr> <tr> <td>用户密码</td> <td><input type="password" name="password"/></td> </tr> <tr> <td>用户性别</td> <td><input type="radio" name="sex" value="男"/>男 <input type="radio" name="sex" value="女"/>女 </td> </tr> <tr> <td>用户邮箱</td> <td><input type="text" name="email"/> </td> </tr> <tr> <td><input type="submit" value="用户注册"/> <td><input type="reset"/> </td> </tr> </table> </form> </body> </html>
测试一下
用户注册
梳理一下通信过程
在UserDAO里面添加find功能
查询得到的数据打包到一个list
public List findAll() { String sql = "select * from myusers"; PreparedStatement ps = jdbcUtil.createPs(sql); ResultSet rs = null; List<Users> userlist = new ArrayList(); try { rs = ps.executeQuery(); while (rs.next()) { Integer userId = rs.getInt("userId"); String userName = rs.getString("userName"); String password = rs.getString("password"); String sex = rs.getString("sex"); String email = rs.getString("email"); //直接放到user类里面 Users user = new Users(userId, userName, password, sex, email); userlist.add(user); } } catch (SQLException throwables) { throwables.printStackTrace(); } finally { jdbcUtil.close(rs); } return userlist; }
FindServlet里面对拿到的数据做解析
package Controller; import Entity.Users; import dao.UserDao; 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; import java.util.List; public class UserFindServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { UserDao userDao = new UserDao(); //调用DAO将查询命令推送到数据库服务器上,得到所有用户信息【list】 List<Users> userList = userDao.findAll(); //调用响应对象,将用户信息推回响应体中 resp.setContentType("text/html;charset=utf-8"); PrintWriter out = resp.getWriter(); out.print("<table border='2' align='center'>"); out.print("<tr>"); out.print("<td>用户编号</td>"); out.print("<td>用户姓名</td>"); out.print("<td>用户密码</td>"); out.print("<td>用户性别</td>"); out.print("<td>用户邮箱</td>"); out.print("</tr>"); for (Users user : userList ) { out.print("<tr>"); out.print("<td>" + user.getUserId() + "</td>"); out.print("<td>" + user.getUserName() + "</td>"); out.print("<td>******</td>"); out.print("<td>" + user.getSex() + "</td>"); out.print("<td>" + user.getEmail() + "</td>"); out.print("</tr>"); } } }
这里主要注意输出格式的问题,也就是前端功底
得到输出结果,这里和上面的乱码问题都没有解决,后续再查查如何解决
(2021-09-05注:应该是新建Project的时候选择了Gradle,选择Maven就不会报错)
用户信息查询
左侧
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> <li>用户信息管理 <ol> <li><a href="/TestSystem/user_Add.html" target="right">用户信息注册</a></li> <li><a href="/TestSystem/UserFind" target="right">用户信息查询</a></li> </ol> </li> <li>试题信息管理</li> <li>考试管理</li> </ul> </body> </html>
顶部
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body style="background-color: black">
<center>
<font style="color:white;font-size:45px">锦到黑在线考试管理系统</font>
</center>
</body>
</html>
导航页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <frameset rows="15%,85%"> <frame name="top" src="/TestSystem/MyTop.html"/> <frameset cols="15%,85%"> <frame name="left" src="/TestSystem/MyLeft.html"/> <frame name="right"> </frameset> </frameset> </html>
写一个Servlet类
package Controller; import dao.UserDao; 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 UserDeleteServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String userId; userId = req.getParameter("UserId"); int result = 0; //调用请求对象,读取请求头的参数(用户编号) UserDao userDao = new UserDao(); //调用DAO将用户编号填充到delete命令,发送到数据库中 result = userDao.delete(userId); //调用响应对象,将处理结果写入响应体,推送给浏览器 resp.setContentType("text/html"); resp.setCharacterEncoding("UTF-8"); PrintWriter out = resp.getWriter(); if (result == 1) { out.print("<font style='color:red;font-size:40'>用户信息删除成功</font>"); } else { out.print("<font style='color:red;font-size:40'>用户信息删除失败</font>"); } } }
对应配置一下web.xml
并在DAO类中添加方法
public int delete(String UserId) {
String sql = "delete from myusers where UserId=?";
PreparedStatement ps = jdbcUtil.createPs(sql);
int result = 0;
try {
ps.setInt(1, Integer.valueOf(UserId));
result = ps.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
jdbcUtil.close();
}
return result;
}
选择在Add的界面中添加删除选项
for (Users user : userList
) {
out.print("<tr>");
out.print("<td>" + user.getUserId() + "</td>");
out.print("<td>" + user.getUserName() + "</td>");
out.print("<td>******</td>");
out.print("<td>" + user.getSex() + "</td>");
out.print("<td>" + user.getEmail() + "</td>");
out.print("<td><a href='/TestSystem/UserDel?UserId=" + user.getUserId() + "'>删除用户</a></td>");
out.print("</tr>");
}
用户信息删除
写一个loginServlet
package Controller; import dao.UserDao; 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 UserLoginServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String userName; String password; int result = 0; req.setCharacterEncoding("utf-8"); userName = req.getParameter("userName"); password = req.getParameter("password"); UserDao userDao = new UserDao(); result = userDao.login(userName, password); resp.setContentType("text/html"); resp.setCharacterEncoding("UTF-8"); if (result == 1) { //验证成功,跳转主界面 resp.sendRedirect("/TestSystem/Navicat.html"); } else { //验证失败,跳转错误信息提示界面 resp.sendRedirect("/TestSystem/user_loginError.html"); } } }
再把Servlet类写进web.xml
<servlet>
<servlet-name>UserLoginServlet</servlet-name>
<servlet-class>Controller.UserLoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserLoginServlet</servlet-name>
<url-pattern>/UserLogin</url-pattern>
</servlet-mapping>
补充DAO类
public int login(String UserName, String Password) { int result = 0; String sql = "select count(*) from myusers where UserName=? and Password=?"; PreparedStatement ps = jdbcUtil.createPs(sql); ResultSet rs = null; try { ps.setString(1, UserName); ps.setString(2, Password); rs = ps.executeQuery(); while (rs.next()) { result = rs.getInt("count(*)"); } } catch (SQLException throwables) { throwables.printStackTrace(); } finally { jdbcUtil.close(); } return result; }
写一个前端登录界面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <center> <form action="/TestSystem/UserLogin" method="post"> <table border="2"> <tr> <td>用户姓名</td> <td><input type="text" name="userName"/></td> </tr> <tr> <td>用户密码</td> <td><input type="password" name="password"/></td> </tr> <tr> <td><input type="submit" value="用户登录"/></td> <td><input type="reset"/> </td> </tr> </table> </form> </center> </body> </html>
再写一个报错的界面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <center> <font style="color:red;font-size: 30px">登录信息不存在,请重新登录</font> <form action="/TestSystem/UserLogin" method="post"> <table border="2"> <tr> <td>用户姓名</td> <td><input type="text" name="userName"/></td> </tr> <tr> <td>用户密码</td> <td><input type="password" name="password"/></td> </tr> <tr> <td><input type="submit" value="用户登录"/></td> <td><input type="reset"/> </td> </tr> </table> </form> </center> </body> </html>
输入数据库中的账号和密码,可以进入操作界面
输入错误密码
输入正确账号
用户发送了一个针对某个网站的【默认请求】时,
此时由Http服务器自动从当前网站返回的资源文件
正常请求:http:/ /localhost:8080/TestSystem/index.html
默认请求: http:/ /localhost:8080/TestSystem/
3. Tomcat对于默认欢迎资源文件定位规则
1)规则位置:Tomcat安装位置/conf/web.xml
2)规则命令:
从上往下查找,有的话就跳转,没有就往下走,往下走的文件还没有,就返回404
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
4.设置当前网站的默认欢迎资源文件规则
1)规则位置:在/web/WEB-INF/web.xml下面书写规则命令
2)规则命令:
<welcome-file-list>
<welcome-file>user_login.html</welcome-file>
</welcome-file-list>
此时弹出的就直接是登录界面了
当然也可以直接跳转Servlet动态资源
此时记得要去掉开头的斜杠
<welcome-file-list>
<welcome-file>TestSystem/UserLogin</welcome-file>
</welcome-file-list>
结束时间:2021-07-03
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。