内容源自:

Struts2基本概念

一.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基本概念的更多相关文章

  1. Struts 基本概念,优点及不同版本之间的关系

    strutx 1.x struts 是 apache 基金会的一个开源项目. struts 是一套实现 MVC的框架. MVC = 程序分层设计的思想 = Model(数据访问层1) / View(视 ...

  2. Struts 2 概念介绍

    概念引入 Web层通常使用Servlet+jsp,现在使用Struts2来处理访问服务器请求 Service层 目前使用JavaBean Dao层目前使用Hibernate Spring是一个大的管家 ...

  3. struts理解

    最近大家都在找工作,我好迷茫,觉得自己会的东西太少了.所以决定开始学习SSH三大框架. 首先是struts. struts是基于mvc模式的框架.(struts其实也是servlet封装,提高开发效率 ...

  4. 基于MVC模式的应用框架之struts

    1.struts开发步骤 引入struts的jar包: 在web.xml中引入struts的核心功能,配置struts核心过滤器:(如果项目中用到了其他过滤器,要放在struts过滤器之前,否则会失效 ...

  5. (28)初识struts框架

    案例剖析中介绍了一个自己写的mystruts框架,这里开始简单的认识struts框架. 1.先看一个简单的struts开发的例子来熟悉一下流程 Struts就是基于mvc模式的框架! (struts其 ...

  6. Struts框架之 执行流程 struts.xml 配置详细

    1.执行流程 服务器启动: 1. 加载项目web.xml 2. 创建Struts核心过滤器对象, 执行filter  →  init()   struts-default.xml,    核心功能的初 ...

  7. Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】

    前言 我们现在学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的.Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,因此就拿着Stru ...

  8. Struts framework

    Struts功能详解——ActionMapping对象 Struts旅程(一)Struts简介和原理 实例讲解DispatchAction和LookupDispatchAction DispatchA ...

  9. Struts2框架基础

    Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...

随机推荐

  1. python中文ocr方案-pytesseract

    pytesseract是google维护的具有学习功能的OCR引擎,3.0以后支持中文识别. 安装: 1. 安装tesseract-ocr组件:记得同步下载简体中文与英文语言包. 2. 安装PIL,需 ...

  2. oracle导入DMP步骤

    oracle导入DMP步骤如下:1.已经存在的数据库需要进行以下的操作,如果不存在,可略过:    删除用户     drop user SUDMDB cascade;     删除表空间和数据文件 ...

  3. 【剑指offer】面试题 55. 二叉树的深度

    面试题 55. 二叉树的深度 题目一:二叉树的深度 题目描述:输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. Java 实现 ...

  4. 将字符串顺序重新排序DOM节点

    对于一个已有的HTML结构: Haskell JavaScript Python Ruby Scheme <!-- HTML结构 --> <ol id="test-list ...

  5. thinkphp join 表前缀

    public function get_user_group_title($uid){ $pre = C('DB_PREFIX'); $res = M('AuthGroupAccess aga')-& ...

  6. 拜拜了,GOPATH君!新版本Golang的包管理入门教程

    Go 1.11和1.12实现了对包管理的初步支持,Go的新依赖管理系统使依赖版本信息明确且易于管理.Using Go Modules - The Go Blog 新的包管理模式有什么不同? 作为Go语 ...

  7. VMware Workstation的三种网络连接方式

    桥接模式(Bridged).NAT模式(地址转换模式).仅主机模式(Host-Only) 桥接模式就是将主机网卡与虚拟机的网卡利用虚拟网桥进行通信.在桥接的作用下,类似于把物理主机虚拟为一个交换机,所 ...

  8. CSS页面排版的一点笔记

    CSS页面排版 字体族 字体族的值是一个字体备选列表,多个字体使用英文逗号隔开,字体名称如果有空格则需要引号. font-family: "Georgia Pro", " ...

  9. 【BZOJ 4025】 (CDQ?还是整体二分?+并查集及它的恢复操作)

    4025: 二分图 Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考 ...

  10. Topcoder Srm 673 Div2 1000 BearPermutations2

    \(>Topcoder \space Srm \space 673 \space Div2 \space 1000 \space BearPermutations2<\) 题目大意 : 对 ...