您的位置:首页 > 编程语言 > Java开发

Struts2(一)

2016-03-03 16:02 639 查看

搭建Struts2开发环境的步骤

搭建Struts2环境时,我们一般需要做以下几个步骤的工作:

1》创建javaweb工程

2》找到开发Struts2应用需要使用到的jar文件.

3》在web.xml中加入Struts2 MVC框架启动配置

4》创建jsp文件.

5》创建action文件

6》编写Struts2的配置文件

开发Struts2需要的jar文件

http://struts.apache.org/download.cgi#struts2014下载struts-2.x.x-all.zip,目前最新版为2.3.1。下载完后解压文件,开发struts2应用需要依赖的jar文件在解压目录的lib文件夹下。不同的应用需要的JAR包是不同的。下面给出了开发Struts 2程序最少需要的JAR。

struts2-core-2.1.8.1.jar :Struts 2框架的核心类库

xwork-core-2.1.6.jar :XWork类库,Struts 2在其上构建

ognl-2.7.3.jar :对象图导航语言(Object Graph Navigation Language),

struts2框架通过其读写对象的属性

freemarker-2.3.15.jar :Struts 2的UI标签的模板使用FreeMarker编写

commons-logging-1.1.x.jar :ASF出品的日志包,Struts 2框架使用这个日志

包来支持Log4J和JDK 1.4+的日志记录。

commons-fileupload-1.2.1.jar 文件上传组件,2.1.6版本后需要加入此文件

commons-io-1.3.2.jar,上传文件依赖的jar包

Struts2的启动配置

在struts2中,struts框架是通过Filter启动的。在web.xml中的配置如下:

<filter>
<filter-name>StrutsPrepareAndExecuteFilter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>StrutsPrepareAndExecuteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


在StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。

注意:struts2读取到struts.xml的内容后,是将内容封装进javabean对象然后存放在内存中,以后用户的每次请求处理将使用内存中的数据,而不是每次请求都读取struts.xml文件

编写Struts2的配置文件

Struts2默认的配置文件为struts.xml ,该文件需要存放在WEB-INF/classes下,也就是当前工程的src目录下。

在struts2框架中使用包来管理Action,包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的action。在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。

配置包时必须指定name属性,如果其他包要继承该包,必须通过该属性进行引用,注意:name名称是唯一 。包的namespace属性用于定义该包的命名空间。该属性可以不配置,对本例而言,如果不指定该属性,默认的命名空间为“/”

通常每个包都应该继承struts-default包, struts-default包是由struts内置的,它定义了struts2内部的众多拦截器和Result类型。而Struts2很多核心的功能都是通过这些内置的拦截器实现。如:从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。当包继承了struts-default包才能使用struts2为我们提供的这些功能。 struts-default包是在struts2-core-2.x.x.jar文件中的struts-default.xml中定义。 struts-default.xml也是Struts2默认配置文件。 Struts2每次都会自动加载 struts-default.xml文件。

Struts2的工作流程



拦截器概述(struts-default.xml)



Struts2基本配置

访问HelloWorld应用的路径的设置

在struts2中,访问struts2中action的URL路径由两部份组成:
包的命名空间+action的名称
例如: 访问本例子HelloWorldAction的URL路径为: /zhaojun/helloWorldAction  (注意:完整路径为:http://localhost:端口/内容路径/zhaojun/helloWorldAction)。另外我们也可以加上.action后缀访问此Action。

<package name=“hello" namespace=“/zhaojun“   extends="struts-default">
<action name="helloWorldAction" class="cn.itcast.action.HelloWorldAction">
<result name="success" type="dispatcher">/success.jsp</result>
</action>
</package>


Action名称的搜索顺序

1.获得请求路径的URI,例如url是:

http://server/struts2/path1/path2/path3/test.action

2.首先寻找namespace为/path1/path2/path3的package,

如果存在这个package,则在这个package中寻找名字为test的action,

如果不存在这个package则转步骤3;

3.寻找namespace为/path1/path2的package,

如果存在这个package,则在这个package中寻找名字为test的action,

如果不存在这个package,则转步骤4;

4.寻找namespace为/path1的package,

如果存在这个package,则在这个package中寻找名字为test的action,

如果仍然不存在这个package,就去默认的namaspace的package下面去找名

字为test的action(默认的命名空间为空字符串“/” ),

如果还是找不到,页面提示找不到action。

ActionSupport

类是默认的 Action 类. 在编写 Action 类时, 通常会对这个类进行扩展




Struts2处理的请求后缀

StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器,它负责拦截由/*指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。默认情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入Struts 2框架处理,否则Struts 2框架将略过该请求的处理。

根据配置文件:struts2-core-2.1.8.1.jar包下的 org.apache.struts2/default.properties文件定义的常量决定

struts.action.extension=action,,

默认处理的后缀是可以通过常量”struts.action.extension“进行修改的,如下面配置Struts 2只处理以.do为后缀的请求路径:

<struts>
<constant name="struts.action.extension" value="do"/>
</struts>


如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。如:

<constant name="struts.action.extension" value="do,go"/>


细说常量定义

常量可以在struts.xml或struts.properties中配置,两种配置方式如下:

在struts.xml文件中配置常量

<struts>
<constant name="struts.action.extension" value="do"/>
</struts>


在struts.properties中配置常量, (struts.properties文件放置在src下)

struts.action.extension=do

因为常量可以在多个配置文件中进行定义,所以我们需要了解下struts2加载常量的搜索顺序:

1. struts.xml

2. struts.properties

如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值.

指定多个struts配置文件

在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿。为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。下面的struts.xml通过元素指定多个配置文件:

<struts>
<include file="cn/itcast/web/struts2/config/default-struts.xml"/>
<include file="cn/itcast/web/struts2/config/register-struts.xml"/>
</struts>


通过这种方式,我们就可以将Struts 2的Action按模块添加在多个配置文件中。

注意:每个包名是唯一的

与Servlet API解耦

与Servlet API解耦的访问方式

为了避免与 Servlet API 耦合在一起, 方便 Action 做单元测试, Struts2 对 HttpServletRequest, HttpSession 和 ServletContext 进行了封装, 构造了 3 个 Map 对象来替代这 3 个对象, 在 Action 中可以直接使用 HttpServletRequest, HttpSession, ServletContext 对应的 Map 对象来保存和读取数据.

访问request/session/application对象

ActionContext/ServletActionContext 是 Action 执行的上下文对象, 在 ActionContext 中保存了 Action 执行所需要的所有对象, 包括request, session, application 等.

获取 HttpSession 对应的 Map 对象:

public Map getSession()

访问request/session/application对象

方案一:
public String test(){
HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
Map map = ActionContext.getContext().getSession();
ServletContext servletContext=ServletActionContext.getServletContext();
return "success";
}
方案二:
public class HelloWorldAction {
private String name;
public String getName() {
return name;
}
public void setName(String name) {//框架注入方法
this.name = name;
}
}


Struts2验证

校验

struts2校验有两种实现方法:

1. 手工编写代码实现

2. 基于XML配置方式实现

### 基本验证(对action的所有方法进行校验)

Jsp页面:

* 用户名不能为null ,””

* 密码不能为null, “” 并且密码的长度6位数字

Action中

* 要继承ActionSupport

* 重写Validateable接口中的validate()方法 ,在该方法中完成验证

* 步骤如下:

* validate()方法在其他的业务方法之前执行

* 验证出错转向的页面

struts.xml配置/login.jsp

其中input转向是在action中已经定义好的.

public static final String INPUT = “input”;

* 什么时候表示验证出错(转向input所指向的页面)

* this.addFieldError(“sss”, “错误信息”);方法指向的是一个集合

* 当集合不为空时,转向错误页面.

输入校验的流程

类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。

如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,拦截器将异常信息封装到fieldErrors里,然后执行第5步。如果类型转换没有出现异常,则直接进入第3步。

系统通过反射技术调用action中的validateXxx()方法,xxx为方法名。

调用action中的validate()方法。

经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。

基本验证(对action的所有方法进行校验)

显示错误Jsp页面:

使用显示错误消息

基本验证(对action的指定方法进行校验)

validate()方法会校验action中所有与execute方法签名相同的方法。

要校验指定的方法通过重写validateXxx()方法实现, validateXxx()只会校验action中方法名为Xxx的方法。其中Xxx的第一个字母要大写。

当某个数据校验失败时,调用addFieldError()方法往系统的fieldErrors添加校验失败

信息(为了使用addFieldError()方法,action可以继承ActionSupport),如果系统

的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。

在input视图中可以通过显示失败信息。

validateXxx()方法使用例子:

public String add() throws Exception{//业务方法

return “success”;

}

对应的验证方法

public void validateAdd(){//无需再写validate()方法了

//验证代码

}

附录1:在struts配置文件中增加补全功能



附录2: 常用的常量介绍

指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法

该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。

如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开

当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开

开发模式下使用,这样可以打印出更详细的错误信息

默认的视图主题

与spring集成时,指定由spring负责action对象的创建

上传文件的大小限制

… …
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息