还是先看一个图:
这是
struts2
的结构图,我们可以看到,
HttpServletRequest
请求到达后首先经过
ActionMapper
,然后经过
FilterDispatcher
,如果还有其他的
Filter
,一次经过,最后到达一个叫
ActionProxy
的地方,这个时候通过
ConfigurationManager
读取配置文件
struts.xml,
然后到达
ActionInvocation
,开始经过一个个的
Interceptor
,最后达到
Action
进行处理后返回结果。
初次咋看过程还挺复杂的,其实学习到一定程度之后感觉其实挺简单的,毕竟底层的很多细节我们不必关心,我们关心的只是请求达到我我们要接到请求进行处理,然后返回结果。
Struts2
详解
入门实例:
知道这些后,我们就可以开始来编写第一个
struts2
了。
开发
struts2
应用程序的步骤:
1,
建立工程,导入
struts2
的包
2,
编写
JSP
页面
3,
编写
Action
4,
编写
struts.xml
配置文件
5,
编写
web.xml
文件
下面是一个入门实例(实例一):
注:本教程所有实例原码都已上传到
CSDN
,需要的朋友可以去下载:
原码下载地址:
1,
建立工程,导入包:
导入
struts2
需要的包:复制到项目的
WebRoot/WEB_INF/lib
目录下
2,
编写
JSP
页面。
index.jsp
:
<
body
>
<
form
action
=
"userAction"
>
用户名:
<
input
type
=
"text"
name
=
"username"
/>
<
input
type
=
"submit"
value
=
"
提交
"
/>
</
form
>
</
body
>
result.jsp:
<
body
>
你的用户名:
${requestScope.username}
</
body
>
3,
编写
Action
(
UserAction
)
package
com.gufengxiachen.struts2_1.action;
import
com.opensymphony.xwork2.ActionSupport;
public
class
UserAction
extends
ActionSupport{
private
String
username
;
public
String getUsername() {
return
username
;
}
public
void
setUsername(String username) {
this
.
username
= username;
}
@Override
public
String execute()
throws
Exception {
return
“success”
;
}
}
4,
编写
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
>
<
package
name
=
"struts2_1"
extends
=
"struts-default"
>
<
action
name
=
"userAction"
class
=
"com.gufengxiachen.struts2_1.action.UserAction"
>
<
result
name
=
"success"
>
/result.jsp
</
result
>
</
action
>
</
package
>
</
struts
>
5,
编写
web.xml
文件:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
web-app
version
=
"2.5"
xmlns
=
"http://java.sun.com/xml/ns/javaee"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
=
"http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
>
<
welcome-file-list
>
<
welcome-file
>
index.jsp
</
welcome-file
>
</
welcome-file-list
>
<
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
>
</
web-app
>
至此,第一个
struts2
项目已完成,可以部署运行了,当然这个项目非常简单,是一个入门级的项目,但任何大的项目都是从它身上扩展的,所以说弄清楚它的原理是非常重要的。
下面我们来分析这个项目的运行过程。
首先,用户在
index.jsp
页面填写用户名后提交表单,表单提交到什么地方呢?看到
<form
action=”userAction”>
,就知道表单提交到
userAction.action
.action
可以省略,
struts2
默认会加上后缀
.action
。在哪找到这个
Action
呢?它回去
web.xml
文件中找相关的配置,结果发现有个过滤器
StrutsPrepareAndExecuteFilter(
这个过滤器是
struts2
的过滤器,必须加上,不然就不是一个
struts2
项目,它的作用就是将请求交给
struts2
处理
)
,然后经过一系列的处理(这里处理的内容很多,后面会详细介绍)最后在
struts.xml
文件中找到了
Action
的配置,接着将请求交给
UserAction
来处理,我们可以看到
UserAction
继承了
ActionSupport
类,实现了
execute
方法,该方法必须返回一个字符串,在这个方法中我们出来的很简单,就单单返回了一个字符串
”success”
,还应该注意到这个
Action
有个属性
username
,并提供了
get/set
方法,我们好像根本没有看到从页面取参数的方法,哪它是如何取到参数的呢,正是这个
username
属性和它的
get/set
方法的用处,这里有一点要注意,
setXXX
方法后的
XXX
必须和参数名相同除了第一个字母大写。这样才能取到参数。
execute
方法是
Action
的处理方法,当我们返回一个
success
字符串时,它就会去
struts.xml
文件相应的
Action
配置中寻找
name
为
success
的
result
标签,找到后返回它所指示的页面,本例中即
result.jsp
。在
result.jsp
中我们只是通过
EL
表达式取到返回的值。
上面即是这个实例的大致(
struts2
内部还有很多处理)处理过程,是不是感觉也不是很难呢?
我们来总结一下
struts2
的大致处理过程:
页面
form
表单数据提交到一个
action
:
struts2
的过滤(
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
)拦截请求,查找
struts.xml
文件里的
action
元素,
action
元素的
name
属性值和
form
表单提交的
action
对应,则实例化
action
元素的
class
属性值对应的类,并且将
form
表单提交的值通过
setXxx
()方法设置到
class
类属性。
之后调用
action
类的
execute
方法,该方法必须返回一个字符串!根据返回的字符串在
action
元素的子元素
result
的
name
属性
name
对应的值,如果匹配,则返回
result
元素值所指定的页面。
通常
每个
action
类都要
com.opensynphony.xwork2.ActionSupport
类
分享到:
相关推荐
基于springboot教育资源共享平台源码数据库文档.zip
linux开发篇,配套视频:https://www.bilibili.com/list/474327672?sid=4493702&spm_id_from=333.999.0.0&desc=1
ReadEra 这个阅读应用能够打开下列任何格式的文档: EPUB, PDF, DOC, RTF, TXT, DJVU, FB2, MOBI, 和 CHM. 基本上来说,你可以用它阅读你的设备内存中的任何书籍或者文本文档。 这个应用与划分成章节的文档兼。,有一个书签功能,可以在你阅读的时候,自动保存你的进度。另外,它让你更改页面模式,从几种不同的主题中进行挑选(夜间,白天,棕黑色调,还有控制台)。
软件环境:KEIL4 硬件环境:STM32单片机+舵机 控制原理:通过控制输出信号的占空比调节舵机旋转的角度
基于springboot仓库管理系统源码数据库文档.zip
酒店管理系统源码C++实现的毕业设计项目源码.zip,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 酒店管理系统源码C++实现的毕业设计项目源码.zip,酒店管理系统源码C++实现的毕业设计项目源码.zip个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。酒店管理系统源码C++实现的毕业设计项目源码.zip酒店管理系统源码C++实现的毕业设计项目源码.zip酒店管理系统源码C++实现的毕业设计项目源码.zip,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。酒店管理系统源码C++实现的毕业设计项目源码.zip,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕
58商铺全新UI试客试用平台网站源码
springboot vue3前后端分离 基于SpringBoot+Vue的轻量级定时任务管理系统.zip
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
4D毫米波雷达点云数据处理方法研究.caj
S M 2 2 5 8 X T 量产工具供大家下载使用
基于springboot的文物管理系统源码数据库文档.zip
基于springboot的电影院售票管理系统源码数据库文档.zip
基于Java web 实现的仓库管理系统源码,适用于初学者了解Java web的开发过程以及仓库管理系统的实现。
美容美发项目,使用django框架,前后端一体化项目
在线票务:2023年中国在线票务行业市场规模约为24.99亿元,挖掘市场蓝海新机遇 在数字浪潮的席卷下,传统的票务销售模式正经历着前所未有的变革。纸质门票逐渐淡出人们的视野,取而代之的是便捷、高效的数字和移动票务。这一转变不仅为消费者带来了前所未有的购票体验,更为在线票务平台开辟了广阔的发展空间和市场机遇。随着国民经济的持续增长和文体娱乐行业的蓬勃发展,中国在线票务行业正站在时代的风口浪尖,等待着每一位有志之士的加入。那么,这片蓝海市场究竟蕴藏着怎样的潜力?又该如何把握机遇,实现突破?让我们一同探索。 市场概况: 近年来,中国在线票务行业市场规模持续扩大,展现出强劲的增长势头。据QYResearch数据显示,2023年中国在线票务行业市场规模约为24.99亿元,尽管受到宏观经济的影响,市场规模增速放缓,但整体趋势依然向好。这一增长主要得益于国民人均收入的不断提高、电影及演出行业的快速发展以及政府政策的支持。例如,2023年财政部、国家电影局发布的《关于阶段性免征国家电影事业发展专项资金政策的公告》,为电影行业注入了强劲动力,进而推动了在线票务市场规模的扩大。 技术创新与趋势: 技术进步
基于SpringBoot的养老院管理系统源码数据库文档.zip
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
内容概要:本文档是一份详细的Go语言教程,从基础概念介绍到高级主题均有覆盖。主要内容包括Go语言的基础语法、数据类型、控制结构、函数、结构体、接口和并发编程等方面。通过具体示例介绍了如何使用Go语言进行开发。 适合人群:初学者和有一定经验的程序员都可以从这篇教程中受益,特别是那些想要快速掌握Go语言并应用于实际项目的开发者。 使用场景及目标:适用于初学者系统学习Go语言的基础知识和常用功能;也可以作为已有开发经验者的参考资料,帮助他们解决具体的编程问题,提高开发效率。 其他说明:本教程不仅包含了Go语言的基本知识点,还重点讲解了其独特的并发编程模型。读者在学习过程中应该注重理论与实践相结合,通过实际编写代码来加深理解和记忆。
基于springboot计算机基础网上考试系统源码数据库文档.zip