filterconfigservlet中filter有什么用

filterconfig  时间:2021-07-05  阅读:()

java关于ServletConfig FilterConfig什么用

FilterConfig对象提供对servlet环境及web.xml文件中指派的过滤器名的访问。

FilterConfig对象具有一个getInitParameter方法,它能够访问部署描述符文件(web.xml)中分配的过滤器初始化参数。

如何配置Filter过滤器处理JSP中文乱码

Filter类: public class EncodingFilter implements Filter { private String charset = "UTF-8"; @Override public void destroy() {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; if(req.getMethod().equalsIgnoreCase("GET")) { if(!(req instanceof GetRequest)) { req = new GetRequest(req, charset); } } else { req.setCharacterEncoding(charset); } chain.doFilter(req, response); } @Override public void init(FilterConfig fConfig) throws ServletException { String charset = fConfig.getInitParameter("charset"); if(charset != null && !charset.isEmpty()) { this.charset = charset; } } } public class GetRequest extends HttpServletRequestWrapper { private HttpServletRequest request; private String charset; public GetRequest(HttpServletRequest request, String charset) { super(request); this.request = request; this.charset = charset; } @Override public String getParameter(String name) { String value = request.getParameter(name); if(value == null) return null; try { return new String(value.getBytes("ISO-8859-1"), charset); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public Map getParameterMap() { Map<String,String[]> map = request.getParameterMap(); if(map == null) return map; for(String key : map.keySet()) { String[] values = map.get(key); for(int i = 0; i < values.length; i++) { try { values[i] = new String(values[i].getBytes("ISO-8859-1"), charset); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } } return map; } @Override public String[] getParameterValues(String name) { String[] values = super.getParameterValues(name); for(int i = 0; i < values.length; i++) { try { values[i] = new String(values[i].getBytes("ISO-8859-1"), charset); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } return values; } } web.xml配置: <filter> <filter-name>EncodingFilter</filter-name> <filter-class>此处填写包名.类名</filter-class> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

servlet filter 控制页面访问

你可以配置某些页面不做过滤嘛,增加ignoreURL参数,在里面加上你无需过滤的页面(登录页面) loginCheck *.LoginFilter ignoreURL /login.do,/logon.jsp 然后在过滤器里面这样处理: public class LoginFilter implements Filter{ protected FilterConfig ftConfig; protected String ignoreURL = null; protected ArrayList alIgnoreURL = new ArrayList(); public void init(FilterConfig filterConfig) throws ServletException { // TODO 自动生成方法存根 this.ftConfig=filterConfig; this.ignoreURL = ftConfig.getInitParameter("ignoreURL"); StringTokenizer tokenizer = new StringTokenizer(ignoreURL, ","); while (tokenizer.hasMoreElements()) { alIgnoreURL.add(tokenizer.nextElement().toString()); } } doFilter方法: String requestUrl=httpRequest.getRequestURI(); if (!isIgnoreURL(requestUrl, httpRequest.getContextPath() + java.io.File.pathSeparator))才做过滤 isIgnoreURL方法: public boolean isIgnoreURL(String url, String contextPath) { for (int i = 0; i < this.alIgnoreURL.size(); i++) { if (url.indexOf((String) this.alIgnoreURL.get(i)) != -1) { return true; } if (url.equals(contextPath + "/")) { return true; } } return false; } 就算你都是用iframe来显示页面,但总有提交到页面的请求吧,把例外的请求加入到ignoreURL中就可以,不管是jsp或了html或.do都可以加进去。

顺便说一句,我现在的系统实现跟你说的一样,都是用iframe加frameset来显示页面的

怎么配置servlet filter

Filter开发分为二个步骤: 1.编写java类实现Filter接口,并实现其doFilter方法。

2.在 web.xml 文件中使用元素对编写的filter类进行注册,并设置它所能拦截的资源。

Filter链 在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。

web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。

在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。

Filter链实验(查看filterChain API文档) Filter的部署-注册Filter testFitler <.test.TestFiter word_file /WEB-INF/word.txt 1.用于为过滤器指定一个名字,该元素的内容不能为空。

2.元素用于指定过滤器的完整的限定类名。

3.元素用于为过滤器指定初始化参数,它的子元素指定参数的名字,指定参数的值。

在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。

元素用于设置一个 Filter 所负责拦截的资源。

一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径 子元素用于设置filter的注册名称。

该值必须是在元素中声明过的过滤器的名字 设置 filter 所拦截的请求路径(过滤器关联的URL样式) 指定过滤器所拦截的Servlet名称。

指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。

用户可以设置多个 子元素用来指定 Filter 对资源的多种调用方式进行拦截。

子元素可以设置的值及其意义: REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。

如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。

INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。

除此之外,该过滤器不会被调用。

FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。

ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。

除此之外,过滤器不会被调用。

Tip:Filter的部署—映射Filter示例: testFilter /test.jsp testFilter /index.jsp REQUEST FORWARD FilterConfig接口: 用户在配置filter时,可以使用为filter配置一些初始化参数,当web容器实例化Filter对象,调用其init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。

因此开发人员在编写filter时,通过filterConfig对象的方法,就可获得: String getFilterName():得到filter的名称。

String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。

如果不存在返回null. Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。

public ServletContext getServletContext():返回Servlet上下文对象的引用。

servlet中filter有什么用

首先介绍一下Filter到底是个什么东西: 根据这个单词就能猜到Filter的中文意思是过滤器,事实当然也是这样的;Filter是Servlet中的一个重 要组件。

接下来简单说说Filter这个接口中的常用方法吧。

①.init():类似于Servlet生命周期中的init()方法,用于初始化一些关于Filter接口的参数;只在Servlet 启动时调用一次。

②.doFilter():类似于Servlete生命周期中的service()方法,该方法用于存放逻辑代码。

③.destory():同理类似于Servlet生命周期中的destroy()方法,当Servlet容器销毁前调用该方法。

然后说说如何创建一个Filter的HelloWorld。

①.创一个抽象的Java类,该类实现了Filter接口,同时实现了Filter接口的部分方法,例如 init(),destroy()方法。

具体实现代码如下: public abstract class HttpFilter implements Filter { private HttpServletRequest request; private HttpServletResponse response; //重写Filter接口的destory方法 public void destroy() {} //重写doFilter方法,这个方法在这里主要作用是将ServletRequest,ServletResponse对象转为对 //应的HttpServletRequest,HttpServletResponse对象 public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { this.request = (HttpServletRequest) arg0; this.response = (HttpServletResponse) arg1; doFilter(request, response, arg2); } //该方法交由继承该抽象类的实现类来实现 public abstract void doFilter(HttpServletRequest request,HttpServletResponse response, FilterChain chain); private FilterConfig config; //这个方法是为了方便子类获取ServletContext对象 public FilterConfig getFilterConfig(){ return config; } //该方法一般不建议重写,因为重写该方法会出现某些错,基于此提供了下面的无参数的init()方法 public void init(FilterConfig arg0) throws ServletException { this.config = arg0; init(); } public void init(){} } ②.一个继承了HttpFilter抽象类的实现类,代码如下,只要功能是为了实现禁用浏览器缓存 public class NoCacheFilter extends HttpFilter{ @Override public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) { //通过过滤器实现页面禁用浏览器缓存 response.setDateHeader("Expires", -1); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); } } ③.将该实现类配置到web.xml文件中,配置方式和配置普通的Servlet一样,具体代码 NoCacheFilter <.xingyun.servlet.filter.NoCacheFilter
NoCacheFilter /* 至此,就实现了一个简单的用于禁用浏览器缓存的过滤器了。

上面说了这么多,在开发中哪些地方中能用到Filter才是最终目的,好了,我大概说一下我在开发中用到的地方。

①.上面提到的禁用浏览器的缓存。

这个真的很重要,有时候修改了前端页面,就是因为缓存的原因,导致页面不 能及时刷新过来,真的很蛋疼。

②.解决中文乱码的问题。

在开发中,页面可能达到几十个甚至上百个,在每个页面处理中文乱码的问题很烦,但 是通过过滤器,那么问题就变得很简单了。

③.通过检查用户是否登录来管理用户是否可以访问某些页面,比如个人隐私等页面。

这个用的也是蛮多的。

牦牛云(3.5USD/月 )阿里云国际版云服务器 1核1G40G

收到好多消息,让我聊一下阿里云国际版本,作为一个阿里云死忠粉,之前用的服务器都是阿里云国内版的VPS主机,对于现在火热的阿里云国际版,这段时间了解了下,觉得还是有很多部分可以聊的,毕竟,实名制的服务器规则导致国际版无需实名这一特点被无限放大。以前也写过几篇综合性的阿里云国际版vps的分析,其中有一点得到很多人的认同,那句是阿里云不管国内版还是国际版的IO读写速度实在不敢恭维,相对意义上的,如果在这...

VoLLcloud:超便宜香港CMI大带宽vps-三网CMI直连-年付四免服务-低至4刀/月-奈飞

vollcloud LLC创立于2020年,是一家以互联网基础业务服务为主的 技术型企业,运营全球数据中心业务。致力于全球服务器租用、托管及云计算、DDOS安 全防护、数据实时存储、 高防服务器加速、域名、智能高防服务器、网络安全服务解决方案等领域的智 能化、规范化的体验服务。所有购买年付产品免费更换香港原生IP(支持解锁奈飞),商家承诺,支持3天内无条件退款(原路退回)!点击进入:vollclo...

美国G口/香港CTG/美国T级超防云/湖北高防云服务器物理机促销活动 六一云

六一云 成立于2018年,归属于西安六一网络科技有限公司,是一家国内正规持有IDC ISP CDN IRCS电信经营许可证书的老牌商家。大陆持证公司受大陆各部门监管不好用支持退款退现,再也不怕被割韭菜了!主要业务有:国内高防云,美国高防云,美国cera大带宽,香港CTG,香港沙田CN2,海外站群服务,物理机,宿母鸡等,另外也诚招代理欢迎咨询。官网www.61cloud.net最新直销劲爆...

filterconfig为你推荐
混淆矩阵两个矩阵相似可以得出什么显卡挖矿啥意思请问显卡爱好者口中常挂的“挖矿”是什么意思?鲁大师中的显卡挖矿指数又是什么意思?求科普!一物一码什么是一物一码、一品一码?谁家做的比较好啊?科来网络分析系统科来网络分析系统 6.0 专家版 (演示)的功能微信收款语音播报怎么设置微信收付款如何设置声音提示空白代码html空格代码怎么写李昊天铠甲勇士2刑天的李昊天秘密是什么调度系统现在有很多人说同城调度系统,这是用来干嘛的呀?radius认证PPPoE有认证的功能,RADIUS也有验证功能,两者有区别么??waves插件MuseScore vst插件怎么安装
ftp空间 国内免备案主机 新世界机房 踢楼 韩国空间 la域名 美国php主机 京东云擎 parseerror NetSpeeder 警告本网站 私有云存储 京东商城0元抢购 193邮箱 双11秒杀 adroit 国外代理服务器软件 web服务器搭建 空间首页登陆 测速电信 更多