一一、对数据库的更新:
一、流程:
在展示页面中的更新id传到后端获取这条id所对应的数据并将数据回显到前端所展示的页面上的表单上,然后用户对其修改,修改后将前端的页面的数据传到后端完成对数据的更新,再将更新后的数据传递给数据库。
先根据id查询数据库中的这条信息,查到后回显到对应的页面的表单的内容上,再让用户对其修改,再将修改的内容传递到后端后提交给数据库端。
二、注解接口代码:
@Update("update student set name=#{name},sex=#{sex},age=#{age},major=#{major},time=#
{time}where id=#{id}")
int updateStudent(Student student);
@Select("select * from student where id=#{id}")
Student selectById(String id);
三、前端展示页面的代码:
import Model.Student;
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;
import java.io.PrintWriter;
import java.util.List;
@WebServlet("/showlist")
public class showlist extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Student> all = (List<Student>)req.getAttribute("all");
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter stu = resp.getWriter();
stu.write("<!Doctype html>");
stu.write("<html lang='en'>");
stu.write("<head>");
stu.write("<meta charset='utf-8'>");
stu.write("<meta name='viewport',content='width=device-width,initial-scale=1.0'>");
stu.write("<title>学生信息管理</title>");
stu.write("<style>");
stu.write("body { font-family: '微软雅黑'; background-color: #e0f7fa; margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; margin-top: 150px; }");
stu.write(".container { background-color: #ffffff; padding: 30px; border-radius: 12px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); width: 90%; max-width: 800px; text-align: center; }");
stu.write("h1 { color: #00796b; margin-bottom: 20px; }");
stu.write(".btn { display: block; width: 100%; padding: 12px; margin: 10px 0; font-size: 18px; color: #ffffff; background-color: #00796b; border: none; border-radius: 6px; cursor: pointer; }");
stu.write(".btn:hover { background-color: #004d40; }");
stu.write("table { width: 100%; border-collapse: collapse; margin-top: 20px; }");
stu.write("th, td { border: 1px solid #ddd; padding: 12px; text-align: left; }");
stu.write("th { background-color: #e0f7fa; color: black; }");
stu.write("tr:nth-child(even) { background-color: lightyellow; }");
stu.write("tr:hover { background-color: #e0f7fa; }");
stu.write("</style>");
stu.write("</head>");
stu.write("<body>");
stu.write("<div class='container'>");
stu.write("<h1>学生信息管理</h1>");
stu.write("<div><a href='insert'>添加信息</a></div>");
// 显示学生信息表格
stu.write("<table>");
stu.write("<tr><th>id</th><th>姓名</th><th>性别</th><th>年龄</th><th>专业</th><th>时间</th><th>操作一</th><th>操作二</th></tr>");
for (int i = 0; i < all.size(); i++) {
stu.write("<tr>");
stu.write("<td>"+all.get(i).getId()+"</td>");
stu.write("<td>");
stu.write(all.get(i).getName());
stu.write("</td>");
stu.write("<td>");
stu.write(all.get(i).getSex());
stu.write("</td>");
stu.write("<td>"+all.get(i).getAge()+"</td>");
stu.write("<td>");
stu.write(all.get(i).getMajor());
stu.write("</td>");
stu.write("<td>");
stu.write(all.get(i).getTime());
stu.write("</td>");
stu.write("<td>");
stu.write("<a onclick=\"if(confirm('确定删除吗?')) return true; return false;\" href=delone?id="+all.get(i).getId()+">删除</a>");
stu.write("</td>");
stu.write("<td>");
stu.write("<a href=updateUi?id="+all.get(i).getId()+">更新</a>");//更新的代码
stu.write("</td>");
stu.write("</tr>");
}
stu.write("</table>");
stu.write("</div>");
stu.write("</body>");
stu.write("</html>");
}
}
四、UI层更新后端动态页面代码:
import Dao.StudentDao;
import Model.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
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;
import java.io.InputStream;
import java.io.PrintWriter;
@WebServlet("/updateUi")
public class UpdateUI extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
String id = req.getParameter("id");
System.out.println("id = " + id);
InputStream in = null;
SqlSession sqlSession = null;
try {
in = Resources.getResourceAsStream("config/mybatis_config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
sqlSession = sqlSessionFactory.openSession();
StudentDao mapper = sqlSession.getMapper(StudentDao.class);
Student student = mapper.selectById(id);
String sname = student.getName();
String ssex = student.getSex();
Integer sage = (Integer.valueOf(student.getAge()));
String smajor = student.getMajor();
String stime = student.getTime();
writer.write("<!DOCTYPE html>");
writer.write("<html>");
writer.write("<head>");
writer.write("<meta charset='UTF-8'>");
writer.write("<meta name='viewport' content='width=device-width, initial-scale=1.0'>");
writer.write("<title>修改学生信息</title>");
writer.write("<style>");
writer.write("body { font-family:'微软雅黑'; background-color:#e0f7fa; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; }");
writer.write(".container { background-color: #fff; padding: 20px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); width: 35%; text-align: center;height:76%; }");
writer.write("h1 { color: #00796b;margin-bottom: 50px; }");
writer.write("label { display: block; margin-bottom: 5px; font-weight: bold; }");
writer.write("input[type='text'] { padding: 14px; font-size: large; border: 1px solid #ccc; border-radius: 5px;margin-bottom: 20px;}");
writer.write(".btn { display: inline-block; width: 100px; padding: 10px; margin-top: 40px; margin-left: 30px; font-size: 16px; color: #fff; background-color: #4CAF50; border: none; border-radius: 5px; cursor: pointer; text-decoration: none; }");
writer.write(".btn:hover { background-color: #45a049; }");
writer.write(".btn-reset { background-color: #f44336; }");
writer.write(".btn-reset:hover { background-color: #e53935; }");
writer.write("span { width: 100px; text-align:center; margin-right: 10px;font-size: large; }");
writer.write("</style>");
writer.write("</head>");
writer.write("<body>");
writer.write("<div class='container'>");
writer.write("<h1>修改学生信息</h1>");
writer.write("<form action='updateok' method='post'>");
writer.write("<span>学号:</span><input type='text' name='id' value='" + id + "' readonly><br>");
writer.write("<span>姓名:</span><input type='text' name='sname' value='" + sname + "'><br>");
writer.write("<span>性别:</span><input type='text' name='ssex' value='" + ssex + "'><br>");
writer.write("<span>年龄:</span><input type='text' name='sage' value='" + sage + "'><br>");
writer.write("<span>专业:</span><input type='text' name='smajor' value='" + smajor + "'><br>");
writer.write("<span>时间:</span><input type='text' name='stime' value='" + stime + "'><br>");
writer.write("<button type='submit' class='btn'>提交</button>");
writer.write("<button type='reset' class='btn btn-reset'>重置</button>");
writer.write("</form>");
writer.write("</div>");
writer.write("</body>");
writer.write("</html>");
} finally {
if (sqlSession != null) {
sqlSession.close();
}
if (in != null) {
in.close();
}
}
}
}
五、ServIet层更新后端动态页面代码:
import Dao.StudentDao;
import Model.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
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;
import java.io.InputStream;
import java.util.List;
@WebServlet("/updateok")
public class UpdateOk extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String id = req.getParameter("id") ;
String sname = req.getParameter("sname");
String ssex = req.getParameter("ssex");
String sage = req.getParameter("sage");
String smajor = req.getParameter("smajor");
String stime = req.getParameter("stime");
Student student = new Student();
student.setName(sname);
student.setSex(ssex);
student.setAge(Integer.valueOf(sage));
student.setMajor(smajor);
student.setTime(stime);
student.setId(Integer.valueOf(id));
//根据学号获取学生信息
InputStream in = Resources.getResourceAsStream("config/mybatis_config.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(in);//构建工厂
SqlSession sqlSession = build.openSession();//参数为true时,自动提交事务
StudentDao mapper = sqlSession.getMapper(StudentDao.class);//获取接口的实现类
int i = mapper.updateStudent(student);
System.out.println("i = " + i);
sqlSession.commit();
Commit(req, resp, sqlSession, mapper, i);
}
static void Commit(HttpServletRequest req, HttpServletResponse resp, SqlSession sqlSession, StudentDao mapper, int i) throws ServletException, IOException {
sqlSession.commit();
List<Student> all = mapper.findAll();
req.setAttribute("all",all);
req.getRequestDispatcher("/showlist").forward(req,resp);
}
}
六、所需javaBean和数据库可以自由选择,其他所需文件都可以接上篇内容,其中有详解代码和内容
二二、登录页面验证码的添加:
一.了解Session:
1.什么是 Session 对话:
Session 是一个 Java 中的接口(HttpSession)。Session 就是会话,用来维护一个客户端和服务器之间关联的一种技术。每个客户端都有一个自己的 Session 会话。Session 会话中,我们经常用来保存用户登录后的信息,前面的 Cookie 是保存在客户端,而 Session 是保存在服务器端。
2、Session 的创建和获取
(1)创建和获取 Session,都是通过 request.getSession() 来实现的。
第一次调用:创建 Session 对象;之后的调用:获取之前创建好的 Session 会话对象。
(2)可以用 isNew() 方法来判断一个 Session 是不是刚创建出来的。
true:表示刚创建; false:表示获取之前创建
(3)每个会话都有一个身份证号,也就是 ID 值,且这个 ID 唯一。getId() 方法获取 Session 对象的 ID 值
3.在目录添加jar包,详细内容如下:
4.测试片段:
代码片段一:
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/arequest")
public class Session1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.开启会话,创建一个会话对象
HttpSession session = req.getSession();
//2.会话管理中设置数据,键值对
session.setAttribute("ok","学习java");
session.setAttribute("ok1","学习php");
//3.获取当前值
System.out.println("session.getAttribute(\"ok\") = " + session.getAttribute("ok"));
System.out.println("session.getAttribute(\"ok1\") = " + session.getAttribute("ok1"));
}
}
当搭建好一个基本的Maven环境和web项目之后,装入Tomcat,并且确保可以正常运行时,在Java中创建一个Java类文件,对上述代码进行测试在其对应的服务器网址输入所对应的@WebServlet("/arequest")中的斜杠后内容,再查看后台是否收到此请求内容
测试代码二和测试代码三可以发现,在发出请求后,控制台并没有收到相应的内容,在先发出测试代码一所对应的内容时,在发出其他两个请求就可以收到相应的内容
代码片段二:
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/arequest1")
public class Session2 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//开启会话,向下转型
HttpServletRequest servletRequest1 = (HttpServletRequest) servletRequest;
HttpSession session = servletRequest1.getSession();
Object ok = (String)session.getAttribute("ok");
Object ok1 = (String)session.getAttribute("ok1");
System.out.println("ok = " + ok);
System.out.println("ok1 = " + ok1);
}
}
代码片段三:
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/arequest2")
public class Session3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
Object ok = (String)session.getAttribute("ok");
Object ok1 = (String)session.getAttribute("ok1");
System.out.println("ok = " + ok);
System.out.println("ok1 = " + ok1);
}
}
二、了解Cookie:
1.什么是 cookie
Cookie 是服务器端通知客户端保存键值对的一种技术。
Cookie 是 servlet (服务器)发送到 Web 浏览器(客户端)的少量信息,这些信息由浏览器保存,然后发送回服务器。
客户端有了 Cookie 后,每次请求都会发送 Cookie 给服务器。
每个 Cookie 的大小不能超过 4KB
2.测试代码一:
可以发现先请求测试代码一所对应的内容,再请求二就会出现自己所定义的名称和值,当直接请求测试代码二时,则会收到一些地址值
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/aaaa")
public class Cooke1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//创建一个名字为"username"的Cookie
Cookie cookie = new Cookie("username", "john_doe");
//设置它的过期时间
cookie.setMaxAge(10);
//发送客户端
resp.addCookie(cookie);
}
}
3测试代码二:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
@WebServlet("/aa")
public class Cooke extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie[] cookies = req.getCookies();
if (cookies !=null){
for (Cookie cookie :cookies){
String name = cookie.getName();
System.out.println("name = " + name);
String value = cookie.getValue();
System.out.println("value = " + value);
}
}
}
}
三、给登录页面添加验证码:
登录页面详解于上篇:
jsp登录页面验证码所对应的代码内容:
css代码:
建议对java文件进行分包可以更好的整理代码和代码结构更清晰,建立验证码对应的Java类:
Java类详细代码内容是:
其中@WebServlet("/code")中斜杠后的内容应该与登录页面src所对应的值相等
import cn.dsna.util.images.ValidateCode;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/code")
public class code extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ValidateCode validateCode = new ValidateCode(500, 200, 4, 100);//宽度,高度,个数,图中横线数
String code = validateCode.getCode();
HttpSession session = req.getSession();
session.setAttribute("yz",code);
validateCode.write(resp.getOutputStream());
}
}
登录页面的详细代码:
import Dao.StudentDao;
import Model.Student;
import Model.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@WebServlet("/loginok")
public class UserRequst extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String user = req.getParameter("user");
String pwd = req.getParameter("pwd");
String code = req.getParameter("yz");
System.out.println("code = " + code);
HttpSession session = req.getSession();
String yz =(String) session.getAttribute("yz");
System.out.println("yz = " + yz);
if (!yz.equals(code)){
req.getRequestDispatcher("usererror").forward(req,resp);
// return;
}
InputStream in = Resources.getResourceAsStream("config/mybatis_config.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession = build.openSession();
StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
User login = studentDao.login(user, pwd);
if (login==null){
req.getRequestDispatcher("usererror").forward(req,resp);
}else {
InputStream on = Resources.getResourceAsStream("config/mybatis_config.xml");
SqlSessionFactory build1 = new SqlSessionFactoryBuilder().build(on);
SqlSession sqlSession1 = build1.openSession();
StudentDao studentDao1 = sqlSession.getMapper(StudentDao.class);
List<Student> all = studentDao.findAll();
req.setAttribute("all",all);
req.getRequestDispatcher("/showlist").forward(req,resp);
}
}
}
此图中的req.getParameter中的内容和登录jsp文件的name内容相同