struts2中struts.xml和web.xml文件解析及工作原理

转载 2015年11月17日 23:23:19

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Struts Blank</display-name>

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

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

</web-app>

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

<!-- consant 常量,struts.devMode表示开发者模式,当为true时如果改变了其中的一些代码,可以不用重新启动tomcat-->
<constant name="struts.devMode" value="true" />

<!--package可以有多个解决重名的情况, namespace 可以不写,默认是如何路径都可以,也可以写成/xx/yy ,必须是/开头-->
    <package name="default" namespace="/" extends="struts-default">

       <default-action-ref name="index" />

       <global-results>
           <result name="error">/error.jsp</result>
       </global-results>

       <global-exception-mappings>
           <exception-mapping exception="java.lang.Exception" result="error"/>
       </global-exception-mappings>

<!-- action里面那个name属性值得是URL输入的路径名 ,如“http://localhost:8080/Struts2Demo/hello”,则会根据result反馈Hello.jsp-->
       <action name="hello" class="com.styspace.struts2.action.action2">
           <result>
/Hello.jsp</result>
       </action>

<!-- action里面class属性值,会有对应的这个类,执行该类里面的execute()方法-->

       <action name="action" class="com.styspace.struts2.action.action2">
           <result name="success">
/Action.jsp</result>
       </action>

<!-- action里面method属性值,会有对应class这个类中的add方法,然后执行该方法-->

<action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add">
            <result>/user_add_success.jsp</result>
        </action>

<!-- 一般action里面不用method属性值,而是用DMI(动态方法调用)可以通过http://localhost:8080/Struts2Demo/user!addURL调用,其中user指的是action中的name值-->
        
        <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
            <result>/user_add_success.jsp</result>
        </action>

<!-- 更简单的方法,通配符,name=“student*”会匹配URL中所有Studentxx,而method=“{1}”指的是name中第一个“*”匹配的值 同理,result中{1}也是一样的-->

        <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">

            <result>/Student{1}_success.jsp</result>
        </action>
<!-- 甚至可以有多个通配符,class属性中也可以用{1}来匹配,最简化-->
        <action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">
            <result>/{1}_{2}_success.jsp</result>
            <!-- {0}_success.jsp -->
        </action>


    </package>
    <!-- Add packages here -->

</struts>


工作原理:

1、在浏览器中输入http://localhost:8080/Struts2Demo/hello,就会向服务器端(tomcat)发送一个请求
2、tomcat会解析URL,从中找到一个webApplication(可理解为即项目名)为Struts2Demo,然后就会在这个项目里面找到web.xml文件
3、在web.xml中找到filter标签,然后在filter中定义的filter-class处理URL中的hello(这其中其实还包含一个步骤,就是web.xml中<url-pattern>/*</url-pattern>会过滤掉所有地址,这样地址才会被filter-class中定义的类接收到)
4、StrutsPrepareAndExecuteFilter接收到地址之后,首先查询namespace(在struts.xml中的package标签中的namespace中得到它的值),然后将URL中namespace值(这里是/)后面的路径读取到(这里是hello)
5、继续在struts的action标签中查找是否有hello这个值的,如果有且发现action中有class属性,则会new一个class中声明的类,执行里面的一个execute()方法,该方法返回一个String字符串,返回该字符串之后才能得到result中的值,如果action中没有class属性,则默认有一个ActionSupport类,该类中也有一个execute方法,返回一个String值
6、上一步中讲到execute()方法,但是不一定非要执行execute()方法,当action标签中有method属性时,就会执行该属性定义的方法名称,然后同样会返回一个String字符串
7、根据返回的String字符串(success),在result中找到name属性值为返回的String字符串的标签(这里就是Action.jsp),如果没有找到,则会返回error页面;如果action中没有class则直接找到该action下面的result中的值(这里是/Hello.jsp),然后将请求forword到Action.jsp/Hello.jsp
8、最后jsp反馈到客户端。

Struts2 XML配置详解

1.    深入Struts2的配置文件本部分主要介绍struts.xml的常用配置。1.1.    包配置:Struts2...
  • zz_mm
  • zz_mm
  • 2010年04月08日 01:43
  • 177245

[Struts2] 配置文件struts.xml和web.xml详解

配置文件struts.xml和web.xml。 其实要s
  • gopain
  • gopain
  • 2014年11月04日 21:31
  • 16485

关于struts2.5.10Tomcat启动失败的问题

发布struts2.5后,Tomcat启动失败(Server Tomcat v7.0 Server at localhost failed to start),并且导致以前所有的项目都启动不了,弄了一...

JBOSS的下载安装、环境变量配置以及部署

最近学习java学习了一下JBOSS,这篇文章记录了一下自己安装jboss的过程。 JBoss是纯Java的EJB(企业JavaBean)服务器。 1. 下载安装 http://jbossas.j...

struts2中struts.xml和web.xml文件解析及工作原理

web.xml     Struts Blank             struts2         org.apache.struts2.dispatcher.ng.f...
  • stypace
  • stypace
  • 2014年06月14日 21:20
  • 1061

struts2配置web.xml文件

Struts 2的基本配置 前面大致了解了Struts 2框架的基本内容,但这些基本内容都必须建立在Struts 2的配置文件基础之上,这些配置文件的配置信息也是Struts 2应用的核心部分。 ...

解决Struts2中的XML文件没有提示的问题

刚接触Struts时,你可能会遇到这样的问题,在写XML配置文件的时候,输入尖括号" "-//Apache Software Foundation//DTD Struts Configuratio...

struts2 xml文件配置

方便自己在工作时查阅下,所以这样喽: 1. struts2依赖jar(最基本)文件:    commons-logging-*.jar    ognl-*.jar    struts2-core-*....

struts2输入验证--验证框架(xml文件验证)

struts2验证框架分为字段(field校验--面向字段、字段优先)校验器和非字段(validator--校验面向validator、validator优先)校验器. 通过验证框架验证,只需要...

Struts2.xml文件中的常量、全局错误的配置及相关动态方法的调用

问题!Struts2.xml文件中的常量有哪些,Struts2的处理过程,如何自动更新配置文件、全局错误的配置及相关动态方法的调用和方式,表单请求参数数据通过拦截器如何到实体类 1.Struts2的...
  • Mr_li13
  • Mr_li13
  • 2015年10月25日 19:16
  • 1130
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts2中struts.xml和web.xml文件解析及工作原理
举报原因:
原因补充:

(最多只允许输入30个字)