Struts基本概念

Posted Shaw_喆宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts基本概念相关的知识,希望对你有一定的参考价值。

 内容源自:

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基本概念的主要内容,如果未能解决你的问题,请参考以下文章

ssh框架构建项目详解--基本概念和struts2

Struts2 的开发应用

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

Struts2框架概述

SSH进阶之路Struts基本原理 + 实现简单登录

Flask模板宏的概念和基本使用