目录
1. 列表查询 2. 登录 3. 添加 4. 删除 5. 修改
1. 删除选中 2. 分页查询 * 好处: 1. 减轻服务器内存的开销 2. 提升用户体验 3. 复杂条件查询
Servlet+JSP+MySQL+JDBCTempleat+Duird+BeanUtils+tomcat
控制器 + 页面展示+ 操作数据库+ 自动封装 + 连接池提高连接效率+ 封装数据 + 部署到服务器上
2. 数据库设计:
create database test01; -- 创建数据库
use test01; -- 使用数据库
CREATE TABLE user2( -- 创建表
id int PRIMARY KEY auto_increment,
name VARCHAR(20) not null,
gender VARCHAR(5),
age INT,
address VARCHAR(32),
qq VARCHAR(20),
email VARCHAR(50)
);
在/test02/userListServlet下可以输出,但是list.jsp下没有打印出来
试着打印UserListServlet,
response.getWriter();
输出无法识别中文,句首加入
//简单的形式,设置编码,是在获取流之前设置 response.setContentType("text/html;charset=utf-8"); 即可。
最后终于得出错误原因,不是代码错误也不是配置错愕,是进入的网址错误,得从index.jsp进入首页
成了!
接着添加增删改操作
先在UserService接口添加对应接口
添加数据,报错
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [insert into user2 set name=?,gender=?,age=?,adress=?,qq=?,email=?]; nested exception is java.sql.SQLSyntaxErrorException: Unknown column 'adress' in 'field list'
查了半天是拼写错误
一个好消息,一个坏消息
好消息:写进去了
坏消息:但没完全写进去
出现中文乱码且丢失
//设置request编码 request.setCharacterEncoding("utf-8");
会发现性别和籍贯因为是有默认选择的复选框,不是手动输入的数据,所以未被存储进去,需要在UserAddServlet里添加存储进去,这样选择框里的对象也能获取到
UserAddServlet代码:
- package cn.web.servlet;
-
- import cn.domain.User;
- import cn.service.UserService;
- import cn.service.impl.UserServiceImpl;
-
- 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;
-
- /**
- * @author 乱码酱
- * @date :2022-11-29 15:44
- * @program: HTMLStudy
- * @create:
- */
- @WebServlet("/userAddServlet")
- public class UserAddServlet extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //设置request编码
- request.setCharacterEncoding("utf-8");
-
- //调用UserService完成添加
- UserService service = new UserServiceImpl();
- //获取参数
- String name = request.getParameter("name");
- String gender = request.getParameter("gender");
- int age = Integer.parseInt(request.getParameter("age"));
- String adress = request.getParameter("address");
- String qq = request.getParameter("qq");
- String email = request.getParameter("email");
-
- //添加到User里
- User user = new User();
- user.setName(name);
- user.setGender(gender);
- user.setAge(age);
- user.setAddress(adress);
- user.setQq(qq);
- user.setEmail(email);
- // 调用UserService层
- User user1 = service.addUser(user);
-
- // 将list存入request域
- request.setAttribute("user1",user);
-
-
- //转发到
- request.getRequestDispatcher("/index.jsp").forward(request,response);
- 3.调转到重新查询的servlet
- // response.sendRedirect(request.getContextPath()+"/userListServlet");
- }
-
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doPost(request, response);
- }
- }
将已有用户信息列表改进为后面一种格式
使用Bootstrap上的内联表单样式,但是出现了分层
解决方法:在div标签的style样式加一个float浮动即可
至于分页,在Bootstrap的中文档首页“组件”复制分页即可。
关于登录界面login.jsp
验证码执行一个refreshCode();方法
添加登录所需字段username和password
可以在数据库查询是否添加成功
SELECT * FROM user2;
添加好内容
数据库添加字段,对应实体类User也要跟着修改
先进入登录界面login.jsp,登录成功会提示
添加联系人功能
在list.jsp中添加联系人按钮路径跳转到add.jsp
add.jsp也要连接指定servlet
之前的addservlet没用util工具类,需要一个一个添加,
- @WebServlet("/addUserServlet")
- public class AddUserServlet extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //设置request编码
- request.setCharacterEncoding("utf-8");
-
- //调用UserService完成添加
- UserService service = new UserServiceImpl();
- //获取参数
- String name = request.getParameter("name");
- String gender = request.getParameter("gender");
- int age = Integer.parseInt(request.getParameter("age"));
- String adress = request.getParameter("address");
- String qq = request.getParameter("qq");
- String email = request.getParameter("email");
-
- //添加到User里
- User user = new User();
- user.setName(name);
- user.setGender(gender);
- user.setAge(age);
- user.setAddress(adress);
- user.setQq(qq);
- user.setEmail(email);
- // 调用UserService层
- User user1 = service.addUser(user);
-
- // 将list存入request域
- request.setAttribute("user1",user);
-
-
- //转发到
- request.getRequestDispatcher("/index.jsp").forward(request,response);
- 3.调转到重新查询的servlet
- // response.sendRedirect(request.getContextPath()+"/userListServlet");
- }
-
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doPost(request, response);
- }
- }
后来加入了工具类,效率提高
- //1.设置编码
- request.setCharacterEncoding("utf-8");
- //2.获取参数
- Map
map = request.getParameterMap(); - //3.封装对象
- User user = new User();
- try {
- BeanUtils.populate(user,map);
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- //4.调用service方法报错
- UserService service = new UserServiceImpl();
- service.addUser(user);
- //5.跳转到/userListServlet
- // 没有共享数据使用重定向 加上虚拟路径request.getContextPath()
- response.sendRedirect(request.getContextPath()+"/userListServlet");
UserDaoImpl中的addUser方法也优化了
- @Override
- public User addUser(User user) {
- try {
- //第一版
- //String sql = "insert into user2 set name = ?, gender = ?, age = ?, address = ?, qq= ?, email = ?";
- //第二版
- String sql ="insert into user2 values(null, ?, ?, ?, ?, ?, ?,null, null )";
- template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());
- } catch (DataAccessException e) {
- e.printStackTrace();
- }
- return user;
- }
添加用户成功!
删除功能
在list.jsp删除按钮添加路径
编辑DelUserService
原版本:
//1.设置request编码
request.setCharacterEncoding("utf-8");
int id = Integer.parseInt(request.getParameter("id"));
//2.调用service
UserService service = new UserServiceImpl();
service.deleteUser(id);
//3.调转到重新查询的servlet
response.sendRedirect(request.getContextPath()+"/userListServlet");
3.转发到
// request.getRequestDispatcher("/index.jsp").forward(request,response);
现版本:
// 因为是根据id删除,不涉及汉字,可以不用设置编码
// 1.获取id对象
String id = request.getParameter("id");
// 2.调用service删除
UserService service = new UserServiceImpl();
service.deleteUser(id);
//3.跳转查询所有servle
response.sendRedirect(request.getContextPath()+"/userListServlet");
测试:
轻易就删除了记录,但是不排除误删的可能性,想加入一个确认删除的提示框
在list.jsp删除按钮添加一个方法,点击会有确认框
放到上面去获取不到id,于是传参
测试一下:
修改功能
修改update.jsp指向路径并在标签添加value,编写对应service、dao层接口和实现类方法
测试时出现404错误
原因是重新建了一个findUserServlet,需要重新启动服务器,启动即可成功访问
之前的修改性别和地址不知道默认值,所以要判断选择框里的性别和籍贯,需要在update.jsp开头加上标签引入
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
加入判断:
在
有几个就做几次判断(默默删除几个选项减少工作量)
用户修改都是基于id,但是id是数据库生成的,在表单中没有体现,所以建一个隐藏域,将id创建在里面获取
<%--隐藏域提交id--%>
代码编写好 测试一下
报了一个500的错
原来是没重启的锅,重启后恢复正常
但是新的问题出现了,无法修改内容,除去一部分原因是我在数据库写入数据,里面的地址不在
于是试了其他的也没能成功修改,查找原因发现是sql语句缺了逗号,离谱!
成了!
复杂功能
删除选中
获取选中条目id的方法:
在
外加一个