文档章节

Struts2---->运行机制

小强斋太
 小强斋太
发布于 2016/11/09 20:05
字数 719
阅读 2
收藏 0
点赞 0
评论 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里面就是要做以上事情。

 

© 著作权归作者所有

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
阿里面试归

classloader是啥,运行机制 session和cookiee的区别,再一次被问起 使用的什么部署工具,怎么部署 数据库 索引怎么建立,有什么优点 因为简历里有spring和struts2,问了怎么依赖注入,很详细...

加州板栗 ⋅ 2011/06/14 ⋅ 3

struts2中 welcome-file-list 设置的路径不能是Action地址

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

cheese ⋅ 2012/08/20 ⋅ 2

从一个简单的实例看struts2运行原理

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

chape ⋅ 2013/06/08 ⋅ 0

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

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

长平狐 ⋅ 2012/11/12 ⋅ 0

目录 CONTENTs

第一章 java语言概述 1.1 java语言的发展简史 1.2 java的竞争对手及各自优势 1.2.1 C#简介和优势 1.2.2 Ruby简介和优势 1.2.3 Python简介和优势 1.3 java程序运行机制 1.3.1 高级语言的运行机...

Gooiem ⋅ 2015/08/12 ⋅ 0

Struts2常量的配置

struts.xml配置文件最大的作用就是配置Action和请求之间的对应关系,并配置逻辑视图名和物理视图资源之间的对应关系。除此之外,struts.xml文件还有一些额外的功能,例如Bean配置、配置常量、...

摆渡者 ⋅ 2014/03/02 ⋅ 0

Struts2体系结构

.Struts2体系结构 Struts2的体系与Struts1体系的差别非常大,因为Struts2使用了WebWork的设计核心,而不是Struts1的设计核心。Struts2中大量使用拦截器来处理用户的请求,从而允许用户的业务...

风一样 ⋅ 2011/08/06 ⋅ 0

MapReduce和Yarn的运行机制详解

今天先简要介绍一下Hadoop中另外两个关键的组成部分:MapReduce和Yarn的运行机制。 首先普及一下概念: HDFS:负责海量数据的存储 MapReduce:负责海量数据的分析和计算 Yarn:负责资源管理调...

LeeWanzhi的博客 ⋅ 2017/12/20 ⋅ 0

SSH框架之struts2专题1:Struts2入门

1 Struts2入门 1.1 Struts2简介 Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。 1.2 Struts2下载与版本 Stru...

极客微信条 ⋅ 01/02 ⋅ 0

用eclipse搭建struts2,运行tomcat9报错...求大神指点..我在MyEclipse上运行是没问题的,在下新手,不知道是少了jar包还是什么问题

信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in t......

编号404 ⋅ 2017/07/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 37分钟前 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 55分钟前 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部