struts2之一 struts2的启动流程

今天我们主要讨论当服务器启动时,struts2容器所做的事情

首先服务器加载web.xml文件中的struts配置文件

<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>

这是一段过滤器的配置,目的是初始化struts2的相关参数,当加载到这段配置的时候,服务器会加载struts2StrutsPrepareAndExecuteFilter这个过滤器类,那么我们就来看看这个类


这是该类的结构图,该类实现了StrutsStatics, Filter filterstruts2的顶级过滤器接口,想要写过滤器则必须要实现该接口,而StrutsStatics这个接口则只是封装了一些常量,下面我们来看StrutsPrepareAndExecuteFilter这个过滤器类中的相关方法,很明显首先执行的是init方法,部分重要的代码如下:

publicvoid init(FilterConfig filterConfig) throws ServletException {
        try {
            FilterHostConfig config = newFilterHostConfig(filterConfig);  //把servlet容器与核心过滤器做了一个整合
            init.initLogging(config);
            dispatcher =init.initDispatcher(config);  //初始化所有的资源文件,包括 default.properties,struts-default.xml ,struts-plugin.cmlstruts.xml并且按照顺序来初始化
           }

那么我们就来看看dispatcher = init.initDispatcher(config)这个方法的相关信息

 Dispatcher dispatcher =createDispatcher(filterConfig);

 dispatcher.init();进入init

<pre name="code" class="java"> public void init() {
        try {
            init_FileManager();  //初始化文件管理器
            init_DefaultProperties(); // 加载default.properties文件
           init_TraditionalXmlConfigurations(); //加载struts-default.xml,strut-plugin.xml,struts.xml
            Container container =init_PreloadConfiguration(); //初始化预加载构造器
            container.inject(this);//注入容器
           }
}


 

好了,其他的一些初始化东西在这里就不详细介绍了,既然struts2加载了这么多配置文件,肯定有它的用处,那么我们就来详细看一下这几个文件default.properties,struts-default.xml,strut-plugin.xml,struts.xml

Default.properties文件里面的内容很多,我在这只介绍一小部分重要的

# struts.objectFactory = spring //这是struts2的对象工厂,是产生像actionresult等等的工厂,待会会详细介绍,这里表示用spring产生,但是被注释掉了

struts.devMode = false //这里表示是否开启调试模式

struts.ui.templateSuffix=ftl //这是struts2的网页模板,但是一般都不太适合我们用,所以我们都会覆盖该功能,写自己的样式

struts.handle.exception=true//这是struts2的异常处理模板,struts2提供了很强大的异常处理,但是也肯定有他的缺点,我们以后再介绍

 

struts-default.xml部分配置如下

<struts>
   <bean class="com.opensymphony.xwork2.ObjectFactory"name="struts"/> //这是对象工厂的顶级父类属于xwork的东西,要注意name="struts"表示由struts产生对象工厂
   <bean type="com.opensymphony.xwork2.factory.ResultFactory"name="struts"class="org.apache.struts2.factory.StrutsResultFactory" /> //这是结果集的产生方式
   <bean type="com.opensymphony.xwork2.factory.ActionFactory"name="struts"class="com.opensymphony.xwork2.factory.DefaultActionFactory" />//Action的产生方式
     <beantype="com.opensymphony.xwork2.util.ValueStackFactory"name="struts"class="com.opensymphony.xwork2.ognl.OgnlValueStackFactory" /> //值栈的产生方式,很重要
   <beantype="com.opensymphony.xwork2.factory.ConverterFactory"name="struts"class="com.opensymphony.xwork2.factory.DefaultConverterFactory" /> //转换器的产生方式
   <beantype="com.opensymphony.xwork2.factory.InterceptorFactory"name="struts"class="com.opensymphony.xwork2.factory.DefaultInterceptorFactory"/> //拦截器的产生方式
   <beantype="com.opensymphony.xwork2.factory.ValidatorFactory"name="struts"class="com.opensymphony.xwork2.factory.DefaultValidatorFactory" /> //验证机制的产生方式
   <package name="struts-default"abstract="true"> //这是包,而包是struts发明的一种相当漂亮的继承关系
       <result-types>//这里是各种结果集,常用的有chain redirect  redirectAction
            <result-typename="chain"class="com.opensymphony.xwork2.ActionChainResult"/> //表示服务器之间的转发到action,是action跳至action,可以在多个action之间共用一个request
            <result-typename="dispatcher"class="org.apache.struts2.dispatcher.ServletDispatcherResult"default="true"/>//转发到jsp,它也是默认值
            <result-typename="redirect"class="org.apache.struts2.dispatcher.ServletRedirectResult"/>//重定向到jsp
            <result-typename="redirectAction"class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>//重定向到action ,至于转发和重定向的区别我就不多说了。
            </result-types>
 
       <interceptors>//这里是拦截器,我只介绍几个
            <interceptorname="clearSession"class="org.apache.struts2.interceptor.ClearSessionInterceptor" />//很明显 清空session
            <interceptorname="exception"class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/> //异常拦截器
            <interceptorname="fileUpload"class="org.apache.struts2.interceptor.FileUploadInterceptor"/> //文件上传
            <interceptorname="i18n"class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/> //编码
                       <interceptorname="modelDriven"class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> //模型驱动,很重要      
            <!-- Basic stack -->
            <interceptor-stackname="basicStack">  //这是拦截器栈,其实就是多个拦截器加在一块
                <interceptor-refname="exception"/>
                   <interceptor-refname="conversionError"/>
                <interceptor-refname="deprecation"/>
            </interceptor-stack>
                 <default-interceptor-refname="defaultStack"/> //设置默认的拦截器栈
        <default-class-refclass="com.opensymphony.xwork2.ActionSupport" />
    </package>
</struts> 

struts-plugin.xml这个文件是struts2的插件,因为它的插件有很多,这里就不说了,

Struts.xml文件是程序员自己定义的,这里也不介绍了。

 

总结:

上面说了这么多,在这里总结一下,web服务器启动的时候,会加载web.xml的配置文件,然后加载struts2的过滤器,会初始化所有的资源文件,比较重要的资源文件有struts-default.xmlstruts-plugin.xml Struts.xml

这三个文件的内容请参考上面的讲解,需要注意的是:

1.三个xml文件的dtd一样,所有出现相同的内容会后者覆盖前者

2struts-plugin.xml文件肯定不止一个,所有的插件以jar包的形式放到工程中,肯定在根目录有多个struts-plugin.xml文件,这个文件里可以定义拦截器 bean…. 结果集

3、根据beanobjectfactory可以了解对象的产生方式所有的action拦截器结果集值栈都可以通过objectFactory产生,也可以通过objectFactory和静态注入改变Action拦截器结果集值栈的产生方式

4、在struts2的配置文件     两大类型的配置需要注意,

         一种类型 独立于包外的      像 bean  constant  include    另一种类型 在 package内的 像   action,interceptor,result等都是在package中的,可以利用extend机制继承实现复用





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Struts2启动流程大致包括以下几个步骤: 1. Web 容器加载配置文件:在 Web 容器如 Tomcat)启动时,它会 Struts2 的配置文件,其中包括 struts.xml 文件。 2. 创建 ServletContext 对象:Web 容器会创建一个 ServletContext 对象,用于保存整个 Web 应用的信息。 3. 初始化 Struts2 框架:Struts2 框架会在 ServletContext 对象创建后进行初始化。它会读取 struts.xml 配置文件,并根据配置信息创建必要的对象,如 Action 类、Interceptor 等。 4. 接收请求:当客户端发送请求时,Web 容器会根据 URL 映射规则将请求发送给 Struts2 的核心控制器——ActionServlet。 5. 拦截器链处理:ActionServlet 在接收到请求后,会通过拦截器链对请求进行处理。拦截器链是一系列拦截器的有序集合,每个拦截器可以在请求前后执行一些特定的操作。 6. 查找 Action:经过拦截器链的处理后,ActionServlet 会根据请求中的信息查找对应的 Action 类。 7. 执行 Action 方法:找到 Action 类后,Struts2 会调用相应的 Action 方法来处理请求。方法执行完成后,会返回一个结果字符串。 8. 结果处理:Action 方法执行完成后,Struts2 将根据方法的返回结果字符串查找对应的结果视图,并进行相应的处理。这可能包括渲染 JSP 页面、返回 JSON 数据等。 9. 响应客户端:最后,Struts2 将生成的响应结果返回给客户端,完成整个请求-响应过程。 以上是 Struts2 的简要启动流程,其中涉及到了配置文件的加载、对象初始化、拦截器链处理、Action 查找与执行等步骤。具体的细节会根据项目的配置和需求有所差异。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值