`
Aether
  • 浏览: 14262 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

JSP拾遗(七)——Filter

    博客分类:
  • Java
阅读更多

一个过滤器必须要实现javax.servlet.Filter,并在web.xml里面正确地配置。过滤器可以用来对客户端对资源(servlet或静态资源如html、图片、影音等)的请求、服务端对请求资源的响应进行分别过滤,或者同时过滤。

 

Filter接口定义了三个方法:

doFilter(ServletRequest request, ServletResponse response, FilterChain chain):处理过滤信息;

init(FilterConfig filterConfig):初始化filter。在web容器加载filter时执行。

destroy():销毁占用资源。在web容器销毁filter时执行。

 

以下情形是Filter的应用示例:

1、权限

2、日志及核查

3、图像转换

4、数据压缩

5、加密

6、语义解析

7、触发资源访问事件

8、XSL/T应用

9、 数据类型解析(Mime-type chain Filter)

 

下面举例说明Filter在语义解析方面的应用。在这个示例中,给出了一种伪静态化的实现方法。这里的伪静态化的含义就是,在客户端表现为静态化的页面链接,但服务端并没有对应的静态html页面,仍然是动态地从数据库读取数据。这需要在Filter里面对静态html资源的请求转化为对servletjsp的动态调用。

 

假设我们做一个小说网站。小说的内容通过后台编辑来发布。一篇小说包括基本信息和章节信息来组成,它们之间是一对多的关系。小说的基本信息用小说名称来唯一标识,章节名称用数字123等来标识,我们通过传入小说名称和章节号到viewBook.jsp来显示小说的章节内容,在访问地址会是这样的格式: http://127.0.0.1/books/viewBook.jsp?name=guichuideng&article=1

但这种格式对应客户端来说是没有意义的,你可能需要提供一个更友好的访问地址如:

http://127.0.0.1/books/guichuiden/1.html

 

我们通过BookFilter来实现伪静态化的过程。

 

 

web.xml里面配置:

<filter>
	<filter-name>BookFilter</filter-name>
	<filter-class>com.hx.servlet.BookFilter</filter-class>
	<init-param>
		<param-name>BOOK_URI</param-name>
		<param-value>books/</param-value>
	</init-param>
	<init-param>
		<param-name>BOOK_SERVLET</param-name>
		<param-value>/books/viewBook.jsp</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>BookFilter</filter-name>
	<url-pattern>/books/*</url-pattern>
</filter-mapping>

 

Java代码:

 

package com.hx.servlet;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class BookFilter implements Filter {

    /** 小说放置目录 */
    private static String bookURI = "";
    
    /** 小说查看Servlet */
    private static String bookServlet = "";

    public void init(FilterConfig filterConfig) throws ServletException {
        bookURI = filterConfig.getInitParameter("BOOK_URI");
        bookServlet = filterConfig.getInitParameter("BOOK_SERVLET");
    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        String contextPath = request.getContextPath();
        String uri = request.getRequestURI();
        String resource = uri.substring(contextPath.length() + 1, uri.length());
        resource = resource.substring(bookURI.length());
        String[] tmp = resource.split("/");
        if (tmp.length != 2 || tmp[1].indexOf(".htm") <= 0) {
            filterChain.doFilter(servletRequest, servletResponse);
        }
        else {
            String bookName = tmp[0];
            String article = tmp[1].substring(0, tmp[1].indexOf(".htm"));
            request.setAttribute("name", bookName);
            request.setAttribute("article", article);
	    //分发请求
	    //bookServlet里面根据request.getAttribute("name")和request.getAttribute("article")
	    //分别获取小说名和章节编号
            request.getRequestDispatcher(bookServlet).forward(request, response);
        }
    }

    public void destroy() {
    }

}

 

 

 

 

分享到:
评论

相关推荐

    jsp网络编程——源文件(06——09)

    【标题】"jsp网络编程——源文件(06——09)" 提供的是一系列关于JSP(Java Server Pages)网络编程的学习资料,主要涵盖了第六章至第九章的内容。这些章节通常会深入讲解JSP的核心概念和技术,帮助开发者更好地...

    jsp程序设计——图灵奖

    《jsp程序设计——图灵奖》是一本专为学习Java Server Pages(JSP)技术而编写的书籍,尤其适合编程初学者。这本书以其深入浅出的讲解方式,为读者揭示了JSP编程的核心概念和实战技巧,使得学习过程更为轻松易懂。...

    JSP网络编程——多媒体(1——3)

    "JSP网络编程——多媒体(1——3)"这一主题,显然关注的是如何利用JSP技术处理和展示多媒体内容,如图像、音频、视频等。下面我们将深入探讨这个主题,了解相关知识点。 1. **JSP基本概念**: JSP是由Sun ...

    jsp毕业设计——jsp商品进销存系统.zip

    jsp毕业设计——jsp商品进销存系统.zip

    jsp网络编程——多媒体(chap02)

    jsp网络编程——多媒体(chap02) 实用

    jsp网络编程——源文件(01——05)

    在本教程的"jsp网络编程——源文件(01——05)"中,我们将逐步学习JSP的基本概念、语法结构以及常用功能。 **章节概览** 1. **chap01:JSP基础** - JSP的起源与发展 - JSP与HTML、Servlet的关系 - JSP基本结构...

    jsp网络编程——源文件(12——13)

    【标题】"jsp网络编程——源文件(12——13)"主要涵盖了JSP(Java Server Pages)技术在网络编程中的应用,这部分内容通常包括了第十二章和第十三章的知识点。JSP是Java平台上的动态网页技术,它允许开发者在HTML或...

    JSP核心技术——JSP引擎内幕(2010).pdf

    ### JSP核心技术——JSP引擎内幕 #### 一、JSP引擎的工作原理 JSP(Java Server Pages)是一种基于Java的服务器端脚本技术,它允许开发者将动态内容嵌入到HTML网页中。JSP的核心功能是通过JSP引擎来实现的。JSP...

    jsp开发案例——租房系统jsp列子

    【jsp开发案例——租房系统jsp列子】 在IT行业中,JavaServer Pages(JSP)是一种广泛使用的服务器端脚本语言,用于动态网页开发。本案例是基于JSP技术开发的一个租房系统,它涵盖了用户登录、房屋信息查询以及会员...

    jsp课程设计——新闻发布系统.zip

    jsp课程设计——新闻发布系统

    Jsp程序设计——交友网站

    **JSP程序设计——交友网站** 本项目是一个基于JSP技术构建的交友网站,它源自于张跃平的JSP程序设计课程中的实例,并经过个人的深入修改和扩展,增加了更多的功能,使得整个系统更加完善且可以直接运行。下面将...

    jsp小游戏——猜数字相加大小

    【jsp小游戏——猜数字相加大小】是一款基于JavaServer Pages(JSP)技术开发的简单游戏,旨在帮助用户更好地理解和掌握JSP的基本用法。在这个游戏中,系统会随机生成两个数字,玩家需要猜测这两个数字相加的结果是...

    jsp网络编程——源文件(10——11)

    【标题】"jsp网络编程——源文件(10——11)"主要涵盖了JSP(Java Server Pages)技术在网络编程中的应用,这是Java Web开发的重要组成部分。这两个章节可能包括了第10章和第11章的学习内容,涉及到JSP的基础语法、...

    jsp网络编程——多媒体教程(chap01)

    jsp网络编程——多媒体教程 实用 希望对大家有用

    jsp网络编程——多媒体(chap04)

    jsp网络编程——多媒体(chap04) 实用,适合初学

    用JSP写的——企业人力资源系统

    【标题】"用JSP写的——企业人力资源系统"是一个基于Java服务器页面(JSP)技术构建的企业级应用,主要用于管理企业内部的人力资源信息。这个系统涵盖了人力资源管理的核心功能,如员工信息管理、招聘管理、培训发展...

    jsp网络编程——多媒体文件(7)

    在“jsp网络编程——多媒体文件(7)”这个主题中,我们将深入探讨如何在Java Server Pages(JSP)中处理多媒体文件,这对于任何想要构建动态、交互式网站的开发者来说都是至关重要的。JSP是一种服务器端脚本语言,...

    jsp毕业设计——jsp报名系统.zip

    【标题】"jsp毕业设计——jsp报名系统"指的是一个基于JSP技术的毕业设计项目,主要功能是实现一个在线报名系统。这样的系统通常用于教育、活动报名等场景,让用户能够方便快捷地完成报名流程。 【描述】"jsp毕业...

    jsp动态网站——电子书店

    【jsp动态网站——电子书店】项目是一个基于Java技术的Web应用程序,主要利用Eclipse作为集成开发环境,Tomcat作为服务器,以及Access作为数据库来构建一个完整的在线书店系统。这个项目不仅提供了基本的书籍展示、...

    JSP毕业设计——jsp毕业选题系统.zip

    【JSP毕业设计——jsp毕业选题系统】是一个基于Java Server Pages(JSP)技术的毕业设计项目,旨在帮助学生在完成学业时选择并管理他们的毕业课题。这个项目的核心是利用JSP和Java来实现一个在线选题系统,提供用户...

Global site tag (gtag.js) - Google Analytics