1、struts2的入门

一、Struts2简介                        

Struts2是根据struts1项目升级而来,但是struts2的核心是webwork.就是说它只是使用了struts1的名字,而核心实现方式确是webwork。

WebWork建立在XWork 之上,MVC模式的开源java EE WEB开发框架。

WebWork 是由OpenSymphony 组织(www.opensymphony.com)开发。目前WebWork 2.x 已经被拆分成了XWork和WebWork 两个项目。

XWork简洁、灵活、功能强大,它是一个标准的Command模式实现,并且完全从Web 层脱离出来。XWork 提供了很多核心功能:前端拦截器(interceptor)、运行时表单属性验证、类型转换、强大的表达式语言OGNL(Object Graph Navigation Language) 等。

二、Struts2下载与安装                    

1、下载

apache 官方网站下载 Struts2 包http://struts.apache.org 目前版本为2.3.16


下载Struts2,我们会看见有很多可供下载的压缩包,每个压缩包作用如下:

Full包含源码,类库、文档、示例等其它下载源。建议下载此包

Example:示例应用版。

Essential:类库

Document:相关文档

Source:源码


2、安装

无需安装,如果项目需要使用struts2只需要将需要的包导入到工程即可。

建议解压下载的struts2zip文件中找到app\ struts2-blank.war 并解压然后copy web-info\lib 目录下的所有的jar并导入项目。App目录是struts2的一些示例程序,struts2-blank是一个helloworld级别的项目,所以它使用的jar可以说是struts2框架需要用到的最少的jar文件。

3、常用jar文件介绍

l 文件上传相关包

commons-fileupload-1.2.2.jar

FileUpload 使你可以在应用和Servlet中容易的加入强大和高性能的文件上传能力struts中上传文件要用到。

commons-io-2.0.1.jar

l 日志处理包

commons-logging-1.1.1.jar

Apache Commons包中的一个,包含了日志功能。这个包本身包含了一个Simple Logger,但是功能很弱。在运行的时候它会先在CLASSPATHlog4j,如果有,就使用log4j,如果没有,就找JDK1.4带的java.util.logging,如果也找不到就用Simple Logger
commons-logging.jar的出现是一个历史的的遗留的遗憾,当初Apache极力游说Sunlog4j加入JDK1.4,然而JDK1.4项目小组已经接近发布JDK1.4产品的时间了,因此拒绝了Apache的要求,使用自己的java.util.logging,这个包的功能比log4j差的很远,性能也一般。
后来Apache就开发出来了commons-logging.jar用来兼容两个logger。因此用commons-logging.jar写的log程序,底层的Logger是可以切换的,你可以选择log4jjava.util.logging或者它自带的Simple Logger。不过我仍然强烈建议使用log4j,因为log4j性能很高,log输出信息时间几乎等于System.out,而处理一条log平均只需要5us。你可以在Hibernatesrc目录下找到Hibernate已经为你准备好了的log4j的配置文件,你只需要到Apache网站去下载log4j就可以了。commons-logging.jar也是必须的jar包。

l 对java.lang.*的扩展,里面有些工具类

commons-lang-2.5.jar

l 动态的获取/设值Java Bean的属性

commons-beanutils-1.7.0.jar

Commons-Beanutils 这个是jakarta commons项目中的一个子项目。这个项目开发的目的是帮助开发者动态的获取/设值Java Bean的属性,同时解决每次都要写getXXXsetXXX的麻烦。 

l 模板相关操作包 struts2UI标签的模版使用freemarker

freemarker-2.3.16.jar

l 生成java字节码的代码生成工具

javassist-3.11.0.GA.jar

l 表达式包

ognl-3.0.1.jar

l commons-collections.jar
扩展了标准的Java Collection框架,提供了额外的MapListSet实现以及多个有用的工具类库。功能比java.util.*强大。

l strust2核心包

struts2-core-2.2.3.jar

l WebWork核心jar

xwork-core-2.2.3.jar

2.3以后会有asm.jar相关的包,ASM是小巧轻便的Java字节码操控框架 ,它能方便地生成和改造Java代码

三、Struts2体系结构                     

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

1Struts2的处理流程  

Struts2框架的大概处理流程如下:

  1、加载类(org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)

  2、读取配置(struts配置文件中的Action)  struts.xml/struts.properties

   3、派发请求(客户端发送请求) url

  4、调用Action(FilterDispatcher从struts配置文件中读取与之相对应的Action )

  5、启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证)

  6、处理业务(回调Action的execute()方法)

  7、返回响应(通过execute方法将信息返回到StrutsPrepareAndExecuteFilter)

  8、查找响应(FilterDispatcher根据配置查找响应的是什么信息如:SUCCESS、ERROR,将跳转到哪个jsp页面/另一个action)

 9、响应用户(jsp--->客户浏览器端显示)

 10、struts2标签库(相比struts1的标签库,struts2是大大加强了,对数据的操作功能很强大,但是struts2的标签库非常庞大占有用系统资源中小项目不建议使用。) 对jstl标签的扩展 c:foreach

流程图:


2Struts2的核心组件:

实现以下五个核心部件:

· Actions  用于处理界面的请求,处理器.action可以是一个简单的java类,不需要实现任何接口,也不用继承某个类 耦合

· Interceptors 用于对请求进行拦截,类似于filter但是他只能拦截struts中的action,struts2的所有的功能都是由拦截器实现的。组件式的,可以随时抽出来

· Value Stack / OGNL 值栈,类似于servlet中的作用域,在struts2的标签中使用比较多

· Results / Result types 返回结果,包含返回的视图的name和响应的数据等其它一些返回的信息 <result name=success>index.jsp</result>

· View     响应视图,jsp/jsf或者其它的视图技术


四、Struts2配置说明                     

Struts2的配置可以分成三个单独的文件 

1Web.xml配置

FilterDispatcher是一个servlet过滤器,它是整个Web应用的配置项,需要在”web.xml”中进行配置: 

<filter>
     <filter-name>action2</filter-name>
     <filter-class>org.apache.Struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
     <filter-mapping>
     <filter-name>action2</filter-name>
     <url-pattern>/*</url-pattern>
</filter-mapping> 

如果是配置一个最基本的Web应用的话,这样就足够了。剩下的就是自定义一些Web应用的执行环境和配置应用中的组件。其中前者主要通过struts.properties来完成,而后者是在struts.xml中进行配置的。我们下面来看一下这两个配置文件的细节

2struts.properties文件 

文件说明

这个文件提供了一种更改框架默认行为方式的机制,类似于一些系统常量。在一般情况下,如果不是打算让调试更加方便的话,你根本无须更改这个文件。在”struts.properties文件中定义的属性都可以在”web.xml文件的”init-param标签中进行配置,或者通过”struts.xml文件中的”constant标签来修改。 

我们可以更改其中的一些属性来改变Freemarker的选项——改变Action映射类,判断是否要重新载入XML配置文件,以及默认的UI主题等等。在Struts2 的wiki上有这些属性的最新信息,地址为http://struts.apache.org/2.x/docs/strutsproperties.html.

Struts2-Core的jar发行版中,有一个默认的属性文件,名为”default.properties”。如果要对属性进行修改的话,只需要在项目的源代码目录下,创建一个叫做”struts.properties”的文件,然后把想要修改的属性添加到文件中,新的属性就会把默认的覆盖掉了。 

在开发环境中,以下几个属性是可能会被修改的: 

3struts.xml文件

Struts标签

“struts.xml”文件中包含的是开发Action时所需要修改的配置信息。我们先来看一下文件的固定结构。 

”struts.xml”中进行配置全局结果、异常处理和自定义的拦截器堆栈。 

因为这是一个XML文件,所以最开始的元素就是XML版本和编码信息。接下来则是XML的文档类型定义(DTD)。DTD提供了XML文件中各个元素所应使用结构信息,而这些最终会被XML解析器或者编辑器使用。 

我们现在看到了<struts>标签,它位于Struts2配置的最外层,其他标签都是包含在它里面的。 

Include标签:

<include … /> <struts>标签的一个子标签,它可以把其他配置文件导入进来,从而实现Struts2的模块化。它的”file”属性定义了要导入的文件的名称——该文件要和”struts.xml”一样有着相同的结构。比如说,如果要把一个记账系统的配置分解的话,你可能会把记账、管理和报表的功能各自组织到不同的文件中: 

<struts>

<include file=“billing-config.xml” />

<include file=“admin-config.xml” />

<include file=“reports-config.xml” />

</struts>

当我们导入文件时,一定要注意导入的顺序。因为从文件被导入的那个点开始,该文件中的信息才能被访问到,也就是说,如果要使用另外一个文件中所定义的标签,那么该文件就必须要在被引用之前就配置好。 

有些文件需要显式导入,有些则会被自动导入。”struts-default.xml”和”struts-plugin.xml”就属于后者。它们都包括有结果类型、拦截器、拦截器堆栈、包(package)以及Web应用执行环境(也可以在”struts.properties”中配置)的配置信息。二者的区别在于,”struts-default.xml”提供的是Struts2的核心配置信息,而”struts-plugin.xml”则描述了特定插件的配置信息。每个插件的JAR中都要有一个”struts-plugin.xml”文件,该文件会在系统启动时被装载。 

Package标签:

<package name=”struts-default” … />

标签是用来把那些需要共享的通用信息——例如拦截器堆栈或URL命名空间——的配置组织在一起的。它通常由Action的配置组成,但也可以包括任何类型的配置信息。它还可以用来组织管理各自独立的功能——它们也可以被进一步拆分到不同的配置文件中。 

这个标签的属性包括有:

name=“default”package的名称用于区分不同的packge

namespace=“/” :表示页面请求的路径。

extends=“struts-default”:表示继承自struts-deault这个包

abstract=“false”:是否是抽象包。如果设置成true那这个package里面不能包含action的定义

Constant标签

常量标签可以用来修改struts.properties中定义的常量

<!-- 指定Web应用的默认编码集,相当于调用 HttpServletRequest的setCharacterEncoding方法 -->
<constant name=“struts.i18n.encoding” value=“UTF-8” />

<!-- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即 所有匹配*.action的请求都由Struts 2处理。如 果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开 -->
<constant name=“struts.action.extension” value=“do” />  

 

<!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好 关闭 -->
<constant name=“struts.serve.static.browserCache “ value=“false” />

<!-- 当 struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生 产环境下使用),开发阶段最好打开 -->
<constant name=“struts.configuration.xml.reload” value=“true” /> 

<!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
<constant name=“struts.devMode” value=“true” /> 

<!-- 默 认的视图主题 -->
<constant name=“struts.ui.theme” value=“simple” />

<!-- 该属性指定Struts 2中的action由Spring容器创 建 与spring整合时使用-->
<constant name=“struts.objectFactory” value=“spring” />

Action 标签

用户自定义action的标签,类似于servlet的配置。该标签包含的属性有:

<action name=login class=com.itjob.action.LoginAction method=login>

<result name=success>index.jsp</result>

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

<result name=input>index.jsp</result>

</action>

Name:表示页面请求的url必须的。

Class:action的处理类,全限定类名 必须配置

Method:处理请求的方法,如果说不配置method  execute()

Result 标签:

<result  name=success>index.jsp</result>

action处理结果的配置 属性包括

name:返回结果的名称 name的值默认可以设置为success  input  error

type:json jsp

五、第一个struts2项目                      

public class MyActionDemo extends ActionSupport {

	private String name=““;
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String execute() throws Exception {
		this.name = “itjob”;
		return SUCCESS;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未名胡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值