一、过滤器和控制器的差别?
1)servlet主要用来在业务处理之前进行控制,处理完传来的url以后,不会向下传递,而是会返回或者专向自己指定的某一页面。而filter在处理完传来的url以后,会继续向下传递到另外一个filter或者是servlet上。
2)二者的常用处有些区别,servlet用于处理核心服务,而filter则更多用于过滤筛选符合条件的信息。
二、过滤器和控制器的url-pattern是什么关系?
1)过滤器中的url-pattern表示这个url会先经过这个过滤器处理。
2)servlet中的url-pattern表示这个url是我访问我这个servlet服务的地址、
如下例:
<servlet>
<description></description>
<display-name>MyServlet</display-name>
<servlet-name>MyServlet</servlet-name>
<servlet-class>cn.edu.cuit.filter.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern> <!-- 控制器处理"/MyServlet"请求 -->
</servlet-mapping>
<filter>
<display-name>MyFilter01</display-name>
<filter-name>MyFilter01</filter-name>
<filter-class>cn.edu.cuit.filter.MyFilter01</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter01</filter-name>
<url-pattern>/MyServlet</url-pattern> <!-- 过滤器01过滤"/MyServlet"请求 -->
</filter-mapping>
<filter>
<display-name>MyFilter02</display-name>
<filter-name>MyFilter02</filter-name>
<filter-class>cn.edu.cuit.filter.MyFilter02</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter02</filter-name>
<url-pattern>/MyServlet</url-pattern> <!-- 过滤器02也过滤"/MyServlet"请求 -->
</filter-mapping>
<filter>
<display-name>MyFilter</display-name>
<filter-name>MyFilter</filter-name>
<filter-class>cn.edu.cuit.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/MyServlet</url-pattern> <!-- 过滤器,过滤"/MyServlet"请求 -->
</filter-mapping>
三、过滤器配置时,使用通配符在url-pattern中的作用是什么?
使用通配符表示,所有的url地址在被访问前都会经过这个过滤器处理。如下例:
<!-- 字符过滤器 -->
<filter>
<display-name>CharacterFilter</display-name>
<filter-name>CharacterFilter</filter-name>
<filter-class>cn.edu.cuit.filter.CharacterFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterFilter</filter-name>
<url-pattern>/*</url-pattern> <!-- 对本应用程序的所有请求,均使用此过滤器 -->
</filter-mapping>
<!-- 转发控制器 -->
<servlet>
<description></description>
<display-name>ForwardServlet</display-name>
<servlet-name>ForwardServlet</servlet-name>
<servlet-class>cn.edu.cuit.filter.ForwardServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ForwardServlet</servlet-name>
<url-pattern>/ForwardServlet</url-pattern>
</servlet-mapping>
<!-- 字符处理器 -->
<servlet>
<description></description>
<display-name>CharacterServlet</display-name>
<servlet-name>CharacterServlet</servlet-name>
<servlet-class>cn.edu.cuit.filter.CharacterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CharacterServlet</servlet-name>
<url-pattern>/CharacterServlet</url-pattern>
</servlet-mapping>
<!-- 设置控制器/处理器 -->
<servlet>
<description></description>
<display-name>MyServlet</display-name>
<servlet-name>MyServlet</servlet-name>
<servlet-class>cn.edu.cuit.filter.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern> <!-- 控制器处理"/MyServlet"请求 -->
</servlet-mapping>
此时,三个servlet控制器在收到url之前,都会先经历一遍过滤器的处理。
四、监听器本质上是在监测容器的什么事件引发的什么对象的变化?
监听器本质上是检测容器中"session"对象创建的次数,每次session对象创建了一次,count就会加一,然后在线人数也会随之增加有一个人。