转自:https://www.cnblogs.com/printN/p/6434526.html

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中struts.xml和web.xml文件解析及工作原理相关推荐

  1. 一图看懂hadoop分布式文件存储系统HDFS工作原理

    一图看懂hadoop分布式文件存储系统HDFS工作原理 转载于:https://www.cnblogs.com/AlexQY/p/9856477.html

  2. 修改SDE中自动生成的web.xml文件

    SDE中的web.xml文件是自动生成,所以,不能直接修改,只能修改SDE的模版文件.<?xml:namespace prefix = o ns = "urn:schemas-micr ...

  3. 最全三大框架整合(使用映射)——struts.xml和web.xml配置

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "- ...

  4. 详解struts2中struts.properties

    http://www.java3z.com/cwbwebhome/article/article2/2923.html?id=1613 Struts 2框架有两个核心配置文件: struts.xml和 ...

  5. JNDI的XML相关配置(context.xml和web.xml)

    1. 在tomcat目录下conf/context.xml文件中 加入一下代码  <Resource name="jdbc/sqlconnpool"       auth=& ...

  6. struts2中struts:iterator标签的使用

    参考: 1):struts2 标签的使用之二 s:iterator     http://blog.csdn.net/chinajust/article/details/3922760 2)Strut ...

  7. mysql中主从复制包括什么意思_Mysql主从复制作用和工作原理

    一.什么是主从复制 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库.在最常用的mysql数据库中,支持单项.异步赋值.在赋值过程中,一个服务器充 ...

  8. 简述实时音视频聊天中端到端加密(E2EE)的工作原理

    前言 本文着重阐述端到端加密(E2EE),端到端加密是确保数据传输安全的可行方法之一.读完这篇文章,你可以了解这种加密方式的基本原理. 说到互联网的数据安全,一般用户可能认为,像端到端加密这类问题事不 ...

  9. 普中51控制火焰传感器_汽车爆震传感器的工作原理及的检测方法、处理

    汽车爆震传感器的工作原理及的检测方法.处理 黄永刚 1 爆震传感器的工作原理 按照结构的不同,可以将汽车爆震传感器分为压电式非共振型爆震传感器.压电式共振型爆震传感器和压电式火花塞座金属垫型爆震传感器 ...

最新文章

  1. 将人工智能模型压缩到微控制器中
  2. linux给所有主机发送公钥,发送公钥到多台远程主机
  3. 通过SEH 非inline hook
  4. JVM调优总结(五)-调优方法(转载)
  5. 设计模式 -- (14)中介者模式
  6. 【转载】eclipse常用插件在线安装地址或下载地址
  7. 立体视觉(Stereo Vision)-本征矩阵(essential matrix)和基本矩阵(fundamental matrix)
  8. linux+kill+进程和线程,在LINUX系统中 关于进程和线程终止的问题
  9. 【数据结构与算法】链式队列的Java实现
  10. 山寨一个ini文件的解析器
  11. 多语言 获取当前语言
  12. OpenStack Trove2
  13. python中os模块的常用
  14. 《电动自行车充电领域的液体冷却技术研究》论文笔记
  15. word可以画神经网络图吗,如何画神经网络结构图
  16. 浅析3D音效的技术和发展
  17. C#中新建用户控件示例
  18. 图像调优2:什么是10° D65 和 2° D65
  19. 【知识分享】带你认识注册表
  20. Centos7 防火墙管理

热门文章

  1. 人工智能不是单纯的经验和总结
  2. 机器学习狗太苦逼了!自动化调参哪家强?
  3. 大脑活动与认知: 热力学与信息论的联系
  4. 利用基于GPU的AI模拟一个现实宇宙 仅需36分钟
  5. 有关博弈人机混合智能的再思考
  6. 物联网激荡MEMS传感器浪潮
  7. 卫星发现一个重要信号:路上货车跑起来
  8. 28篇标志性论文见证「自然语言处理NLP」2019-2020年度亮点进展
  9. 八张图看懂上海人工智能产业发展现状
  10. 垃圾要分类!我们的大脑如何处理垃圾呢?