一:
1,首先,过滤器类必须实现Filter接口,覆盖相关方法。
1)init方法,服务器启动时加载一次,对应的destroy方法在关闭服务器是被调用。doFilter方法在每一对request/response被调用时执行一次。
2)init方法中的FilterConfig对象是内置的,可以获取关于Filter类在web.xml 中相关配置信息
3)配置过滤器类的相关内容如下:
<filter>
//定义过滤器名称
<filter-name>TestFilter</filter-name>
//其在应用中的完整路径
<filter-class>cn.imust.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
//过滤的路径或者形式,/*过滤所有的页面请求;/c.jsp某个指定的页面;*.html所有的html页面;
//如想过滤servlet页面请求,应该填写servlet-mapping下的<url-pattern>标签的值
//过滤.do(struts1)或者.action(struts2)结尾的资源,对应写成/xxx.do或者/xxx.action的形式。
<url-pattern>/*</url-pattern>
//默认情况下是此标签,过滤除了forward和include转发请求之外所有的资源,即该过滤器被调用
<dispatcher>REQUEST</dispatcher>①
//设置过滤forward情况下的请求,如果写了ta,要想也过滤其他请求①那句不能省略
<dispatcher>FORWARD</dispatcher>
//设置过滤include情况下的请求,如果写了ta,要想也过滤其他请求①那句不能省略
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
1,关于粗粒度实现中确认登录状态的过滤器
在过滤器的doFilter方法中用强转为HttpServletRequest ServletRequest对象;调用request.getServletPath()方法得到的是servlet配置在web.xml文件中的<url-pattern>标签值
但是当格式为/*以配置所有的路径时,该方法得到的为空,这是一种bug,所以一般使用request.getRequestURI()这个方法,得到资源在服务器中的完整路径(除去服务器地址,即从请求资源所在的应用目录起,比如:/day17_filter_example2/purview/login.jsp)。
2,什么时候需要配置相关数据
当在应用中某个数据需要被多次使用,为了以防更改一处,需要同时手动更改所有时,选择将其配置到web.xml文件中,是一种好的行动,当要更改这些数据时,只需要在配置文件中更改就行。
3,装饰类
角色分配:
1)抽象构件角色(Component),定义一个抽象角色,以规范准备接收附加责任的对象。
2)具体构件角色(Concrete Component),这是被装饰对象,定义一个将要被装饰增加功能的类,一般情况下它是抽象构件角色的实现类。
3)具体装饰角色(Concrete Decorator),负责给具体构件添加增加的功能
4,关于过滤器的doFilter方法中强转的HttpServletRequest对象
HttpServletRequest对象里的请求参数都是实际包括子啊java.util.Map对象里的,而Map是不允许修改的,所有包含在HttpServletRequest对象里的请求参数不能被修改。
1,首先,过滤器类必须实现Filter接口,覆盖相关方法。
1)init方法,服务器启动时加载一次,对应的destroy方法在关闭服务器是被调用。doFilter方法在每一对request/response被调用时执行一次。
2)init方法中的FilterConfig对象是内置的,可以获取关于Filter类在web.xml 中相关配置信息
3)配置过滤器类的相关内容如下:
<filter>
//定义过滤器名称
<filter-name>TestFilter</filter-name>
//其在应用中的完整路径
<filter-class>cn.imust.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
//过滤的路径或者形式,/*过滤所有的页面请求;/c.jsp某个指定的页面;*.html所有的html页面;
//如想过滤servlet页面请求,应该填写servlet-mapping下的<url-pattern>标签的值
//过滤.do(struts1)或者.action(struts2)结尾的资源,对应写成/xxx.do或者/xxx.action的形式。
<url-pattern>/*</url-pattern>
//默认情况下是此标签,过滤除了forward和include转发请求之外所有的资源,即该过滤器被调用
<dispatcher>REQUEST</dispatcher>①
//设置过滤forward情况下的请求,如果写了ta,要想也过滤其他请求①那句不能省略
<dispatcher>FORWARD</dispatcher>
//设置过滤include情况下的请求,如果写了ta,要想也过滤其他请求①那句不能省略
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
1,关于粗粒度实现中确认登录状态的过滤器
在过滤器的doFilter方法中用强转为HttpServletRequest ServletRequest对象;调用request.getServletPath()方法得到的是servlet配置在web.xml文件中的<url-pattern>标签值
但是当格式为/*以配置所有的路径时,该方法得到的为空,这是一种bug,所以一般使用request.getRequestURI()这个方法,得到资源在服务器中的完整路径(除去服务器地址,即从请求资源所在的应用目录起,比如:/day17_filter_example2/purview/login.jsp)。
2,什么时候需要配置相关数据
当在应用中某个数据需要被多次使用,为了以防更改一处,需要同时手动更改所有时,选择将其配置到web.xml文件中,是一种好的行动,当要更改这些数据时,只需要在配置文件中更改就行。
3,装饰类
角色分配:
1)抽象构件角色(Component),定义一个抽象角色,以规范准备接收附加责任的对象。
2)具体构件角色(Concrete Component),这是被装饰对象,定义一个将要被装饰增加功能的类,一般情况下它是抽象构件角色的实现类。
3)具体装饰角色(Concrete Decorator),负责给具体构件添加增加的功能
4,关于过滤器的doFilter方法中强转的HttpServletRequest对象
HttpServletRequest对象里的请求参数都是实际包括子啊java.util.Map对象里的,而Map是不允许修改的,所有包含在HttpServletRequest对象里的请求参数不能被修改。