文档章节

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

architect刘源源
 architect刘源源
发布于 01/29 19:22
字数 1057
阅读 22
收藏 0

web.xml

 

1 <?xml version="1.0" encoding="UTF-8"?>
 2 <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">
 3 
 4     <display-name>Struts Blank</display-name>
 5 
 6     <filter>
 7         <filter-name>struts2</filter-name>
 8         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 9     </filter>
10 
11     <filter-mapping>
12         <filter-name>struts2</filter-name>
13         <url-pattern>/*</url-pattern>
14     </filter-mapping>
15 
16     <welcome-file-list>
17         <welcome-file>index.html</welcome-file>
18     </welcome-file-list>
19 
20 </web-app>

 

 

struts.xml

复制代码

1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4 "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 
 6 <struts>
 7 
 8 <!-- consant 常量,struts.devMode表示开发者模式,当为true时如果改变了其中的一些代码,可以不用重新启动tomcat-->
 9 <constant name="struts.devMode" value="true" />
10 
11 <!--package可以有多个解决重名的情况, namespace 可以不写,默认是如何路径都可以,也可以写成/xx/yy ,必须是/开头-->
12     <package name="default" namespace="/" extends="struts-default">
13 
14        <default-action-ref name="index" />
15 
16        <global-results>
17            <result name="error">/error.jsp</result>
18        </global-results>
19 
20        <global-exception-mappings>
21            <exception-mapping exception="java.lang.Exception" result="error"/>
22        </global-exception-mappings>
23 
24 <!-- action里面那个name属性值得是URL输入的路径名 ,如“http://localhost:8080/Struts2Demo/hello”,则会根据result反馈Hello.jsp-->
25        <action name="hello" class="com.styspace.struts2.action.action2">
26            <result>  /Hello.jsp</result>
27        </action>
28 
29 <!-- action里面class属性值,会有对应的这个类,执行该类里面的execute()方法-->
30 
31        <action name="action" class="com.styspace.struts2.action.action2">
32            <result name="success">/Action.jsp</result>
33        </action>
34 
35 <!-- action里面method属性值,会有对应class这个类中的add方法,然后执行该方法-->
36 
37 <action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add">
38             <result>/user_add_success.jsp</result>
39         </action>
40 
41 <!-- 一般action里面不用method属性值,而是用DMI(动态方法调用)可以通过http://localhost:8080/Struts2Demo/user!addURL调用,其中user指的是action中的name值-->
42         
43         <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
44             <result>/user_add_success.jsp</result>
45         </action>
46 
47 <!-- 更简单的方法,通配符,name=“student*”会匹配URL中所有Studentxx,而method=“{1}”指的是name中第一个“*”匹配的值 同理,result中{1}也是一样的-->
48 
49 
50         <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">
51 
52             <result>/Student{1}_success.jsp</result>
53         </action>
54 <!-- 甚至可以有多个通配符,class属性中也可以用{1}来匹配,最简化-->
55         <action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">
56             <result>/{1}_{2}_success.jsp</result>
57             <!-- {0}_success.jsp -->
58         </action>
59 
60 
61     </package>
62     <!-- Add packages here -->
63 
64 </struts>
65 
66

 

 

工作原理:

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反馈到客户端。

 

© 著作权归作者所有

architect刘源源

architect刘源源

粉丝 167
博文 555
码字总数 935372
作品 0
浦东
程序员
私信 提问
04 Struts2 Hello Word

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/81627250 本教程使用的Struts2版本是struts-2.5.16 希望读者保存一致 任何的 Struts...

降龙十八腿
2018/08/13
0
0
struts2访问不了WEB-INF/目录下的jsp文件

环境:struts-2.3.14+apache-tomcat-6.0.18 struts2里无法访问WEB-INF/目录下的jsp,有人说客户端不能访问WEB-INF/目录下的资源,可是我在服务器端也访问不了,是什么原因... 初学struts2求解...

wangbiglei
2013/05/19
6.7K
7
servlet/filter/listener/interceptor区别与联系

由于最近两个月工作比较清闲,个人也比较“上进”,利用工作空余时间,也继续学习了一下,某天突然想起struts2和struts1的区别的时候,发现 为什么struts1要用servlet,而struts2要用filter呢...

lzw_me
2014/08/04
114
0
servlet/filter/listener/interceptor区别与联系

原文地址:http://blog.csdn.net/sundenskyqq/article/details/8549932 由于最近两个月工作比较清闲,个人也比较“上进”,利用工作空余时间,也继续学习了一下,某天突然想起struts2和strut...

随智阔
2014/04/02
35
0
在Eclipse中配置Struts2

下面介绍在Eclipse中配置Struts2的过程: 一、下载Struts2,因为Struts2是开源的,百度或者google一下就可以找到下载地址。我下载的是struts-2.3.1.2版本 的,解压之后入下图: apps目录:S...

南風
2014/08/21
306
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
13
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
12
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
12
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部