Struts基本概念
内容源自:
一.struts2体系结构:
1、Web浏览器请求一个资源。
2、过滤器Dispatcher查找方法,确定适当的Action。
3、拦截器自动对请求应用通用功能,如验证和文件上传操作。
4、Action的execute方法通常用来存储和重新获得信息。
5、结果被返回到浏览器。
二.Struts2的具体工作流程
(1) 客户端(Client)向Action发用一个请求(Request)
(2) 容器(Container)通过web.xml映射请求,并获得控制器(Controller)的名字
(3) 容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1以后调用StrutsPrepareAndExecuteFilter
(4) 控制器(Controller)通过ActionMapper获得Action的信息
(5) 控制器(Controller)调用ActionProxy
(6) ActionProxy读取struts.xml文件获取action和interceptor stack的信息。
(7) ActionProxy把request请求传递给ActionInvocation
(8) ActionInvocation依次调用action和interceptor
(9) 根据action的配置信息,产生result
(10) Result信息返回给ActionInvocation
(11) 产生一个HttpServletResponse响应
(12) 产生的响应行为发送给客服端。
三.配置文件:
1、struts.xml
struts.xml是Struts 2 的核心配置文件,主要用于配置开发人员编写的action。
(1)基本格式如下:
<?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>
<package name="test" extends="struts-default"/>
<action name="Login1" class="com.chen.LoginAction1" >
<result>/loginResult.jsp</result>
<result name="input">/login1.jsp</result>
</action>
</package>
</struts>
①通过反射机制将请求参数注入到"com.chen.LoginAction1"类中
②调用"com.chen.LoginAction1"类的execute方法,该方法的原型为:public String execute() throws Exception;
③ 根据execute方法返回的String类型的字符串(如"input"),在配置文件中查找该字符串对应的页面,并转到该页面。
(2)标签详解
<package>标签
如果要配置<Action>的标签,那么必须要先配置<package>标签,代表的包的概念。包含的属性:
name 包的名称,要求是唯一的,管理action配置。
extends 继承,可以继承其他的包,只要继承了,那么该包就包含了其他包的功能,一般都是继承struts-default
namespace 名称空间,一般与<action>标签中的name属性共同决定访问路径,常见的配置如下:
namespace="" -- 默认的名称空间(访问的方式和namespace="/"是一样的)
namespace="/" -- 根名称空间
namespace="/aaa" -- 带有名称的名称空间,这样请求action时,URL是/namespace/name的形式
abstract -- 抽象的。这个属性基本很少使用,值如果是true,那么编写的包是被继承的。
<action>标签
代表配置action类,包含的属性:
name 和<package>标签的namespace属性一起来决定访问路径的。
class 配置Action类的全类名(默认值是ActionSupport类)
method Action类中执行的方法,如果不指定,默认值是execute方法
<result>标签
action类中方法执行,返回的结果跳转的页面
name 结果页面逻辑视图名称
type 结果类型(默认值是转发,也可以设置其他的值)
注:
设置Struts2默认的Action:
在地址栏上输入一个不存在的action请求,程序会报404的异常。但是在<package>标签中通过<default-action-ref name="指定action标签name属性"></default-action-ref>来设置默认的Action。当在配置文件中找不到相应的action时,就由默认的action进行处理。
设置Action默认处理类:
在地址栏上输入一个正确的action请求,但是<action>标签中的class属性没有写具体的Action类也会报异常。在<package>标签中通过<default-class-ref class="指定action类的全路径"></default-class-ref>来设定action的默认处理类。
2、多个struts的配置文件的合并
为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。可以在使用<include>标签来引入其他的struts_xx.xml的配置文件。例如:
<struts>
<include file="conf/struts_user.xml"></include>
<include file="conf/struts_editer.xml"></include>
</struts>
这样可以把struts_user.xml和struts_user.xml各自编写,并放到一个文件目录下,使用时strus.xml直接包含这两个配置文件即可。需要注意的是struts_user.xml和struts_user.xml也必须按照strus的配置文件格式来写。
3、web.xml的配置
<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>
通过<url-pattern>/*</url-pattern>使得struts拦截所有URL请求。
Filter 过滤器是用户请求和处理程序之间的一层处理程序。它可以对用户请求和处理程序响应的类容进行处理,通常用于权限、编码转换等场合。
四。实现Action
1、把Action看作是POJO类
POJO(Plain Ordinary Java Object)简单的Java对象。简单来说,没有继承某个类,没有实现接口,就是POJO的类。我们直接写一个POJO类,把它当作struts2对应的一个Action类。这个类必须包含处理逻辑所需要的属性及相应的get、set方法,并且提供Struts2调用的execute方法。但通常不推荐这样做,这样不利于统一接口。
2、实现Action接口
Action接口中定义了5个常量,5个常量的值对应的是5个逻辑视图跳转页面(跳转的页面还是需要自己来配置),还定义了一个方法,execute方法,我们可以自己来实现。
常量值如下所示:
SUCCESS -- 成功.
INPUT -- 用于数据表单校验.如果校验失败,跳转INPUT视图.
LOGIN -- 登录.
ERROR -- 错误.
NONE -- 页面不转向.
3、继承ActionSupport类,而该类实现了Action 、Validateable 、 ValidationAware 、TextProvider、LocaleProvider,Serializable接口。我们只需要根据实际情况重写一些其中的方法就可以满足需求。
五。实例
链接:https://blog.csdn.net/xiaokang123456kao/article/details/58601826
Struts基本概念的更多相关文章
- Struts 基本概念,优点及不同版本之间的关系
strutx 1.x struts 是 apache 基金会的一个开源项目. struts 是一套实现 MVC的框架. MVC = 程序分层设计的思想 = Model(数据访问层1) / View(视 ...
- Struts 2 概念介绍
概念引入 Web层通常使用Servlet+jsp,现在使用Struts2来处理访问服务器请求 Service层 目前使用JavaBean Dao层目前使用Hibernate Spring是一个大的管家 ...
- struts理解
最近大家都在找工作,我好迷茫,觉得自己会的东西太少了.所以决定开始学习SSH三大框架. 首先是struts. struts是基于mvc模式的框架.(struts其实也是servlet封装,提高开发效率 ...
- 基于MVC模式的应用框架之struts
1.struts开发步骤 引入struts的jar包: 在web.xml中引入struts的核心功能,配置struts核心过滤器:(如果项目中用到了其他过滤器,要放在struts过滤器之前,否则会失效 ...
- (28)初识struts框架
案例剖析中介绍了一个自己写的mystruts框架,这里开始简单的认识struts框架. 1.先看一个简单的struts开发的例子来熟悉一下流程 Struts就是基于mvc模式的框架! (struts其 ...
- Struts框架之 执行流程 struts.xml 配置详细
1.执行流程 服务器启动: 1. 加载项目web.xml 2. 创建Struts核心过滤器对象, 执行filter → init() struts-default.xml, 核心功能的初 ...
- Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】
前言 我们现在学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的.Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,因此就拿着Stru ...
- Struts framework
Struts功能详解——ActionMapping对象 Struts旅程(一)Struts简介和原理 实例讲解DispatchAction和LookupDispatchAction DispatchA ...
- Struts2框架基础
Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...
随机推荐
- 转:GitHub 万星推荐成长技术清单
转:http://www.4hou.com/info/news/7061.html 最近两天,在reddit安全板块和Twitter上有个GitHub项目很火,叫“Awesome Hacking”. ...
- 转:攻击JavaWeb应用[6]-程序架构与代码审计
转:http://static.hx99.net/static/drops/tips-429.html 攻击JavaWeb应用[6]-程序架构与代码审计 园长 · 2013/08/12 16:53 注 ...
- Python函数式编程——map()、reduce()
文章来源:http://www.pythoner.com/46.html 提起map和reduce想必大家并不陌生,Google公司2003年提出了一个名为MapReduce的编程模型[1],用于处理 ...
- PAT 1123. Is It a Complete AVL Tree (30)
AVL树的插入,旋转. #include<map> #include<set> #include<ctime> #include<cmath> #inc ...
- 洛谷P3941入阵曲
题目传送门 这道题也是今年湖南集训队Day8的第一题,昨天洛谷的公开赛上又考了一遍,来发个记录(其实是因为五月天,另外两道题分别是将军令和星空,出这次题目的人肯定同为五迷(✪㉨✪)) 话不多说.先理解 ...
- Container With Most Water(LintCode)
Container With Most Water Given n non-negative integers a1, a2, ..., an, where each represents a poi ...
- 洛谷——P2722 总分 Score Inflation(背包)
P2722 总分 Score Inflation 题目背景 学生在我们USACO的竞赛中的得分越多我们越高兴. 我们试着设计我们的竞赛以便人们能尽可能的多得分,这需要你的帮助 题目描述 我们可以从几个 ...
- android 内存泄漏检测工具 LeakCanary 泄漏金丝雀
韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com 内存泄漏检测工具 android 内存泄漏检测工具 ======== 内存泄漏 就是 无用的对 ...
- [USACO 2018 Feb Gold] Tutorial
Link: USACO 2018 Feb Gold 传送门 A: $dp[i][j][k]$表示前$i$个中有$j$个0且末位为$k$的最优解 状态数$O(n^3)$ #include <bit ...
- HihoCoder - 1715 树的连通问题
题面在这里! 正式告别文化课回归的第一题QWQ,然鹅半个月之后还是要退役QWQWQWQWQ 好像很久之前就见过的一个题,当时只会打一打 O(N^2) 的暴力QWQ,正好今天又写了遍这个暴力用来对拍23 ...