初级_过滤器的整理
来源:互联网 发布:macbookpro 软件 编辑:程序博客网 时间:2024/05/14 22:30
过滤器Filer属于Servlet的高级部分
过滤器的位于jsp和servlet中间,会根据web.xml中配置的REQUEST(默认是请求),ERROR(错误)0或者INCLUDE(包含),FORWARD(转发)发生时,来访问我们的过滤器进行过虑
生命周期 创建: 服务器启动的时候创建Filter的对象(init()). 销毁:服务器关闭的时候或者是项目移除!(destory())
相关配置: <filter>
<filter-name> :过滤器的名称
<filter-class> :过滤器的全路径.
<init-param>
<param-name> :初始化参数的名称
<param-value> :初始化参数的值
<filter-mapping>
<filter-name> :过滤器的名称
<url-pattern> :过滤的路径.
过滤器的功能: 1.过滤敏感词汇 2.统一网站的字符集编码 3.进行相应压缩 4.进行url级别的权限控制
案例 1:分IP统计网站访问次数
代码体现
过滤器部分
<span style="color:#000000;">public class IPFilter implements Filterprivate FilterConfig filterConfig;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 创建一个Map集合:Map用于保存客户的IP和对应的访问次数:Map<String,Integer> map = new LinkedHashMap<String,Integer>();// 将Map集合存入到ServletContext域中.filterConfig.getServletContext().setAttribute("map", map);this.filterConfig = filterConfig;}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// 获得Map集合Map<String, Integer> map = (Map<String, Integer>) filterConfig.getServletContext().getAttribute("map");// 获得客户端IP地址:String ip = request.getRemoteAddr();// 判断IP是否已经在Map集合中.Integer count = map.get(ip);if(count == null){// 没有访问过这个网站.map.put(ip, 1);}else{// 之前访问过网站.count++;map.put(ip, count);}//放行:chain.doFilter(request, response);}@Overridepublic void destroy() {</span><span style="color:#000000;">}</span>jsp部分
<body><h1>分IP统计网站的访问次数:</h1><table border="1" width="400"><tr><td>IP地址</td><td>访问次数</td></tr><c:forEach items="${ map }" var="entry"><tr><td>${ entry.key }</td><td>${ entry.value }</td></tr></c:forEach></table></body>
案例 2 网站通用的字符集编码过滤器:
代码体现
增强request中的getParameter方法: 用装饰者思想
public class MyReq extends HttpServletRequestWrapper{ private HttpServletRequest request; public MyReq(HttpServletRequest request) { super(request); this.request=request; } @Override public String getParameter(String name) { // 判断请求的方式: String type = request.getMethod(); if("get".equalsIgnoreCase(type)){ String value=null; try { value = new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8"); value = new String(request.getParameter(name).getBytes("ISO-8859-1"),"utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return value; }else if("post".equalsIgnoreCase(type)){ try { request.setCharacterEncoding("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return super.getParameter(name); }
过滤器:
<strong><span style="font-size:14px;">public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest reques=(HttpServletRequest)request; MyReq myreq=new MyReq(reques); chain.doFilter(myreq, response); } public void destroy() { }</span></strong>
还不是很会排版.有点难..
- 初级_过滤器的整理
- [Cocoa]_[初级]_[NSThread的使用]
- 初级连词的类别及用法整理
- 初级linux中常遇到的问题整理
- 初级算法整理,字符串的前后换位
- [Java]_[初级]_[String的split里的坑]
- 过滤器_登录权限的判断
- [Cocoa]_[初级]_[自定义的界面上绘制图片]
- [wxWidgets]_[初级]_[常见更新进度条的方案]
- [项目管理]_[初级]_[TortoiseSVN的使用入门]
- [Java]_[初级]_[实用的byte处理类]
- [Cocoa]_[初级]_[vcf文件的生成和导出]
- [ATL/WTL]_[初级]_[SDI程序关闭的注意事项]
- [Object c]_[初级]_[NSString常用方法的总结]
- [ATL/WTL]_[初级]_[常用的界面对象操作]
- [C/C++]_[初级]_[malloc-calloc-new的区别]
- [C/C++]_[初级]_[编程容易犯错的地方]
- [Cocoa]_[初级]_[如何绘制带颜色的文本]
- tikv的操作
- 微信图片下载问题
- spring加载log4j
- UVA 10825 Anagram and Multiplication(暴力枚举)
- 23种设计模式之行为型模式——策略模式
- 初级_过滤器的整理
- 解决启动程序时先显示带title的白背景,后加载Activity的问题
- webView加载网页留白
- 占位21
- Arcgis Server发布GP服务
- 推荐一款fragment管理器
- PHP message: PHP Warning: PHP Startup: Unable to load dynamic library
- linux安装apache
- QCustomPlot实现柱状图 动态显示