今日内容
1.准备一个Maven项目
准备一个maven项目
需要在书写项目是将依赖书写好
连接数据库的jar包
连接池druid(德鲁伊)的jar包
jdbc简易封装工具dbutils的jar包
测试junit的jar包--以及依赖包
web后端接口servlet的jar包
书写jsp页面提示jsp的jar包
jstl-jsp核心标签库的jar包--以及依赖包standard的jar包
代码分层-mvc架构
pojo-实体类
dao-数据访问接口 daoImpl-实现数据访问接口
utils-工具类
test-测试类
service-提供业务接口 serviceImpl-实现业务功能
controller-提供和前端交互的servlet
resource
书写配置文件-druid连接数据库需要
2. 管理员登陆分析
管理员登陆分析
先获取前端页面输入的管理员用户名信息
传递到后端--后端的映射地址!
后端拿着数据进行判断--是否有这个用户名存在
如果存在,返回实体并判断该实体密码和前端密码是否相同
如果相同,则返回前端该实体
如果不相同,则提示前端登陆失败
2.1 Controller-Servlet
package com.szr.controller;
import com.szr.pojo.User;
import com.szr.service.Impl.UserServiceImpl;
import com.szr.service.UserService;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/UserLoginServlet")
public class UserLoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决请求中文乱码
request.setCharacterEncoding("utf-8");
//当浏览器传数据时,创建HttpSession会话
HttpSession session = request.getSession();
//获取数据用户输入的用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
//封装进实体类
User user = new User();
user.setUsername(username);
user.setPassword(password);
//调用业务层功能判断用户是否存在,密码是否正确
UserService userService = new UserServiceImpl();
User user1 = userService.getUser(user.getUsername(), user.getPassword());
//判断
if (user1!=null){
//不为空证明拿到数据且密码正确
//将拿到的实体类user1存入session域中
session.setAttribute("user",user1);
//重定向到用户主页
response.sendRedirect(request.getContextPath()+"/User/user_index.jsp");
}else {
//为空,证明没拿到数据或者密码错误
//返回给前端一句提示
request.setAttribute("msg","用户名或者密码错误!");
//请求转发
request.getRequestDispatcher("/User/user_login.jsp").forward(request,response);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//复用doGet()方法
doGet(request,response);
}
}
2.2 dao-Impl
/**
* 用户登录查找用户名是否存在
* @param username 用户输入的用户名
* @return 找到的用户实体
*/
@Override
public User userLogin(String username) throws SQLException {
//完成查找方法
QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
//准备sql语句
String sql = "select * from user where username = ? " ;
//执行
User user = queryRunner.query(sql, new BeanHandler<User>(User.class), username);
//判断
if (user!=null){
return user ;
}
return null;
}
2.3 pojo-实体类
package com.szr.pojo;
//用户实体类
public class User {
private int id ;
private String username ;
private String password ;
private String email ;
public User() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
'}';
}
}
2.4 service-Impl
/**
* 根据用户名查找用户,在判断密码是否一致
* @param username 用户输入的用户名
* @param password 用户输入的密码
* @return 如果查找到并且密码也相同,则返回该用户实体
*/
@Override
public User getUser(String username, String password) {
try {
//完成查找并判断密码是否一致
//调用数据访问层方法
UserDao userDao = new UserDaoImpl();
User user = userDao.userLogin(username);
//判断
if (user!=null){
//不为空证明用户名查到,开始比较密码是否一致
if (password.equals(user.getPassword())){
//如果密码也一样,则返回该用户实体
return user;
}
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
//否则返回空
return null;
}
3. 管理员退出分析
管理员退出分析--只是Controller的不同
管理员退出,点击退出时删除此次会话中的所有内容--解绑
需要重新登陆,前端页面变化!
3.1 Controller-Servlet
package com.szr.controller;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/UserLogoutServlet")
public class UserLogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//用户退出时获取HttpSession域对象
HttpSession session = request.getSession();
//判断,当前session是否有内容
if (session!=null){
//不为空,有内容,退出清空所有绑定
session.invalidate();
//重定向到主页
response.sendRedirect(request.getContextPath()+"/User/user_index.jsp");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
4. 管理员查询分析
管理员查询分析--分页查询!
管理员查询数据时,前端需要提供两个数据
--就是分页查询需要的两个数据
-当前页面页码-如果为空,赋初始值
-每页显示条数-如果为空,赋初始值
拿到参数后
-通过查询数据库得出总条数
-通过计算得出总共有多少页
-总条数/每页条数
-判断
如果总条数/每页条数可以整除-代表是偶数条数,直接返回即可
如果总条数/每页条数不能整除-代表是奇数条数,返回时需要加一来避免出现缺页情况
-通过分页查询获得所有结果的集合
全部返回给前端
完成查询
4.1 Controller-Servlet
package com.szr.controller;
import com.szr.pojo.PageBean;
import com.szr.pojo.Product;
import com.szr.service.Impl.UserServiceImpl;
import com.szr.service.UserService;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/UserFindProductByPageServlet")
public class UserFindProductByPageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决中文乱码
request.setCharacterEncoding("utf-8");
//获取前端数据
String nowPag = request.getParameter("nowPage");
//判断传过来的值是否为空,若为空则赋默认初始值
if (nowPag==null || "".equals(nowPag)){
//只要满足条件之一,为空或者空字符串,赋初始值
nowPag = "1";//默认查询第一页
}
String numPag = request.getParameter("numPage");
if (numPag==null || "".equals(numPag)){
//条件相同
numPag = "2";//默认每页查询两条数据
}
//将String类型转换为int类型
int nowPage = Integer.parseInt(nowPag);
int numPage = Integer.parseInt(numPag);
//调用业务层方法
UserService userService = new UserServiceImpl();
PageBean<Product> pagebean = userService.getProductByPage(nowPage, numPage);
//判断
if (pagebean!=null){
//存入request域中
request.setAttribute("pagebean",pagebean);
//请求转发
request.getRequestDispatcher("/Product/product_list.jsp").forward(request,response);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
5. 管理员修改分析
管理员修改分析--只有sql语句的区别
修改数据时首先要查询到这个修改的数据--数据回显
第一步
点击修改
查询到要修改的数据
-通过数据id编号查询
第二步
点击确认
修改数据
-点击修改后将新数据写入数据库