项目搭建准备工作
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界面