struts2总结(一)

 一、Struts2的由来

Struts 2是Struts的下一代产品,是在 struts 和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWor搜索k的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2只有很小的变化。

经过六年多的发展,Struts1已经成为了一个高度成熟的框架,不管是稳定性还是可靠性都得到了广泛的证明。市场占有率超过20%,拥有丰富的开发人群,几乎已经成为了事实上的工业标准。但是随着时间的流逝,技术的进步,Struts1的局限性也越来越多地暴露出来,并且制约了Struts1的继续发展。

  对于Struts1框架而言,由于与JSP/Servlet耦合非常紧密,因而导致了一些严重的问题。首先,Struts1支持的表现层技术单一。由于Struts1出现的年代比较早,那个时候没有FreeMarker、Velocity等技术,因此它不可能与这些视图层的模版技术进行整合。其次,Struts1与Servlet API的严重耦合,使应用难于测试。最后,Struts1代码严重依赖于Struts1 API,属于侵入性框架。

  从目前的技术层面上看,出现了许多与Struts1竞争的视图层框架,比如JSF、Tapestry和Spring MVC等。这些框架由于出现的年代比较近,应用了最新的设计理念,同时也从Struts1中吸取了经验,克服了很多不足。这些框架的出现也促进了Struts的发展。目前,Struts已经分化成了两个框架:第一个是在传统的Struts1的基础上,融合了另外的一个优秀的Web框架WebWork的Struts2。Struts2虽然是在Struts1的基础上发展起来的,但是实质上是以WebWork为核心的。Struts2为传统的Struts1注入了WebWork的先进的设计理念,统一了Struts1和WebWork两个框架。Struts1分化出来的另外一个框架是Shale。这个框架远远超出了Struts1原有的设计思想,与原有的Struts1关联很少,使用了全新的设计思想。Shale更像一个新的框架而不是Struts1的升级。 本文下面的内容将主要讨论Struts2。

Struts2的体系与Struts1体系的差别非常大,因为Struts2使用了WebWork的设计核心,而不是Struts1的设计核心。Struts2中大量使用拦截器来处理用户的请求,从而允许用户的业务逻辑控制器与Servlet API分离。

二、搭建Struts2的开发环境

1、拷贝jar包

参考发行包中的struts2-blank.war中的jar


2、配置核心过滤器(控制器)



 3、建立struts.xml的配置文件,放在应用的类路径的顶端(开发中:src目录下)


验证是否成功:部署到Tomcat中,启动,只要没有报错,就是OK。

 

4、写struts配置文件没有提示的问题

1、找到dtd,放到某一个目录中。WEB-INF/d



三、Struts2的执行流程全图



四、Struts2的配置文件和加载顺序

1、default.properties 该文件保存在 struts2-core-2.3.7.jar 中 org.apache.struts2中

2、struts-default.xml 该文件保存在 struts2-core-2.3.7.jar

3、struts-plugin.xml 该文件保存在struts-Xxx-2.3.7.jar(struts2的插件jar包中)

4struts.xml该文件是web应用默认的struts配置文件(程序员写)

5、struts.properties 该文件是Struts的默认配置文件(程序员写)。构建路径的顶端

6、web.xml应用的配置文件

 

按照从1到6的顺序加载配置文件。后面的内容会覆盖前面的内容。

1和2和3都在框架或插件提供的jar中,不需要我们直接改。

 

五、struts.xml配置文件的内容标签

1、package:

作用:分模块化开发。

属性:

name:包的名称。唯一。必须的

extends:一般都需要直接或间接继承一个叫做struts-default(struts-default.xml中有定义)的包名。因为,struts框架的一些核心功能配置都在此处。

abstract:如果为true,说明是一个抽象包。说明让别人去继承。没有任何action子元素的包就可以定义为抽象包。

namespace:名称空间。一般以"/"开头,和动作名称一起,构成了用户的访问路径。

比如:

 

专题:package中的namesapce属性

2、action:

作用:配置动作。用户什么请求,执行哪个类,及哪个类的方法。

属性:

name:动作名称。必须的。包中要唯一。

class:动作类的全名。可以不指定,默认值是

com.opensymphony.xwork2.ActionSupport

method:执行的动作类的动作方法。可以不指定,默认值是execute。

 

说明:可以覆盖掉默认的动作类。一般我们不需要这么做。

3、constant配置:

推荐覆盖常量办法:在struts.xml中使用constant标签。

作用:配置常量的值。

struts2的常量都在default.properties配置文件中做了定义(struts2-core.jar/  org.apache.struts2包中)

常用的常量:

struts.i18n.reload = true 国际化配置文件更改后,自动加载。

struts.configuration.xml.reload = true struts配置文件更改后,自动加载

struts.devMode = false 如果为true,开启开发模式.实际运行应该为false

struts.i18n.encoding=UTF-8 应用使用的编码。

struts.action.extension=action,, struts2框架真正执行的url地址后缀。多个用逗号分隔

struts.serve.static.browserCache=true 静态资源告知浏览器不要缓存。

Expires:-1;Cache-Control:no-cache;Pragma:no-cache

4、包含其他的配置文件

<include file="user.xml"></include>

六、动作类:Action

1、编写动作类的方式

l  方式一:动作类就是一个POJO。可以不用继承或实现任何的类或接口。

l  方式二:动作类实现com.opensymphony.xwork2.Action接口。

SUCCESS:一切正常时使用

NONE:不转向任何视图时使用(文件下载时)

ERROR:出错(异常中)

INPUT:数据回显时。

LOGIN:转向登录页面时。

l  (推荐的)方式三:动作类继承ActionSupport类。

2、动作方法:

编写要求:

必须是public

方法必须返回String的值。如果为null,则不转向任何的视图

方法没有任何的参数

3、动作方法的映射:

4、DMI:DynamicMethod Invocation(动态方法调用)(了解)

当前配置:没有指定动作方法

url:customer!addCustomer

 

错误:

说明struts2框架默认是不允许执行动态方法调用的。如果要用,需要配置一个常量:

 

危险:容易把动作方法暴露给客户端

5、默认的action

 

七、Servlet规范相关实例的获取

1、Struts2的一大特点:与ServletAPI解耦了。

2、获取Servlet有关的类

l  方式一:(暂时记住。推荐的)


l  方式二:(麻烦。框架注入进来)


怎么做到的?实际上是一个拦截器来做的。

<interceptorname="servletConfig"class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>

 

十、Struts2中的结果视图

1、展现结果

通过struts.xml中result配置来管理的。

2、result元素

作用:配置一个结果视图

属性:

name:逻辑视图名称。对应的是动作方法的返回值。

可以不写。默认值是success。

type:指定结果类型。默认值是dispatcher,就是转发。

 

问题:dispatcher从哪里来的?struts-default.xml中有定义。

3、常用的结果视图的类型

dispatcher:默认结果类型。请求转发到一个页面。

redirect:请求重定向到一个页面。

chain:请求转发到另一个动作。

redirectAction:重定向到另外一个动作

stream:下载用的(文件上传和下载时再议)

l  plainText:以纯文本的形式展现内容

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值