文档章节

Struts2---->运行机制

小强斋太
 小强斋太
发布于 2016/11/09 20:05
字数 719
阅读 2
收藏 0

Struts的作用:把请求跟视图分开(请求跟展现分开,请求跟最后的结果分开)。

一、HelloWorld的执行过程

1、输入url地址:http://localhost:8080/Struts2_HelloWorld/hello 这个url地址的请求,会通过http协议发送到服务器,

2、服务器收到请求之后,会先看请求的是哪个web application,是Struts2_HelloWorld这个web application,所以就把这个web application交给对应的程序处理,既然是这个web application,当然要读这个web application里面的web.xml文件来看它是怎么配的,这时候发现了filter,

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


这个filter会过滤所有的url地址,因为写成/*了,所以url里面的hello,这个地址就会被org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter接收到。

3、过滤器会调用doFilter(),在doFilter()内部会参考struts.xml文件。

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

<struts>

 <constant name="struts.devMode" value="true" />
	<package name="default" namespace="/" extends="struts-default">
	
		<action name="hello">
			<result>
				/index.jsp
            </result>
		</action>
	</package>
</struts>

a、首先看NameSpace,其中NameSpace是和访问路径一一对应的,它会到struts.xml中去查,查到有一个NameSpace叫"/",然后就会在此NameSpace下去查

b、查到相应的Action的名字, 在url地址里,/后面的是hello,在struts.xml里,namespace="/"里面有个action叫hello,

c、根据该action的class(可以没有,如果action没有配置class属性,这默认ActionSupport中的execute方法返回了”success“。)和method(如果没指定,就默认为execute方法),找到要执行的方法,根据该方法返回的字符串,找到对应的result,本例找到Hello.jsp了,就把Hello.jsp的结果返回。如果result没有配置name属性,则就默认返回"success"时匹配。

二、Struts2框架处理请求的步骤

 

Struts2官方站点的Struts 2 的整体结构
一个请求在Struts2框架中的处理大概分为以下几个步骤:
1)  客户端初始化一个指向Servlet容器(例如Tomcat)的请求。
2)  这个请求经过一系列的过滤器(Filter)。
3)  接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action。
4)  如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。
5)  ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类。
6)  ActionProxy创建一个ActionInvocation的实例。
7)  ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器Intercepter的调用。
8)  一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
Struts2的核心就是拦截器。Struts.xml中所有的package都要extends="struts-default"。同理与所有的Java类都要extends自Object一样。struts-default.xml里面就是要做以上事情。

 

本文转载自:http://www.cnblogs.com/xqzt/archive/2012/05/18/5637308.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
私信 提问
struts2中 welcome-file-list 设置的路径不能是Action地址

<welcome-file-list>中配置Struts2 的action是不能被访问的,但是Struts1的行原理在于: 在tomcat中配置的 <welcom-file> 是基于servlet 的struts2 的运行机制却是filter。 解决办法,设置i...

cheese
2012/08/20
0
2
从一个简单的实例看struts2运行原理

1.1 简单例子 先做一个最简单的struts2的例子:在浏览器中请求一个action,然后返回一个字符串到jsp页面上显示出来。 第一步:把struts2最低配置的jar包加入的项目中。 commons-logging-1.0....

chape
2013/06/08
0
0
Java程序员从笨鸟到菜鸟之(六十六)细谈struts2(十二)struts2国际化底层大揭秘

Struts2的博客在前不久已经停止了,但是里面还有很多内容我们都还没接触到,所以现在我们在补充一下struts2的内容。这篇博客我们主要是一块来看一下struts2内对国际化的支持。在了解struts2...

长平狐
2012/11/12
95
0
shader高级着色语言视频教程

课程目标:让学员能够熟悉shader的运行机制,能够编写shader程序。 适合人群:有一定C++或C#程序和unity3D基础 课程通过多个实例讲解unity3d shader如何工作,让学员能够熟悉shader的运行机制...

星辰8209
07/26
0
0
Spring集成 Struts2

Spring如何整合struts2? 1) 整合目标? 使IOC容器来管理Struts2的Action! 2) 如何进行整合? ① 正常加入Struts2 ② 在Spring的IOC容器中配置Struts2的Action 特别注意:在IOC容器中配置S...

哎小艾
2017/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里云ACM:云原生配置管理利器

摘要: 在传统架构中,如果配置信息有变更,通常是登陆服务器手动修改配置来使配置生效。在微服务架构中,应用数和节点数由于微服务化数量激增,导致发布次数增加,配置变更难度加大,通常是...

阿里云官方博客
8分钟前
1
0
js 对象合并

var o1 = { a: 1 };var o2 = { b: 2 };var o3 = { c: 3 };var obj = Object.assign(o1, o2, o3);console.log(obj); // { a: 1, b: 2, c: 3 }console.log(o1); // { a: 1, b: 2, c: 3 ......

zdglf
8分钟前
0
0
iframe引入方法

在js里定义: $(function () { $(".frameHead").load("../common/header.html"); $(".frameFoot").load("../common/footer.html"); }) 在需要导入iframe的页面添加标签<div class="frameHead......

kitty1116
8分钟前
0
0
华尔街留下的指标之王(附代码展示)

一. 写在前面的话 有人认为价格围绕价值上下波动,研究投资标的内在价值,于是就出现了基本面派; 有人为价格反映了一切,所有的信息(包括基本面)都反映到了盘面价格中,于是就有了技术面派...

酒逢知己千杯少
11分钟前
0
0
基于算法的建模--小结

中国龙-扬科
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部