关于控制器和过滤器的思考

目录

一、过滤器和控制器的差别?

二、过滤器和控制器的url-pattern是什么关系?

三、过滤器配置时,使用通配符在url-pattern中的作用是什么?

四、本例的监听器本质上是在监测容器的什么事件引发的什么对象的变化?


PS:此篇博客是跑完学校作业的第16个war包所做

一、过滤器和控制器的差别?

        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 "/MyServlet"传到MyServlet控制器之前,会经过MyFilter01->MyFilter02->MyServlet的过滤链之后,在传到MyServlet控制器来处理。

至于为什么会是这个顺序,因为我们的配置文件中,过滤器的配置顺序就是MyFilter01->MyFilter02->MyServlet,如果我们换成MyServlet->MyFilter01->MyFilter02,那么得到的结果就是这样的

MyFilter就跑到了过滤链的头去了。 

三、过滤器配置时,使用通配符在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之前,都会先经历一遍过滤器的处理。 

四、本例的监听器本质上是在监测容器的什么事件引发的什么对象的变化?

        就这个war包而言,监听器本质上是检测容器中"session"对象创建的次数,每次session对象创建了一次,count就会加一,然后在线人数也会随之增加有一个人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
拦截器和过滤器的区别 1、拦截器基于动态代理 , 过滤器基于函数回调 2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截器可以利用依赖注入,因此在spring框架程序中,优先拦截器 5、拦截器是包裹在过滤器中使用的。 复习 converter 转换器 i18n struts2 spring MVC 拦截器 interceptor 过滤器 filter web.xml implements filter filterchain arg2.doFilter(req,resp); 监听器 servlet application /session /request 6/8 个 1、拦截器 定义拦截器的包 <package name="myPackage" extends="struts-default"> 定义拦截器的核心 <interceptors> 定义拦截器类 <interceptor name="myInterceptor" class="util.MyInterceptor"></interceptor> 定义拦截器的值栈空间 <interceptor-stack name="myStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="myInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> 引入定义的拦截器 <default-interceptor-ref name="myStack"></default-interceptor-ref> 拦截错误跳转的页面 <global-results> <result name="error">/demo01/error.jsp</result> </global-results> </package> 2、 token <package name="testMg" extends="struts-default"> <action name="testAction_*" class="view.TestAction" method="{1}"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="token"></interceptor-ref> <result name="invalid.token">/demo02/error.jsp</result> </action> </package> <%@ taglib uri="/struts-tags" prefix="s" %> <s:token></s:token> 3、500字struts2的科学说明文 每人一份 2018-03-19 下午演讲(脱稿) 4、小结 1、struts2对servlet封装(request,response) ,资源调配和资源的映射 2、框架设计的思想 istruts 配置,过滤器,反射 istruts.properties 3、starts2的使用思路 1、jar 2、配置文件 3、常用类 servletActionContext 4、访问流程 url -> filter -> struts.xml -> package -> action -> name="userAction_*" -> class -> method="{1}" 5、核心struts.xml 6、提交策略 图片预览 个人信息完善 7、crud 增删改查 搜索 多删 假删 ids ->action -> dao PreparedStatement -- "delete from user where id in ("+ids+")"; 8、converter i18n ModeDriven stack 9、interceptor token 5、hibernate 4.1.4 搭建架构 ORM --- Object relational Mapping UserBean userBean.hbm.xml db table let java objects hibernate in the relational datebase ! persistent Class

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值