SSH框架

1.


2.Struts2

2.1 Introduction

2.1.1 历史背景

Apache  旗下

Struts1 – apache 自己搞的  大部分废弃了。

Xwork  mvc框架 非常好用

Struts2- 整合xworkmvc框架


2.1.2 好处

• Strust2 核心功能:

• 允许POJOPlain Old Java Objects)对象 作为Action

• Actionexecute 方法不再与Servlet API耦合,更易测试

• 基于Spring AOP思想的拦截器机制,更易扩展

• 更强大、更易用输入校验功能 

• 等等 

2.1.3缺点

安全性 有待提高。


2.2 入门案例

访问一个url通过struts2框架去处理请求,给到一个动作方法,login

并返回结果视图。Ok.jsp

2.2.1 jar包介绍

SSH框架

SSH框架

2.2.2 代码

• Step1  web.xml里配置核心过滤器 

 SSH框架

• Step2  配置struts.xml

放在src 下即可

 SSH框架

写什么

 SSH框架

动作类(Action)

SSH框架

小结:

入门案例的书写步骤:

• 前提,环境配置OK

• 0 配置web.xml里的核心过滤器

• 1.structs.xml里的配置 

• 2.写对应的action 

• 3.写前端你想访问的url

• 4.写对应的action执行成功的结果视图


2.2.3 每次请求的执行流程

SSH框架


2.2.4 Struts2的架构

SSH框架


2.2.5  Struts2的配置文件

SSH框架

1. default.properties

struts.devMode = false 如果是开发的话,设置为true

<constant name="struts.devMode" value="true" />

我们的struts2框架默认只处理两种url

一种是url后面没有任何后缀的,

还有一种是有  .action结尾的这些url

struts.action.extension=action,,

2. struts-default.xml

2 

struts-default.xml 

struts2-core-2.3.15.3.jar 

不能修改

定义了一个父包,让我们去继承

 SSH框架

定了很多的拦截器。


3.strtuts-plugin.xml

当我们引入了一些struts2额外支持的功能。

就需要引入struts-xxx-plugin.jar

这些jar包的根目录下都会有 这种plugin的配置文件,这些文件通常会增加一些额外的配置。


4.struts.xml

我们自己使用struts2框架的时候,需要在这里配置我们的东西

SSH框架


5.web.xml

可以覆盖掉之前的配置

SSH框架


2.3 Struts.xml配置详解

 2.3.1 Constant

可以用来修改strutsdefault.properties默认配置

SSH框架


2.3.2 package

可以把动作划分不同的包 去管理

可以给不同的包设置不同的namespace


2.3.3  namepakeage中的name

定义这个包的名字,不能跟其他包一样。


2.3.4  extends

表示我这个包里继承的父包是谁

 SSH框架

SSH框架

2.3.5 abstract

如果一个包声明为抽象的,里面不能定义任何的action

通常用于给子包去继承。


2.3.6 namespace

 

给这个包里的动作增加一个前缀

必须/”开始, 不以  /结尾  可以写多级

能不能为“”  可以

能不能为/”可以

Namespace对于我们访问的url

 

能不能不写? 可以 不写相当于 “”

 

不同的namespace 对于我们访问路径的映射规则

(先找精确匹配,没有再找上一级匹配,再上一级....如果全都不匹配,会再找 namespace=”/”是否有,如果 / 也没有,就会匹配什么都没有的情况 namespace=”” ——localhost/ + actionname)

默认包:namespace没有写或者namespace="”

SSH框架


2.4 Action

2.4.1  Name

表示动作的名称,他应该与我们url里的动作名称匹配

SSH框架

不能加/开始 ,不能写多级,否有歧义。

也不要加后缀,语义会变化。

如下案例,给actionname增加后缀,hello.do

SSH框架

匹配的是

http://localhost/a/hello.do.do

而不能匹配

http://localhost/a/hello.do


2.4.2 Class

• 指定的响应该url请求的动作类 (每次请求实例化一个)


2.4.3 Method

具体要执行的动作方法 写方法名即可

 

没有指定method里的名字的话,就执行execute方法

当一个类实现了Action接口,里面有个需要覆盖的方法String execute();这个就是execute方法,如果action节点没有指定method方法,就会默认执行这个execute方法。


2.5 Struts2的动作类(Controller)的写法


2.5.1 第一种写法:

三个限制条件:

SSH框架


2.5.2 第二种写法:实现一个Action接口。重写他的方法。

SSH框架

这里面需要强制去实现一个execute方法。这方法的作用是:

当你的action里没有指定当前的url去执行的方法的时候,就执行默认的execute方法

SSH框架


2.5.3 第三种。看看Action 接口有无实现类。  继承ActionSupport

有默认的execute方法

SSH框架

Action接口:

SSH框架


2.6 Result

2.6.1 Name

跟动作方法的返回值对应,表示该返回值去显示拿个页面

如果没有配置namename的默认值是 success

SSH框架


2.6.2 页面地址

2.6.2.1 以/开头的绝对地址

可以写以/开始的地址,表示相对于web根目录的绝对地址(推荐使用的)

2.6.2.2 不以/开头的相对路径

也可以不以/ 开始,表示一个相对于当前的请求路径的相对地址

http://localhost/user/test/bbb/hello.wangdao

如果结果地址是

<result  name="error">error.jsp</result>

返回的路径就是:

/user/test/bbb/error.jsp


2.6.3 Type

1.type="dispatcher"

内部转到另一个结果视图  转发到jsp

2. type="redirect"

 重定向资源

3. chain —— Action转发

同一个包的转发

SSH框架

不同包转发

SSH框架


4. redirectAction —— Action重定向。

同一个包的动作的重定向

SSH框架

不同包的动作的重定向

SSH框架



2.7 其他补充

2.7.1.配置默认Action

我们可以给一个package里设置一个默认的动作类。

当这个package里的所有的动作名都不匹配的话,会直接执行这个默认动作类的动作。

SSH框架

SSH框架

2.7.2 配置Action 默认类

在我们的父包里定义了一个默认的动作类

SSH框架

如果一个action里没有指定的class,就使用上面定义的默认类。

所以看到如下这种case,这个动作类就是使用的是default-class-ref

SSH框架


2.7.3 局部结果

• <result>作为<action>子元素配置

SSH框架


2.7.4 全局结果(包的全局结果,只针对当前包)

如果发现这个包下的很多局部结果视图一模一样,就可以提出去

如果既有局部结果视图,又有全局结果视图,而且两个的名字一样,就近原则。

先使用局部的。

SSH框架

2.7.5 Struts配置文件分开写

SSH框架

自配置文件里根节点也是

SSH框架


2.7.6 动作方法里引用ServletAPI

1. 方法1(在动作类的方法中,推荐使用

SSH框架


2. 方法2(实现一个接口ServletRequestAware/ServletResponseAware

SSH框架

SSH框架








































3.