JAVA过滤器的使用(Filter)
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
这是在Servlet里面设置字符编码的代码,但是通常情况下Servlet不止一个,所以我们需要在每一个Servlet中都写上上面的代码,这样的话,不仅麻烦,而且容易搞混淆。
所以我们对于这类多个Servlet中会执行相同的代码的时候,我们通常可以使用过滤器来帮我们完成操作:
过滤器:
如果想要使用过滤器,首先需要实现Filter类,并重写三个需要的方法:
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException; @WebFilter(filterName = "TestFilter2",urlPatterns = "/*")
public class TestFilter2 implements Filter {
public void destroy() {
} public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
chain.doFilter(req, resp);
} public void init(FilterConfig config) throws ServletException { } }
init方法: 容器在创建当前过滤器的时候自动调用;
destroy方法: 容器在销毁当前过滤器的时候自动调用
doFilter方法: 过滤器的主要代码写在这个地方
@WebFilter(filterName = "TestFilter2",urlPatterns = "/*")
这一行代码的意思是添加一个注解,通过这行代码就不需要再去web.xml中注册了
其中 filterName 代表的是这个过滤器的名字,后面那个urlPatterns 代表的是过滤的路径 /* 代表所有路径,意味着访问所有的路径的时候都会先访问这个过滤器
chain.doFilter(req, resp);
这一行代码代表的是如果还有其他的过滤器就调用其它的过滤器,但是需要注意,这一行代码必须写在doFilter方法的最后面
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//这样在每个Servlet执行的时候都会先进行这个
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp; request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8"); //因为有可能不止这一个过滤器,所以需要将所有的过滤器执行
//注意 这一行代码一定要写到最后
chain.doFilter(req, resp);
}
其中3-7行代码就是设置编码
由于doFilter传递进来的默认是ServletRequest对象 而设置字符集的是在HttpServetRequest 所以我们需要强制转换一下
转换过后我们就可以进行设置了。
下面附上我另外一个测试过滤器的代码:
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException; /**
* urlPatterns代表的是需要将那些路径进行过滤器过滤 这里为* 代表所有的路径都需要进入这个过滤器
*/
@WebFilter(filterName = "TestFilter",urlPatterns = "/*")
public class TestFilter implements Filter {
public void destroy() {
} /**
* 在这里面写的任何代码 在执行Servlet JSP 等前 都会被执行
*/
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//这样在每个Servlet执行的时候都会先进行这个
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp; request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8"); //因为有可能不止这一个过滤器,所以需要将所有的过滤器执行
//注意 这一行代码一定要写到最后
chain.doFilter(req, resp);
} public void init(FilterConfig config) throws ServletException { } //通过重写getParameter方法,实现get方法自动转码
class MyWrapper extends HttpServletRequestWrapper{
private HttpServletRequest request;
public MyWrapper(HttpServletRequest request) {
super(request);
this.request = request;
} @Override
public String getParameter(String name) {
String value = this.request.getParameter(name);
if(value == null){
return null;
} //如果是get方法提交过来的
if(this.request.getMethod().equalsIgnoreCase("get")){
try {
// 进行转码
value = new String(value.getBytes("ISO-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} //屏蔽尖括号 换成 > <
value = value.replace(">",">");
value = value.replace("<","<"); return value;
}
}
}
JAVA过滤器的使用(Filter)的更多相关文章
- java过滤器Filter笔记
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静 ...
- java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
java 过滤器Filter: package com.sun.test.aircraft.filter;import javax.servlet.*;import java.io.IOExcepti ...
- Java过滤器Filter
过滤器 一. 简介 过滤器一般用于设置字符编码.登录验证.权限验证.敏感词过滤等,减少了代码的冗余,便于代码的复用,但是不一定是每个servlet都必须使用过滤器的. 二. 过滤器的工作流程 图片来源 ...
- java 过滤器
1.什么是过滤器? 过滤信息,执行的优先级高于 servlet 2.自定义过滤器的步骤 写一个普通java类,实现Filter接口 2.配置过滤器 web.xm中 import java.io.I ...
- Java程序员从笨鸟到菜鸟之(二十一)java过滤器和监听器详解 【转】
过滤器 1.Filter工作原理(执行流程) 当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请 ...
- 理解Servlet过滤器 (javax.servlet.Filter)
过滤器(Filter)的概念 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应. 在请求到达Servlet/JSP之前,过滤器截获请求. 在响应送给客户端之前,过滤器截获响 ...
- Java 过滤器的作用
Servlet API 非常久曾经就已成为企业应用开发的基石,而 Servlet 过滤器则是对 J2EE 家族的相对较新的补充.在 J2EE 探索者 系列文章的最后一篇中,作者 Kyle Gabhar ...
- 【转载】Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门
Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...
- Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 >>>>>>>>>>>>>>&g ...
随机推荐
- win10系统安装web3js的正确方法(2)
信渤网络科技是一家基于互联网信息服务的区块链技术公司,专业提供区块链技术培训,智能合约定制开发,文字图片数据存证上链等服务,为相关企业提供区块链应用落地项目的技术方案 崇尚代码即法律,做一个智能合约开 ...
- 个人项目Week1
一.项目时间规划与实际用时 PSP2.1 Personal Software Process Stages 预计时间/h 实际时间/h Planning 计划 · Estimate · 估计这 ...
- javaBean中 字符串 转 date 类型转换
1-----创建javabean 代码如下 package BeanUtils; import java.util.Date; public class Admin { private String ...
- 团队项目第二周spec设计
本系统针对局域网进行联机聊天.聊天室分为服务器端和和客户端俩部分,服务器端程序主要 负责侦听客户端发来的信息,客户端需要登录到服务器端才可以实现正常的聊天功能. 1.本软件是一款局域网聊天软件,不能进 ...
- 软件工程项目之摄影App
摄影app 开发人员:Ives & Dyh 开发功能: 摄影师注册与认证,为年轻摄影师提供成长的空间,发挥一技之长的平台. 用户注册与验证,为有摄影需求的人提供选择摄影师进行个性化拍摄的平台. ...
- 百度AI--自然语言处理之Java开发
参数: public class APIConstants { //设置APPID/AK/SK public static final String APP_ID = "108***&quo ...
- Java代码安全
https://www.owasp.org/index.php/Category:Java
- Fixed the bug:while running alert/confirm in javascript the chrome freezes
显示高级设置... 系统 -> 使用硬件加速模式(如果可用) 操作系统如果不支持硬件加速,却启动此项,就悲催了.小伙伴们可别瞎点了,太吃亏. 现象alert/confirm一执行,chrome ...
- css3 @media 实现响应式布局
使用css3的@media,可以实现针对不同媒体.不同分辨率的响应式布局. 方法1:根据不同分辨率使用不同css文件 <link rel="stylesheet" media ...
- ASP.NET MVC布局
一.Views文件夹 -> Shared文件夹下的 _Layout.cshtml 母版页 @RenderBody 当创建基于_Layout.cshtml布局页面的视图时,视图的内容会和布局页面合 ...