web.xml简单总结

web.xml 各个组件的加载顺序

常用组件加载顺序:listener > filter > servlet

启动一个web项目会先创建一个ServletContext(全文上下文),当在<context-param>标签中设置键值对时,会将该键值赋给ServletContext,供所有组件使用,通过getServletContext().getInitParameter(key),可以得到对应的值。

listener 能够监听到session,application的create,destroy,可以监听到session,application属性绑定的变化。springMVC的使用

一是通过listener实现

<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

二是通过servlet实现

<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

filter过滤器会在listener执行,filter初始化是按照<filter>在后面的先初始化,执行顺序是按照<filter-mapping>在前面的先执行。在filter中可以<init-param>设置自己的键值对,通过config.getInitParameterNames(); 可以获得所有键。

在 <filter-mapping>中有<dispatcher>这个标签,这个标签是对filter进行过滤的,只有满足<dispatcher>才执行该filter

dispatcher的取值:

<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>

<dispatcher>INCLUDE</dispatcher>

<dispatcher>ERROR</dispatcher>

默认是REQUEST 是直接从客户端过来的request;

FORWARD是req.getRequestDispatcher("").forward(req, resp);

INCLUDE是req.getRequestDispatcher("").include(req, resp);

ERROR是通过<error-page>过来的request

FORWARD和INCLUDE其实就是转发,两者的区别是INCLUDE转发到另一个servlet后还会返回到原来的servlet继续执行response输出,而FORWARD不会。插一句,重定向是通过resp.sendRedirect("")实现的。

Struts2就是通过filter实现的

 <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>

servlet一般最后执行,当设置<load-on-startup>时,启动项目时,就会初始化该servlet,<load-on-startup>的值必须为整数,当为正数时,值越小先加载,当不写或为负数时,不加载。若加载,加载顺序是在filter之后。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值