我的过滤器好像失效了 直接 index?flag=1可以,但是登陆 不提示alert
package filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; //这是一个 过滤器类 实现了过滤器接口 //在xml中 对过滤器进行配置操作 public class CharacterEncodingFilter implements Filter { private FilterConfig config; public FilterConfig getConfig() { return config; } public void setConfig(FilterConfig config) { this.config = config; } @Override //销毁方法,在销毁过滤器对象的时候,做一些清理操作 public void destroy() { //System.out.println("characterEncoding Filter destroy... ..."); } @Override // doFilter 关键方法完成过滤器功能的时候 ,调用FilterChain //这个对象中 chain方法来通知web服务器请求预处理操作,完成接下来进一步操作 //或者调用下一个过滤器,如果没有过滤器,进入。。方法处理请求 //当在过滤器的 doFilter方法中, //完成过滤器功能 //ServletRequest 请求预处理 //ServletResponse 响应后处理 //FilterChain 过滤器链对象 进行封装 变成chain这个参数 //传到过滤器对象中 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //.xml获得的值 request.setCharacterEncoding(config.getInitParameter("charset")); chain.doFilter(request, response); // System.out.println("characterEncoding Filter doFilter... ..."); // //首先获得系统名称 .xml获得的值 // String systemName = config.getInitParameter("systemName"); // String version = config.getInitParameter("version"); // // System.out.println("systemName:"+systemName); // System.out.println("version:"+version); //通知web服务器我的请求拦截处理已经完成了,请进行下一步操作 //或者执行过滤器链里面的下一个过滤器,如果没有执行对应的请求, //对请求资源做一个处理 } @Override //初始化方法 //FilterConfig过滤器配置类 ,设置初始化参数 封装成配置类对象 public void init(FilterConfig config) throws ServletException { //System.out.println("characterEncoding Filter init... ..."); //创建get/set方法后传入参数配置对象 this.config = config; } } 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>FilterDemo</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!--过滤器配置--> <!-- 1、注册过滤器 让web服务器识别到过滤器对请求做拦截处理 --> <filter> <!--过滤器名称 --> <filter-name>charactEncodingFilter</filter-name> <!--过滤器类 --> <filter-class>filter.CharacterEncodingFilter</filter-class> <!-- --> <!--过滤器初始化参数配置 回到characterEncodingFilter类 --> <init-param> <param-name>systemName</param-name> <param-value>filter Encoding</param-value> </init-param> <init-param> <param-name>charset</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>version</param-name> <param-value>1.0</param-value> </init-param> </filter> <!-- 2、拦截映射配置 指定我们的过滤器对哪些请求做拦截处理 --> <filter-mapping> <filter-name>charactEncodingFilter</filter-name> <!-- 对所有 请求都做拦截处理--> <url-pattern>/*</url-pattern> </filter-mapping> <!-- --> <!--SessionFilter过滤器注册配置 --> <filter> <filter-name>sessionFilter</filter-name> <!-- 包名.java名 --> <filter-class>filter.SessionFilter</filter-class> </filter> <filter-mapping> <filter-name>sessionFilter</filter-name> <!--只对留言板页面 做登录按钮控制 --> <url-pattern>/message.jsp</url-pattern> </filter-mapping> </web-app> //////////////////////////////////////////////////
0
收起
正在回答
1回答
同学你好。同学的意思是不是没有登录的时候,访问“http://localhost:8080/FilterDemo/message.jsp”的时候弹不出alert呢?将同学提供的这部分代码拼入老师的源码中,运行之后,是可以正常的跳转,并且弹出呢~
同学贴的是字符编码过滤器,CharacterEncodingFilter呢~同学可以看一下自己的filter包下是否有SessionFilter这个类,并且比照下和老师的源码中的差异呢~
package filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 用户登录安全控制过滤器 * * @author lv * */ public class SessionFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest hrequest = (HttpServletRequest) request;// 涉及到HTTP请求处理,转型处理 HttpServletResponse hresponse = (HttpServletResponse) response;// 涉及到HTTP请求处理,转型处理 String loginUser = (String) hrequest.getSession().getAttribute("loginUser");// 判断用户是否完成了登录操作,session中是否存储用户名 if (loginUser == null) { hresponse.sendRedirect(hrequest.getContextPath() + "/index.jsp?flag=1");// 未登录,系统强制重定向至登录页面 return; } else { chain.doFilter(hrequest, hresponse); return; } } @Override public void init(FilterConfig config) throws ServletException { } }
祝学习愉快~
2. 从网页搭建入门JavaWeb
- 参与学习 人
- 提交作业 676 份
- 解答问题 9666 个
本阶段将从前端网页搭建入手,到Java Web基础,前后端结合助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星