目录
用户信息列表展示案例
1. 需求:
1. 简单功能
1. 列表查询 2. 登录 3. 添加 4. 删除 5. 修改
2. 复杂功能
1. 删除选中 2. 分页查询 * 好处: 1. 减轻服务器内存的开销 2. 提升用户体验 3. 复杂条件查询
2. 设计:
1. 技术选型:
3. 开发:
1. 环境搭建
1. 创建数据库环境 2. 创建项目,导入需要的jar包
细节:
1.添加jar包要注意版本是否适配
2.配置文件要根据实际情况进行修改编辑
3.注意查询语句是否正确
4、据要写在forEach内编辑
2. 编码
4. 测试
进阶:
关于登录界面login.jsp
添加联系人功能
删除功能
修改功能
复杂功能
删除选中
分页查询
编辑
复杂功能
复杂条件查询功能
动态查询小技巧:
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的中文档首页“组件”复制分页即可。
验证码执行一个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方法也优化了
@Overridepublic 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.调用serviceUserService service = new UserServiceImpl();service.deleteUser(id);//3.调转到重新查询的servletresponse.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.跳转查询所有servleresponse.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" %>
加入判断:
在
代码编写好 测试一下
报了一个500的错
原来是没重启的锅,重启后恢复正常
但是新的问题出现了,无法修改内容,除去一部分原因是我在数据库写入数据,里面的地址不在