Filter常见应用
来源:互联网 发布:局域网语音通讯软件 编辑:程序博客网 时间:2024/05/23 00:31
Filter常见应用
l 统一全站字符编码的过滤器
• 通过配置参数encoding指明使用何种字符编码,以处理Html Form请求参数的中文问题
public class CharSetEncodingFilter implements Filter {
private FilterConfig filterConfig;
public void destroy() {
// TODO Auto-generatedmethod stub
}
private String defaultCharset="utf-8";
public void doFilter(ServletRequest request, ServletResponseresponse,
FilterChain chain) throws IOException, ServletException{
// TODO Auto-generatedmethod stub
//设置请求对象
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse rep=(HttpServletResponse)response;
String charset=filterConfig.getInitParameter("encoding");//得到初始化参数
if(charset==null){
charset=defaultCharset;
req.setCharacterEncoding(charset);
}
request.setCharacterEncoding(charset);
req.setCharacterEncoding(charset);
rep.setContentType("text/html;charset="+charset);//设置应答内容的类型
chain.doFilter(req, rep);
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generatedmethod stub
this.filterConfig=filterConfig;
}
}
<filter>
<filter-name>CharsetEncodeFilter</filter-name>
<filter-class>com.hbsi.web.filter.CharSetEncodingFilter</filter-class>
<init-param>
<param-name>encode</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetEncodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
l 禁止浏览器缓存所有动态页面的过滤器:
• 有 3 个 HTTP 响应头字段都可以禁止浏览器缓存当前页面,它们在 Servlet 中的示例代码如下:
• response.setDateHeader("Expires",-1);
• response.setHeader("Cache-Control","no-cache");
• response.setHeader("Pragma","no-cache");
• 并不是所有的浏览器都能完全支持上面的三个响应头,因此最好是同时使用上面的三个响应头。
• Expires数据头:值为GMT时间值,为-1指浏览器不要缓存页面
• Cache-Control响应头有两个常用值:
• no-cache指浏览器不要缓存当前页面。
• max-age:xxx指浏览器缓存页面xxx秒。
public void doFilter(ServletRequest request, ServletResponseresponse,
FilterChain chain) throws IOException, ServletException{
// TODO Auto-generatedmethod stub
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse res=(HttpServletResponse)response;
//让浏览器不缓存页面
res.setDateHeader("Expires",-1);//将整数值转换为日期类型,-1代表不缓存
res.setHeader("Cache-Control", "no-cache");
res.setHeader("Pragma", "no-cache");
chain.doFilter(req, res);
}
<servlet-mapping>
<servlet-name>NoCacheFilter</servlet-name>
<url-pattern>/servlet/NoCacheFilter</url-pattern>
</servlet-mapping>
<filter>
<filter-name>NoCacheFilter</filter-name>
<filter-class>com.hbsi.web.filter.NoCacheFilter</filter-class>
</filter>
l 控制浏览器缓存页面中的静态资源的过滤器:
• 场景:有些动态页面中引用了一些图片或css文件以修饰页面效果,这些图片和css文件经常是不变化的,所以为减轻服务器的压力,可以使用filter控制浏览器缓存这些文件,以提升服务器的性能。
public class ExpiresFilter implements Filter {
public void destroy() {
// TODO Auto-generatedmethod stub
}
public void doFilter(ServletRequest request, ServletResponseresponse,
FilterChain chain) throws IOException, ServletException{
// TODO Auto-generatedmethod stub
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse res=(HttpServletResponse)response;
//(1)得到请求的是什么资源? js css jpg
String uri=req.getRequestURI();
if(uri.endsWith(".css")){//判断字符串是否是以.css结尾
//120单位是秒。乘以1000换算成毫秒
//System.currentTimeMillis()获取的是从1970年1月1日0点0分到现在所经历的毫秒数
long expiresTime=Integer.parseInt(fileConfig.getInitParameter("css"))*1000;
//设置页面失效的日期
res.setDateHeader("Expires", System.currentTimeMillis()+expiresTime);
}else if(uri.endsWith(".js")){
long expiresTime=Integer.parseInt(fileConfig.getInitParameter("js"))*1000;
//设置页面失效的日期
res.setDateHeader("Expires", System.currentTimeMillis()+expiresTime);
}else if(uri.endsWith(".jpg")){
long expiresTime=Integer.parseInt(fileConfig.getInitParameter("jpg"))*1000;
//设置页面失效的日期
res.setDateHeader("Expires", System.currentTimeMillis()+expiresTime);
}
chain.doFilter(req,res);
}
private FilterConfig fileConfig;
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generatedmethod stub
this.fileConfig=fileConfig;
}
}
<filter>
<filter-name>ExpiresFilter</filter-name>
<filter-class>com.hbsi.web.filter.ExpiresFilter</filter-class>
<init-param>
<param-name>css</param-name>
<param-value>120</param-value>
</init-param>
<init-param>
<param-name>jsp</param-name>
<param-value>180</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>*.css</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>*.js</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>*.jpg</url-pattern>
</filter-mapping>
- Filter常见应用
- Filter常见应用
- 【servlet】Filter常见应用
- Filter常见应用
- Filter常见应用
- Filter常见的应用
- Filter常见应用
- Filter(过滤器)常见应用
- Filter(过滤器)常见应用
- Filter(过滤器)常见应用
- 过滤器Filter常见应用详解
- Filter(过滤器)常见应用(一)
- Filter(过滤器)常见应用(二)
- Filter(四)常见应用4---自动登录
- javaweb学习总结Filter(过滤器)常见应用
- javaweb中Filter(过滤器)的常见应用
- 心得2--Filter过滤器常见应用开发案例分页
- Filter(过滤器)常见应用详解(附代码)
- 指针详解
- arm汇编 EXPORT 或 GLOBAL
- Filter
- POJ 1004 解题报告 Financial Management
- 国人必备常识-收藏
- Filter常见应用
- POJ 1005 解题报告 I Think I Need a Houseboat
- java学习:构造方法、static、final
- 如何在MultiArea项目中共享View路径(环境:asp.net mvc3 vs2010)
- 在网页中嵌入任意字体的解决方案
- Cross Compile zlib
- Cross Compile libpng
- 交叉编译 libjpeg.so.62
- Flex快速入门系列之五:crossdomain.xml文件创建以及允许本地跨域访问远程资源