第四篇 常用开源框架的核心类介绍

当我们在使用一个新的开源框架时,需要对其核心类进行了解,对其工作原理进行了解之后,才能更加得心应手的去理解框架。接下来我们简单介绍一下各框架中的核心类,由于各框架的差异和同类框架版本的差异,对于其核心的实现也是同尽相同的,有些框架核心实现技术是Servlet而有些框架是Listener还有些框架用的是filter

1. Spring MVC 

它的核心类主要是一个Servlet,org.springframework.web.servlet.DispatcherServlet

整个过程开始于客户发出的一个请求,第一个接受这个请求的组件是SpringDispatcherServletSpring  MVC将所有请求都经过一个前端Servlet控制器。DispatcherServlet就是这个前端控制器。
DispatcherServlet 同其他的Servlet一样要在web.xml中进行配置。 
<servlet>
    <servlet-name>test</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servelt>
   当DispatcherServlet装载后,它将从xml文件中载入spring的应用上下文,这个xml文件的名字取决于servlet 的名字。在本例中因为servlettest,所以DispatcherServlet将试图从一个叫做test-servlet.xml的文件中载入应用上下文。
   接下来,你必须指定哪些URL需要由DispatcherServlet来处理。在web.xml中添加:
<servlet-mapping>
    <servlet-name></servlet-name>
    <url-pattern>/app/*</url-pattern>
</servlet-mapping>
*url-pattern可以根据自己实际的业务来配置

2. Spring   

spring有三种启动方式,使用ContextLoaderServlet,ContextLoaderListenerContextLoaderPlugIn.,在这里ContextLoaderPlugIn只作为了解即可。

spring的核心类可以是一个servlet也可以是一个Listener,只是Spring的实现不同,spring的核心接口ContextLoader接口有两个实现:ContextLoaderListenerContextLoaderServlet。两者都实现同样的功能,但不同的是,ContextLoaderListener不能在与Servlet 2.2兼容的web容器中使用,根据Servlet 2.4规范, servlet context listener要在web应用程序的servlet context建立后立即执行,并要能够响应第一个请求(servlet context要关闭时也一样):这样一个servlet context listener是初始化Spring ApplicationContext的理想场所。虽然使用哪个完全取决于你,但是在同等条件下应该首选ContextLoaderListener

两个核心类的路径分别是:org.springframework.web.context.ContextLoaderListener

org.springframework.web.context.ContextLoaderServlet

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/daoContext.xml /WEB-INF/applicationContext.xml</param-value>
</context-param>
<!--Listener对应的配置-->
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Servlet对应的配置-->

<servlet>
  <servlet-name>context</servlet-name>
  <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
*但是需要注意的是,在这两个中间我们只能选择一个
    监听器首先检查contextConfigLocation参数,如果它不存在,它将使用/WEB-INF/applicationContext.xml作为默认值。如果已存在,它将使用分隔符(逗号、冒号或空格)将字符串分解成应用上下文将位置路径。ContextLoaderServletContextLoaderListener一样使用'contextConfigLocation'参数。

3. Struts1

Struts1的核心类是一个Servlet,核心类是org.apache.struts.action.ActionServlet

Web.xml的配置如下

<servlet>

   <servlet-name>struts</servlet-name>

   <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

   <init-param>

     <param-name>config</param-name>

     <param-value>

         /WEB-INF/struts-config.xml,

         /WEB-INF/struts-config-Wildcard.xml

      </param-value>

   </init-param>

   <load-on-startup>2</load-on-startup>

 </servlet>

 

 <!-- Standard Action Servlet Mapping -->

 <servlet-mapping>

   <servlet-name>action</servlet-name>

   <url-pattern>*.do</url-pattern>

 </servlet-mapping>

**如果在Servlet配置的时候不使用init-parm的话,默认该servlet会去查找WEB-INFO下的servletname-servlet.xm,如果使用该参数的话,则会加载指定的XML。换个角度想一下,如果我们在使用servlet的时候想修改默认的配置文件的名字的话,可以使用init-parm来修改。对于servlet都可以这样实现,在以后的文章中就不再强调。

4. Struts2 

在我们使用Struts2时或者在看使用了Struts2的项目时,可能会发现Struts2用到的核心过滤器是不一样的,

org.apache.struts2.dispatcher.FilterDispatcher

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

但是这两个是可以实现我们所需要的功能的,这也是struts2在版本的升级演变过程中产生的,但是这两个有什么区别呢

FilterDispatcher是struts2.0.x到2.1.2版本的核心过滤器.!
StrutsPrepareAndExecuteFilter是自2.1.3开始就替代了FilterDispatcher的.!
这样的改革当然是有好处的为什么这么说? 

如果我们在使用过FilterDispatcher的开发人员知道,如果我们自己定义过滤器的话, 是要放在strtus2的过滤器之前的, 如果放在struts2过滤器之后,自己定义过滤器对action的过滤作用会失效的,所以在使用FilterDispatcher的时候我们必须注意过滤器定义的位置,当然不只是在过滤器的位置上不方便,而且当必须使用Action的环境,而又想在执行action之前通过Filter做一些事, 显然用FilterDispatcher是做不到的!
StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器.!
给你打个比喻, 现在有病人要做手术, 现在struts2要做两件事, 搭病床(环境),执行手术.! 那么打麻药的工作呢.? 不可能要病人站着打吧, 所以必须有病床的环境,打完麻药之后再动手术.! 这个比喻非常形象了.!【红色部分源于网上】

FilterDispathcer (org.apache.struts2.dispatcher.FilterDispatcher 在早期的Struts2开发中使用,从Struts 2.1.3开始,它已不推荐使用。如果你使用的Struts的版本 >= 2.1.3,推荐升级到新的Filter-StrutsPrepareAndExecuteFilter  (org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)

下来我们看一下他们在WEB.XML中是如何配置的

<!--FilterDispatcher的配置-->

<filter>

   <filter-name>struts2</filter-name>

   <filter-class>

     org.apache.struts2.dispatcher.FilterDispatcher

   </filter-class>

</filter>

<filter-mapping>

   <filter-name>struts2</filter-name>

   <url-pattern>/*</url-pattern>

</filter-mapping>

<!--StrutsPrepareAndExecuteFilter的配置-->

<filter>

  <filter-name>struts2</filter-name>

  <filter-class>

        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

  </filter-class>

</filter>

<filter-mapping>

   <filter-name>struts2</filter-name>

   <url-pattern>/*</url-pattern>

</filter-mapping>

开源框架就介绍到此,可能有些肤浅,但是对于初学者,理解有很大的帮助,希望此博客能给大家带来方便,对于hessian,webservice或者一些其它框架的配置,后续会给出,请大家继续关注此博客。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值