jsp过滤器一点小结
Jsp过滤器的说明
过滤器的作用:
A,正常调用请求的资源
B,用修改后的请求信息调用请求的资源
C,修改响应请求,然后发送到客户端
D,禁止调用该资源,将请求重定向到其他的资源,或者返回一个特定的状态,或者产生替换输出
过滤器的基本概念:
拦截和修改servlet或者jsp页面的输入请求和输出请求 ,也就是可以过滤请求也可以过滤响应。
Filter类能在request到达serlvet的服务方法之前拦截HttpServletRequest对象,而在服务器方法转移控制后又能拦截HttpServletResponse对象
声明过滤器的标签
<filter>
<filter-name>ReplaceSiteNameFilter</filter-name>//过滤器的别名,为了简单起见可以设置为类名
<filter-class>coreservlets.filters.ReplaceSiteNameFilter</filter-class>//具体的哪一个过滤器
</filter>
<filter-mapping>
<filter-name>ReplaceSiteNameFilter</filter-name>
<url-pattern>/page1.jsp</url-pattern>//要过滤的页面资源
</filter-mapping>
创建过程:
a. 创建实现Filter接口的类,当然也可以继承实现Filter的子类
b. 将过滤行为放入doFilter方法中,public void doFilter(ServletRequesetrequest,ServletResponse response,FilterChain chain);其中request用来过滤请求,而response就是用来过滤响应,有两种情况必须使用它:第一,如果想完全阻止资源的访问,可以调用response.getWriter方法直接向用户发送响应,第二,如果想修改资源页面的响应。所以可以发现过滤器总是在与之相关联的servlet或jsp之前运行
c. 运行doFilter方法进行调用:调用FilterChain之前,下一个关联的过滤器会被调用,也就是说过滤器讲请求后传,如果没有,就调用servlet或jsp本身;如果有则调用之,由此可知,最后一个过滤器调用FilterChain的doFilter方法时,会调用servlet或jsp页面本身;如果没有调用chain.doFilter,相应的资源是没法得到调用的
阻止响应的简单实现
经过测试可以发现,当注释掉doFliter方法里面的chain.doFilter(req,res)后之没法打开相应的资源servlet或者jsp的,所以一个简单的阻止响应的伪代码就出来了
If(满足阻止条件){
在这里,可以重定向新的页面,res.senReddirect(string);也可以做些其他的操作
}
Else {
Chain.doFilter();
}
修改响应
注意,需要理解就是,servlet和jsp调用response.getWriter或response.getOutputStream并开始发送输出时,输出实际上并没有被立即发送到客户端,而是发送大到一个大的字符串缓冲区,所以就可以操作这个缓冲区来修改响应了
实现这个功能的类是HttpServletResponseWrapper(implements HttpServletRepsonse),实际应用的时候,可以自己创建一个类,继承这个响应包装类;
可以将这个包装类直接传递给Filter,调用chain.doFilter之后,可以用响应包装类的getWriter或者getOutputStream()类来获得原始资源的输出,也就是得到没有改变的响应
相关文章
- asp、aspx、php、jsp万能密码大全【笔记】
- 新闻发布项目——后台JSP界面adminManage/addCategory.jsp
- 新闻发布项目——后台JSP界面adminManage/addCategory.jsp
- 新闻发布项目——后台JSP界面adminManage/addNews.jsp
- 新闻发布项目——后台JSP界面adminManage/addNews.jsp
- 新闻发布项目——后台JSP界面adminManage/editNews.jsp
- 新闻发布项目——后台JSP界面adminManage/editNews.jsp
- 新闻发布项目——后台JSP界面adminManage/manageTopic.jsp
- 新闻发布项目——后台JSP界面adminManage/modifyCategory.jsp
- 新闻发布项目——后台JSP界面adminManage/modifyCategory.jsp
- 新闻发布项目——后台JSP界面adminManage/modifyCategory.jsp
- 新闻发布项目——后台JSP界面adminManage/modifyNews.jsp
- 新闻发布项目——后台JSP界面adminManage/readNews.jsp
- 新闻发布项目——前台JSP界面newspages/news_read.jsp
- 新闻发布项目——前台JSP界面newspages/news_read.jsp
- 新闻发布项目——前台JSP界面newspages/news_read.jsp
- 新闻发布项目——后台JSP界面adminManage/newsPage.jsp
- JSP实现文件上传——uploadFile.jsp
- JSP的一个增删改查例子和总结
- jsp学习--JavaBean定义和在Jsp中使用JavaBean
- servlet和jsp中间的交互
- jsp+servlet+jdbc实现表单提交
- jsp学习--JavaBean定义和在Jsp中使用JavaBean
- 自己的网站:http://yfqsdie.faisco.cn/msgBoard.jsp
- JSP页面和产品明细页面的绑定关系在Hybris WCMS cockpit什么地方能够找到
- jsp文件的请求是如何被服务器的JSP容器转换成静态网页的
- javaWeb_使用标签库简化jsp
- 用JSP实现的商城购物车模块
- JSP生成word文件
- 考虑下面两个JSP文件代码片断: test1.jsp:
- 创建一个视图JSP文件的helloWorld.jsp
- JSP Session
- JSP — 如何设置jsp中cookie的过期时间
- JSP中—request.getRequestDispatcher(“login_success.jsp“).forward(request,response)
- JSP — 如何设置jsp中cookie的过期时间
- JSP 总结
- JSP | 基于Servlet和JSP改造oa项目
- JSP一句话小马