11 Smbms

项目搭建准备工作

1、搭建一个maven web项目

2、配置tomcat

3、导入项目中会使用到的jar包

  • jsp,servlet,mysql驱动

4、编写实体类

5、创建项目包结构

在这里插入图片描述

6、编写实体类

​ ORM映射:表-类 映射

7、编写基础公共类

  • 数据库配置文件

    drive=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8&useSSL=false
    user=root
    password=123456
    
  • 编写数据库的公共类

    package com.qin.dao;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.*;
    import java.util.Properties;
    
    //操作数据库的公共类
    public class BaseDao {
        private static String drive=null;
        private static String url = null;
        private static String user = null;
        private static String password = null;
        //静态代码块,类加载的时候就初始化了
        static {
            InputStream in = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties = new Properties();
            try {
                properties.load(in);
            } catch (IOException e) {
                e.printStackTrace();
            }
            drive = properties.getProperty("drive");
            url = properties.getProperty("url");
            user = properties.getProperty("user");
            password = properties.getProperty("password");
        }
        public static Connection getConnection() {
            try {
                Class.forName(drive);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            Connection connection = null;
            try {
                connection = DriverManager.getConnection(url, user, password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return connection;
        }
        //查询操作
        public static ResultSet executeQuery(Connection connection,PreparedStatement statement,ResultSet resultSet,String sql,Object[] param) throws SQLException {
            statement = connection.prepareStatement(sql);
            for (int i = 0; i < param.length; i++) {
                statement.setObject(i+1,param[i]);
            }
            resultSet = statement.executeQuery();
            return resultSet;
        }
        //增删改操作
        public static int execute(Connection connection,PreparedStatement statement,String sql,Object[] param) throws SQLException {
            int row;
            statement = connection.prepareStatement(sql);
            for (int i = 0; i < param.length; i++) {
                statement.setObject(i+1,param[i]);
            }
            row = statement.executeUpdate();
            return row;
        }
    
        public static void release(Connection connection, Statement statement, ResultSet resultSet) throws SQLException {
            if(resultSet!=null){
                resultSet.close();
            }
            if (statement!=null){
                statement.close();
            }
            if (connection!=null){
                connection.close();
            }
        }
        public static void release(Connection connection, Statement statement) throws SQLException {
            if (statement!=null){
                statement.close();
            }
            if (connection!=null){
                connection.close();
            }
        }
    }
    
  • 编写字符编码过滤器

    package com.qin.filter;
    
    import javax.servlet.*;
    import java.io.IOException;
    
    public class CharacterFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void destroy() {
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            servletRequest.setCharacterEncoding("utf-8");
            servletResponse.setCharacterEncoding("utf-8");
            servletResponse.setContentType("text/html;charset=utf-8");
            filterChain.doFilter(servletRequest,servletResponse);
        }
    }
    

8、导入静态资源

实现登录功能

在这里插入图片描述

1、设置首页

<welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
</welcome-file-list>

2、编写dao层得到用户登录的接口

package com.qin.dao.user;

import com.qin.pojo.User;
import java.sql.Connection;
import java.sql.SQLException;

public interface UserDao {
    public User getLoginUser(Connection connection,String userCode,String userPassword) throws SQLException;
}

3、编写dao接口的实现类

package com.qin.dao.user;

import com.qin.dao.BaseDao;
import com.qin.pojo.User;
import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDaoImpl implements UserDao {
    @Test
    public void test() throws SQLException {
        UserDao userDao = new UserDaoImpl();
        Connection connection= BaseDao.getConnection();
        userDao.getLoginUser(connection,"wen","123");
    }

    public User getLoginUser(Connection connection, String userCode, String userPassword)  {
        //创建需要的资源
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        User user = null;

        if (connection!=null){
            try {
                String sql = "select * from smbms_user where userCode=? and userPassword=?";
                Object[] param = {userCode,userPassword};
                statement = connection.prepareStatement(sql);
                statement.setObject(1,param[0]);
                statement.setObject(2,param[1]);
                resultSet = statement.executeQuery();
                while(resultSet.next()){
                    user = new User();
                    user.setId(resultSet.getInt(1));
                    user.setUserCode(resultSet.getString(2));
                    user.setUserName(resultSet.getString(3));
                    user.setUserPassword(resultSet.getString(4));
                    user.setGender(resultSet.getInt(5));
                    user.setBirthday(resultSet.getDate(6));
                    user.setPhone(resultSet.getString(7));
                    user.setAddress(resultSet.getString(8));
                    user.setUserRole(resultSet.getInt(9));
                    user.setCreatedBy(resultSet.getInt(10));
                    user.setCreationDate(resultSet.getDate(11));
                    user.setModifyBy(resultSet.getInt(12));
                    user.setModifyDate(resultSet.getDate(13));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            finally {
                try {
                    resultSet.close();
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return user;
    }
}

4、编写业务层接口

package com.qin.service.user;


import java.sql.SQLException;

public interface UserService {
    public boolean login(String userCode,String userPassword) throws SQLException;
}

5、业务层实现类

package com.qin.service.user;

import com.qin.dao.BaseDao;
import com.qin.dao.user.UserDao;
import com.qin.dao.user.UserDaoImpl;
import com.qin.pojo.User;

import java.sql.Connection;
import java.sql.SQLException;

public class UserServiceImpl implements UserService {
    //业务层会调用dao层,所以要引入Dao层:
    private UserDao userDao;

    public UserServiceImpl() {
        this.userDao = new UserDaoImpl();
    }

    public User login(String userCode, String userPassword) throws SQLException {
        Connection connection = BaseDao.getConnection();
        User user=userDao.getLoginUser(connection,userCode,userPassword);
        connection.close();
        return user;
    }
}

6、编写servlet

package com.qin.servlet.user;

import com.qin.pojo.User;
import com.qin.service.user.UserService;
import com.qin.service.user.UserServiceImpl;
import com.qin.utils.user.Constents;

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.sql.SQLException;


public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String userCode = req.getParameter("userCode");
        String userPassword = req.getParameter("userPassword");
        //loginservlet调用service层获得user对象
        UserService userService = new UserServiceImpl();
        User user = null;
        try {
             user = userService.login(userCode,userPassword);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        if (user!=null){
            //登陆成功
            req.setAttribute(Constents.USER_SESSION,user);
            resp.sendRedirect("jsp/frame.jsp");
        }
        else {
            //登陆失败
            req.setAttribute("error","用户名或者密码错误");
            req.getRequestDispatcher("login.jsp").forward(req,resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

7、注册servlet

<servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>com.qin.servlet.user.LoginServlet</servlet-class>
</servlet>
<!--servlet映射路径根据jsp页面填写-->
<servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login.do</url-pattern>
</servlet-mapping>

注销登录功能

1、编写注销请求的servlet

package com.qin.servlet.user;

import com.qin.utils.user.Constents;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class LogoutServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //移除session中的user信息
        req.getSession().removeAttribute(Constents.USER_SESSION);
        resp.sendRedirect("login.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

2、注册servlet

<servlet>
    <servlet-name>logout</servlet-name>
    <servlet-class>com.qin.servlet.user.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>logout</servlet-name>
    <url-pattern>/jsp/logout.do</url-pattern>
</servlet-mapping>

3、编写进入jsp页面的过滤器

防止未登录、登陆失败的用户直接进入管理页面

package com.qin.filter;

import com.qin.pojo.User;
import com.qin.utils.user.Constents;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class JspFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        User user =(User) request.getSession().getAttribute(Constents.USER_SESSION);
        if (user == null){
            response.sendRedirect(request.getContextPath()+"/error.jsp");
        }
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

4、注册Filter

<!--    jsp页面过滤器-->
    <filter>
        <filter-name>jspFilter</filter-name>
        <filter-class>com.qin.filter.JspFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>jspFilter</filter-name>
        <url-pattern>/jsp/*</url-pattern>
    </filter-mapping>

修改密码

1、添加dao层修改密码接口

//修改用户密码
public int modifyPwd(Connection connection,int id,String newPaw) throws SQLException;

2、实现dao层接口

@Override
public int modifyPwd(Connection connection, int id, String newPaw) throws SQLException {
    int row=0;
    connection=BaseDao.getConnection();
    String sql = "update smbms_user set userPassword = ? where id =?";
    Object[] param ={newPaw,id};
    PreparedStatement statement =connection.prepareStatement(sql);
    statement.setObject(1,param[0]);
    statement.setObject(2,param[1]);
    row = statement.executeUpdate();
    return row;
}

3、添加service层操作接口

//根据id和新密码进行密码修改,返回boolean
public boolean updatePwd(int id,String newPwd);

4、实现service层接口

@Override
public boolean updatePwd(int id, String newPwd) {
    boolean flag =false;
    Connection connection =null;
    int row;
    try {
        connection = BaseDao.getConnection();
        row = new UserDaoImpl().modifyPwd(connection,id,newPwd);
        if (row>0){
            flag = true;
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    finally {
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    return flag;
}

5、编写servlet求情处理

  • 根据前端代码获得参数、返回参数

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    
    <%@include file="/jsp/common/head.jsp"%>
    <div class="right">
                <div class="location">
                    <strong>你现在所在的位置是:</strong>
                    <span>密码修改页面</span>
                </div>
                <div class="providerAdd">
                    <form id="userForm" name="userForm" method="post" action="${pageContext.request.contextPath }/jsp/user.do">
                        <!-- 这里的method传递的参数决定做什么处理 -->
                        <input type="hidden" name="method" value="savepwd">
                        <!--div的class 为error是验证错误,ok是验证成功-->
                        <div class="info">${message}</div>
                        <div class="">
                            <!-- 这里的oldpassword是获得旧密码的形参 -->
                            <label for="oldPassword">旧密码:</label>
                            <input type="password" name="oldpassword" id="oldpassword" value="">
                      <font color="red"></font>
                        </div>
                        <div>
                            <label for="newPassword">新密码:</label>
                            <!-- 这里的newpassword是获得新密码的形参 -->
                            <input type="password" name="newpassword" id="newpassword" value=""> 
                      <font color="red"></font>
                        </div>
                        <div>
                            <label >确认新密码:</label>
                            <input type="password" name="rnewpassword" id="rnewpassword" value=""> 
                      <font color="red"></font>
                        </div>
                        <div class="providerAddBtn">
                            <!--<a href="#">保存</a>-->
                            <input type="button" name="save" id="save" value="保存" class="input-button">
                        </div>
                    </form>
                </div>
            </div>
        </section>
    <%@include file="/jsp/common/foot.jsp" %>
    <script type="text/javascript" charset="gb2312" src="${pageContext.request.contextPath }/js/pwdmodify.js"></script>
    
//修改密码
public void updatePwd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String newpassword = req.getParameter("newpassword");
    User user = (User) req.getSession().getAttribute(Constents.USER_SESSION);

    boolean flag = new UserServiceImpl().updatePwd(user.getId(),newpassword);
    if (newpassword != null || "".equals(newpassword)){
        if (flag){
            req.setAttribute("message","密码修改成功,请重新登录");
            req.getSession().removeAttribute(Constents.USER_SESSION);
            req.getRequestDispatcher("pwdmodify.jsp").forward(req,resp);
        }
        else {
            req.setAttribute("message","密码修改失败");
            req.getRequestDispatcher("pwdmodify.jsp").forward(req,resp);
        }
    }else{
        req.setAttribute("message","密码不能为空");
        req.getRequestDispatcher("pwdmodify.jsp").forward(req,resp);
    }

}

6、根据js代码,验证旧密码

$.ajax({
   type:"GET",//请求方式
   url:path+"/jsp/user.do",//请求地址
   //返回的对象:{参数:值,参数:值},
   data:{method:"pwdmodify",oldpassword:oldpassword.val()},
   dataType:"json",//返回参数类型
   success:function(data){
      if(data.result == "true"){//旧密码正确
         validateTip(oldpassword.next(),{"color":"green"},imgYes,true);
      }else if(data.result == "false"){//旧密码输入不正确
         validateTip(oldpassword.next(),{"color":"red"},imgNo + " 原密码输入不正确",false);
      }else if(data.result == "sessionerror"){//当前用户session过期,请重新登录
         validateTip(oldpassword.next(),{"color":"red"},imgNo + " 当前用户session过期,请重新登录",false);
      }else if(data.result == "error"){//旧密码输入为空
         validateTip(oldpassword.next(),{"color":"red"},imgNo + " 请输入旧密码",false);
      }
   },
   error:function(data){
      //请求出错
      validateTip(oldpassword.next(),{"color":"red"},imgNo + " 请求错误",false);
   }
});
  • 根据js代码的参数名写servlet
//验证旧密码,无需查询数据库,直接从当前session中的user对象获取
public void pwdModify(HttpServletRequest req, HttpServletResponse resp){
    User user = (User) req.getSession().getAttribute(Constents.USER_SESSION);
    String oldpassword = req.getParameter("oldpassword");
    
    //使用Map设置返回值
    Map<String,String> map = new HashMap<String, String>();
    if (user==null){
        map.put("result","sessionerror");
    }
    else if(StringUtils.isNullOrEmpty(oldpassword)){
        map.put("result","error");
    }
    else if (oldpassword.equals(user.getUserPassword())){
        map.put("result","true");
    }else {
        map.put("result","false");
    }

    try {
        resp.setContentType("application/json");
        PrintWriter writer = resp.getWriter();
        //需要导入JSON jar包
        writer.print(JSONArray.toJSON(map));//将一个object转换成json类型
    } catch (IOException e) {
        e.printStackTrace();
    }
}

用户管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n1uoDBRE-1622769224914)(smbms3.png)]

获得用户总数

userdao里添加方法

//获得用户总数
public int getUserCount(Connection connection,String userName,int userRole) throws SQLException;

userDaoImpl实现方法

//获得用户总数
@Override
public int getUserCount(Connection connection, String userName, int userRole) throws SQLException {
    int uerCount = 0;
    //需要动态添加,使用StringBuffer
    StringBuffer sql=new StringBuffer();
    ResultSet resultSet =null;
    PreparedStatement statement = null;
    List<Object> list = new ArrayList<>();
    if (connection!=null){
        try {
            sql.append("select count(1) from smbms_user su join smbms_role sr on su.userRole = sr.id ");
            if (!StringUtils.isNullOrEmpty(userName)){
                sql.append("and su.userName like ?");
                list.add("%"+userName+"%");
            }
            if (userRole>0){
                sql.append("and su.userRole = ?");
                list.add(userRole);
            }
            statement = connection.prepareStatement(sql.toString());
            Object[] param = list.toArray();
            resultSet = BaseDao.executeQuery(connection,statement,resultSet,sql.toString(),param);

            if (resultSet.next()){
                uerCount=resultSet.getInt(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            BaseDao.release(null,statement,resultSet);
        }
    }
    return uerCount;
}

userservice里添加方法

//查询符合条件的用户数
public int getUserCount(String userName,int userRole) throws SQLException;

userserviceImpl实现方法

//修改用户密码
@Override
public boolean updatePwd(int id, String newPwd) throws SQLException {
    boolean flag =false;
    Connection connection =null;
    int row;
    try {
        connection = BaseDao.getConnection();
        row = userDao.modifyPwd(connection,id,newPwd);
        if (row>0){
            flag = true;
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    finally {
        BaseDao.release(connection,null,null);
    }
    return flag;
}

获得用户列表

userdao里添加方法

//获得用户列表
public List<User> getUserList(Connection connection,String userName,int userRole,int currentPageNo,int pageSize) throws SQLException;

userDaoImpl实现方法

//获得用户列表
@Override
public List<User> getUserList(Connection connection, String userName, int userRole, int currentPageNo, int pageSize) throws SQLException {
    List<User> userList = new ArrayList<>();
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    StringBuffer sql = new StringBuffer();
    List<Object> list = new ArrayList<>();
    if(connection!=null){
        try {
            sql.append("select su.*,sr.roleName from smbms_user su join smbms_role sr on su.userRole = sr.id ");
            if (!StringUtils.isNullOrEmpty(userName)){
                sql.append("and su.userName like ?");
                list.add("%"+userName+"%");
            }
            if (userRole>0){
                sql.append("and su.userRole = ?");
                list.add(userRole);
            }
            currentPageNo = (currentPageNo-1)*pageSize;
            sql.append(" order by su.creationDate desc limit ?,?");
            list.add(currentPageNo);
            list.add(pageSize);
            Object[] param=list.toArray();
            resultSet = BaseDao.executeQuery(connection,statement,resultSet,sql.toString(),param);
            while (resultSet.next()){
                User user = new User();
                user.setId(resultSet.getInt("Id"));
                user.setUserCode(resultSet.getString("userCode"));
                user.setUserName(resultSet.getString("userName"));
                user.setGender(resultSet.getInt("gender"));
                user.setBirthday(resultSet.getDate("birthday"));
                user.setPhone(resultSet.getString("phone"));
                user.setUserRole(resultSet.getInt("userRole"));
                user.setUserRoleName(resultSet.getString("roleName"));
                userList.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            BaseDao.release(null,statement,resultSet);
        }
    }
    return userList;
}

userservice里添加方法

//获得符合条件的用户
public List<User> getUserLiset(String userName,int userRole,int currentPageNo,int pageSize) throws SQLException;

userserviceImpl实现方法

//获得查询的用户列表
@Override
public List<User> getUserLiset(String userName, int userRole,int currentPageNo,int pageSize) throws SQLException {
    Connection connection = null;
    List<User> userList = new ArrayList<>();
    try {
        connection=BaseDao.getConnection();
        userList=userDao.getUserList(connection,userName,userRole,currentPageNo,pageSize);
    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        BaseDao.release(connection,null);
    }
    return userList;
}

获得角色列表

创建roledao

package com.qin.dao.role;

import com.qin.pojo.Role;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

public interface RoleDao {
    //获得角色列表
    public List<Role> getRoleList(Connection connection) throws SQLException;
}

roleDaoImpl实现方法

package com.qin.dao.role;

import com.qin.dao.BaseDao;
import com.qin.pojo.Role;
import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class RoleDaoImpl implements RoleDao {
    @Override
    public List<Role> getRoleList(Connection connection) throws SQLException {
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        List<Role> roleList =new ArrayList<>();
        if (connection!=null){
            try {
                String sql="select * from smbms_role";
                Object[] param ={};
                resultSet = BaseDao.executeQuery(connection,statement,resultSet,sql,param);
                while (resultSet.next()){
                    Role role = new Role();
                    role.setId(resultSet.getInt("id"));
                    role.setRoleCode(resultSet.getString("roleCode"));
                    role.setRoleName(resultSet.getString("roleName"));
                    roleList.add(role);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                BaseDao.release(null,statement,resultSet);
            }
        }
        return roleList;
    }

}

创建roleService

package com.qin.service.role;

import com.qin.pojo.Role;

import java.sql.SQLException;
import java.util.List;

public interface RoleService {
    public List<Role> getRoleList() throws SQLException;
}

roleServiceImpl实现方法

package com.qin.service.role;

import com.qin.dao.BaseDao;
import com.qin.dao.role.RoleDao;
import com.qin.dao.role.RoleDaoImpl;
import com.qin.pojo.Role;
import org.junit.Test;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

public class RoleServiceImpl implements RoleService {
    private RoleDao roleDao;

    public RoleServiceImpl() {
        this.roleDao = new RoleDaoImpl();
    }

    @Override
    public List<Role> getRoleList() throws SQLException {
        Connection connection = BaseDao.getConnection();
        List<Role> roleList = roleDao.getRoleList(connection);
        BaseDao.release(connection,null);
        return roleList;
    }
}

根据前端页面,增加servlet的功能

创建工具类

package com.qin.utils.user;

public class PageSupport {
    //当前页码-来自用户输入
    private int currentPageNo=1;
    //总数量(表)
    private int totalCount = 0;
    //页面容量
    private int pageSize = 0;
    //总页数-totalCount/pageSize + 1
    private int totalPageCount = 1;

    public int getCurrentPageNo() {
        return currentPageNo;
    }

    public void setCurrentPageNo(int currentPageNo) {
        if(currentPageNo>0){
            this.currentPageNo = currentPageNo;
        }
    }

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        if (totalCount>0){
            this.totalCount = totalCount;
            this.setTotalPageCountRs();
        }
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        if (pageSize>0){
            this.pageSize=pageSize;
        }
    }

    public int getTotalPageCount() {
        return totalPageCount;
    }

    public void setTotalPageCount(int totalPageCount) {
        this.totalPageCount = totalPageCount;
    }
    public void setTotalPageCountRs(){
        if (this.totalCount % this.pageSize == 0){
            this.totalPageCount = this.totalCount / this.pageSize;
        }else if (this.totalCount % this.pageSize >0){
            this.totalPageCount = this.totalCount / this.pageSize+1;
        }else {
            this.totalPageCount = 0;
        }
    }
}

编写serlvet方法

//查询
public void query(HttpServletRequest req, HttpServletResponse resp) throws SQLException, ServletException, IOException {
    //从前端获得参数
    String queryName = req.getParameter("queryname");//查询的用户名字
    String temp = req.getParameter("queryUserRole");//查询的角色信息
    String pageIndex = req.getParameter("pageIndex");//当前页数

    //修改参数类型
    int queryRole=0;
    if (temp!=null&&!temp.equals("")){
        queryRole = Integer.parseInt(temp);
    }
    int currentPageNo=1;
    if (pageIndex!=null){
        currentPageNo = Integer.parseInt(pageIndex);
    }


    //定义页面大小
    int pageSize = 5;

    //从service中获得用户总数
    int totalCount =new UserServiceImpl().getUserCount(queryName,queryRole);


    //实例化工具类并传值
    PageSupport pageSupport = new PageSupport();
    pageSupport.setPageSize(pageSize);
    pageSupport.setCurrentPageNo(currentPageNo);
    pageSupport.setTotalCount(totalCount);
    //使用工具类中的方法计算总页数
    pageSupport.setTotalPageCountRs();

    //获得查询的用户列表
    List<User> userList = new UserServiceImpl().getUserLiset(queryName,queryRole,currentPageNo,pageSize);
    //获得角色列表
    List<Role> roleList = new RoleServiceImpl().getRoleList();

    //返回请求的信息
    req.setAttribute("queryUserName",queryName);
    req.setAttribute("roleList",roleList);
    req.setAttribute("userList",userList);
    req.setAttribute("totalPageCount",pageSupport.getTotalPageCount());
    req.setAttribute("totalCount",pageSupport.getTotalCount());
    req.setAttribute("currentPageNo",pageSupport.getCurrentPageNo());

    req.getRequestDispatcher("userlist.jsp").forward(req,resp);
}

遇到的问题

重定向问题

当修改完密码后,移除了session中的信息,当在进行操作时,会被用户过滤器检测到

此时发生重定向失败。

原因:

过滤器代码有逻辑错误

正确代码:

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    User user =(User) request.getSession().getAttribute(Constents.USER_SESSION);
    System.out.println(user);
    String requestURI = ((HttpServletRequest) servletRequest).getRequestURI();
    if (user == null ){
        response.sendRedirect(request.getContextPath()+"/error.jsp");
    }else {
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

未解决的问题

当修改完密码后,点击注销,没有重定向到登录界面,而是跳转到了error页面。

原因:

注销登录的servlet mapping注册到了 jsp/logout.jsp,

用户过滤器检测到session中没有用户信息,于是在请求servlet时被重定向到了error.jsp界面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值