Struts2官方帮助整理

更新时间:2023-06-11 12:13:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1课

1.1 怎样创建Struts2 Web应用程序 ................................................................................. 3 使用Ant构建应用程序 ............................................................................................... 3

1.1.1 最少依赖的jar包 ............................................................................................. 3

1.1.2 日志记录配置 ................................................................................................... 3

第2课 基于Struts2的Hello World ......................................................................................... 4

第3课 使用Struts2标签 ......................................................................................................... 5

3.1 Struts2表单标签 .......................................................................................................... 6

3.2 Struts2属性标签 .......................................................................................................... 6

第4课 编写Struts2 Action类 .................................................................................................. 6

4.1 在Action类中处理表单输入 ...................................................................................... 6

第5课 处理表单 ....................................................................................................................... 6

第6课 表单验证 ....................................................................................................................... 7

6.1 添加验证方法 ............................................................................................................... 7

6.2 处理返回的input ......................................................................................................... 8

6.3 错误消息 ....................................................................................................................... 8

6.4 定义错误消息的样式 ................................................................................................... 8

第7课 消息资源文件(资源捆绑) ....................................................................................... 8

7.1 消息资源属性文件(Action级别) ........................................................................... 8

7.2 Struts2的键 .................................................................................................................. 9

7.3 Struts2文本标签 .......................................................................................................... 9

7.4 包级别的属性 ............................................................................................................... 9

7.5 全局属性 ....................................................................................................................... 9

7.6 国际化 ........................................................................................................................... 9

7.6.1 以URL参数的形式限定所在地区 ............................................................... 10

第8课 异常处理 ..................................................................................................................... 10

8.1 全局异常处理 ............................................................................................................. 10

8.2 单Action的异常处理 ................................................................................................ 10

8.3 记录异常到日志 ......................................................................................................... 11

第9课 调试Struts .................................................................................................................. 11

9.1 配置插件 ..................................................................................................................... 11

9.2 使用调试拦截器 ......................................................................................................... 11

第10课 Struts2表单标签 ........................................................................................................ 12

10.1 选择列表标签 ......................................................................................................... 12

10.2 单选按钮标签 ......................................................................................................... 12

10.3 复选框标签 ............................................................................................................. 12

10.4 复选框列表标签 ..................................................................................................... 12

第11课 使用XML进行表单验证 .......................................................................................... 12

11.1 使用XML进行验证 .................................................................................................. 12

11.2 XML验证器格式 ....................................................................................................... 12

11.3 验证电子邮件地址 ..................................................................................................... 13

11.4 使用正则表达式验证用户输入 ................................................................................. 13

11.5 使用OGNL表达式验证用户的输入 ........................................................................ 13

第12课 通配符方法选择 ......................................................................................................... 14

12.1 通配符方法选择 ..................................................................................................... 14

12.2

第13课

第14课

14.1

14.2

14.3

14.4

第15课

第16课 动态方法调用 ......................................................................................................... 14 Struts2主题 ................................................................................................................ 14 Spring和Struts2 ......................................................................................................... 14 Struts 2 Spring 插件 ................................................................................................... 14 Spring配置文件 ......................................................................................................... 15 可选:由Spring来管理Action对象的创建 ....................................................... 15 Bean作用域 ............................................................................................................... 15 Struts2注解 ................................................................................................................ 16 拦截器介绍 ................................................................................................................. 16

第1课 怎样创建Struts2 Web应用程序 引入Struts2类库到WEB-INF lib目录下,然后使用Ant构建应用程序;或者是使用Maven来管理部件依赖以构建应用程序;

1.1 使用Ant构建应用程序

1.1.1 最少依赖的jar包

commons-fileupload-X.X.X.jar

commons-io-X.X.X.jar

commons-lang-X.X.jar

commons-logging-X.X.X.jar

commons-logging-api.X.X.jar

freemarker-X.X.X.jar

ognl-X.X.X.jar

struts2-core-X.X.X.X.jar

xwork-core-X.X.X.jar

javassist-X.X.X.jar

1.1.2 日志记录配置

log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">

<log4j:configuration xmlns:log4j="/log4j/">

<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%d %-5p %c.%M:%L - %m%n"/> </layout>

</appender>

<!-- specify the logging level for loggers from other libraries -->

<logger name="com.opensymphony">

<level value="DEBUG" />

</logger>

<logger name="org.apache.struts2">

<level value="DEBUG" />

</logger>

<!-- for all other loggers log only debug and above log messages -->

<root>

<priority value="INFO"/>

<appender-ref ref="STDOUT" />

</root>

</log4j:configuration>

使用Ant构建Web应用程序压缩文件(即war文件),并发布压缩文件到Servlet容器。 build.xml将编译所有的Java类,并创建war文件。

URL Java类 视图

第2课 基于Struts2的Hello World

创建一个映射配置文件以将URL、Action和视图进行配对。

Struts2框架要求你想暴露给视图的对象(包括Model和Action)必须遵循JavaBean命名规范。

Struts2将创建一个Action的对象,并调用指定的方法以响应用户的请求动作。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Hello World!</title>

</head>

<body>

<h2><s:property value="messageStore.message" /></h2>

</body>

</html>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"/dtds/struts-2.0.dtd">

<struts>

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

<package name="basicstruts2" extends="struts-default">

<action name="index">

<result>/index.jsp</result>

</action>

<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">

<result name="success">/HelloWorld.jsp</result>

</action>

</package>

</struts>

代码的工作原理:

Servlet容器接收到Web服务器过来的URL请求,根据从Web.xml载入的设置,Servlet容器发现所有的请求都被路由到org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter过滤器中,而这个过滤器是Struts2框架的入口点。Struts2框架接着查找一个名为***的Action映射,接着它发现映射被对应到一个Action类上,然后Struts2框架会初始化这个Action类并调用其execute()方法 ,在Struts2框架处理要发送到浏览器的视图的时候,<s:property value="messageStore.message" />标签将调用相应的getter方法,并获得相应的值。 ,一个纯的HTML文件被回送到浏览器!

URL请求

Web服务器

Servlet容器

StrutsPrepareAndExecuteFilter过滤器

始化Action类,调用相应方法(该方法将返回-个用于决定视图的字串,且该Action对象

可能盛有用于视图的数据)

Struts2标签通过调用getter方法取出Action对象中的数据,并并入HTML文件中 第3课 使用Struts2标签

为方便页面中引用动态数据,Struts2框架提供了一系列标签。一些标签与标准的HTML标签很相似,且同时提供用于添加的数据;另一些标签创建非标准的,但有用的控制流。

3.1 Struts2表单标签

<s:form action="hello">

<s:textfield name="userName" label="Your name" />

<s:submit value="Submit" />

</s:form>

3.2 Struts2属性标签

属性标签最常用的用处就是:通过调用Action对象的公用getter方法来取得相应的返回值,然后将该值包含进HTML文件中,并发送回浏览器。

属性标签的最有用的特性是,它可以自动地将大部分的通用数据类型转换为对应的文本型。

注意:如果一个Action中有静态的实例域,则该域的setter和getter方法也不能是静态的(按普通的道理,其应该是静态的才对),因为Struts2只认非静态的getter方法。 如果调用getter方法后返回的是一个对象,则属性标签会调用该对象的toString方法。因此,建议在所有的Model类中都重写toString方法。

第4课 编写Struts2 Action类

在Action类中书写控制逻辑。

Action类在MVC模式中起控制器作用。

Action类响应用户的动作,执行业务逻辑(或者调用service类以完成业务逻辑),然后返回一个结果,该结果将告诉Struts2框架回送哪个视图给浏览器。

4.1 在Action类中处理表单输入

如果表单拥有许多的输入域,为每个输入域编写对应的setter方法将是一件麻烦事。因此,在下一章,我们将介绍怎样将Model类、视图中的表单域和Action中的表单处理综合在一起。

第5课 处理表单

本章我们将介绍怎样使用Model类来存储表单输入以及怎样创建与该Model类匹配的Struts2表单。

<s:form action="register">

<s:textfield name="personBean.firstName" label="First name" />

<s:textfield name="stName" label="Last name" />

<s:textfield name="personBean.email" label ="Email"/>

<s:textfield name="personBean.age" label="Age" />

<s:submit/>

</s:form>

表单提交后,Struts2会探测Action,并查找一个名为personBean的对象,然后它将使用Person类的默认构造器来创建那个对象。

所有设置值的操作在调用方法前已经完成。

<p>Your registration information: <s:property value="personBean" /> </p>

第6课 表单验证

有2种使用Struts2进行表单验证的方式,本章将讨论较基础的方式,即验证将被包含在Action类中。

6.1 添加验证方法

为使Action类能够验证用户在Strutsd2表单中的输入,你必须在你的Action类中定义一个验证方法。

public void validate(){

if ( personBean.getFirstName().length() == 0 ){

addFieldError( "personBean.firstName", "First name is required." );

}

if ( personBean.getEmail().length() == 0 ){

addFieldError( "personBean.email", "Email is required." );

}

if ( personBean.getAge() < 18 ){

addFieldError( "personBean.age", "Age is required and must be 18 or older" );

}

}

当用户点击注册表单上的“提交”按钮后,Struts2将把用户输入的数据传输到Model对象的实例域中,然后Struts2将自动执行验证方法,只要if条件为真,Struts2将调用它的addFieldError方法(该方法由ActionSupport类继承而来)。只要添加了任何错误,则Struts2将不会继续调用相应方法,而是会返回一个“input”字符串作为调用该Action的值。

6.2 处理返回的input

<result name="input">/register.jsp</result>

6.3 错误消息

因为我们使用的是Struts2表单标签,所以Struts2会自动在表单域的上面添加错误消息。

6.4 定义错误消息的样式

在head标签中添加<s:head />即可。

第7课 消息资源文件(资源捆绑)

资源捆绑提供了一种简单的方式来在视图页中放入整个系统中相同(但会出现在多处的文本),或用来创建表单域的标签(包括name值),或基于用户所在地区将文本切换到特定的语言等等。

7.1 消息资源属性文件(Action级别)

Register.properties

personBean.firstName=First name

stName=Last name

personBean.age=Age

personBean.email=Email

thankyou=Thank you for registering %{personBean.firstName}(不是在JSP中,所以用百分号,不是美元符号,不是EL表达式)

7.2 Struts2的键

<s:textfield key="personBean.firstName" />

为使key属性能够找到属性文件,视图页面的显示必须是执行了一个Action类的结果。 <s:url action="registerInput" var="registerInputLink" />

<p><a href="${registerInputLink}">Please register</a> for our prize drawing.</p>

<action name="registerInput" class="org.apache.struts.register.action.Register" method="input" >

<result name="input">/register.jsp</result>

</action>

上面的input方法是继承自ActionSupport,而该方法默认的情况下会返回“input”字符串。

7.3 Struts2文本标签

可以使用文本标签来显示属性文件中的值。

<h3><s:text name="thankyou" /></h3>

7.4 包级别的属性

Package.properties

greeting=Welcome to The Wonderful World of Struts 2

7.5 全局属性

global.properties(注意:名称不一定非得是global)

contact=For assistance contact <a href='mailto:contact@'>contact@</a> 将上面的资源文件保存到src文件夹下。

在struts.xml中将该全局属性文件通知Struts2框架:

<constant name="struts.custom.i18n.resources" value="global" />

7.6 国际化

默认情况下,Struts2将会使用用户的默认所在地。如果用户所在的地区是en,则会使用没有地区限定的属性文件(如Register.properties);如果所在地区是es,则Struts2将会寻找一个名为Register_es.properties的属性文件。

Register_es.properties

personBean.firstName=Nombre

stName=Apellidos

personBean.age=Edad

personBean.email=Correo

thankyou=Gracias por registrarse, %{personBean.firstName}

7.6.1 以URL参数的形式限定所在地区

<h3>Registro español</h3>

<s:url action="registerInput" var="registerInputLinkES">

<s:param name="request_locale">es</s:param>

</s:url>

<p></p><a href="${registerInputLinkES}">Por favor, regístrese</a> para nuestro sorteo</p>

第8课 异常处理

Struts2提供了强健的异常处理机制,包括自动记录所有未捕获异常到日志,以及重定向用户到错误页面。

8.1 全局异常处理

可以在struts.xml中指定Struts2框架应该怎样处理未捕获的异常。处理逻辑可以应用到所有的Action(即全局异常处理),或者是某个特定的Action。

启动全局异常处理:

<global-exception-mappings>

<exception-mapping

exception="org.apache.struts.register.exceptions.SecurityBreachException" result="securityerror" />

<exception-mapping exception="ng.Exception" result="error" />

</global-exception-mappings>

<global-results>

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

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

</global-results>

8.2 单Action的异常处理

<action name="actionspecificexception" class="org.apache.struts.register.action.Register" method="throwSecurityException">

<exception-mapping

exception="org.apache.struts.register.exceptions.SecurityBreachException"

result="login" />

<result>/register.jsp</result>

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

</action>

Action中的异常处理比全局异常具有更高的优先级。

8.3 记录异常到日志

为将Struts2处理过的异常记录到日志,你必须在Struts.xml中定义一些参数。通常有三个参数值:使用的日志级别和日志目录。

为将这些参数应用到所有的Action,需要将使用一个特定的拦截器栈:

<interceptors>

<interceptor-stack name="appDefaultStack">

<interceptor-ref name="defaultStack">

<param name="exception.logEnabled">true</param>

<param name="exception.logLevel">ERROR</param>

</interceptor-ref>

</interceptor-stack>

</interceptors>

<default-interceptor-ref name="appDefaultStack" />

第9课 调试Struts

在开发Struts2Web应用程序过程中,你可能想要查看被Struts2框架管理的一些信息。本章将会讨论你可以使用的用于查看Struts2如果看待你的Web应用程序的两个工具。一个工具是Struts2配置插件,另一个是调试拦截器。

这些工具应该只在开发时使用。

9.1 配置插件

9.2 使用调试拦截器

发布产品时,你应该:

1. 关闭开发模式;

2. 移除调试链接;

3. 调整日志级别到较高的级别(如info或者warn),以减少日志消息的输出。

第10课 Struts2表单标签

选择列表、单选框、复选框、复选框列表等。

10.1 选择列表标签

<s:select key="personBean.sport" list="sports" />

personBean.sport中的sport指定了初始选择的项。假如调用getSport方法后返回的是“篮球”,则“篮球”选项会被标记为被选择。

sports对应getSports方法。

10.2 单选按钮标签

<s:radio key="personBean.gender" list="genders" />

10.3 复选框标签

<s:checkbox key="personBean.over21" />

10.4 复选框列表标签

<s:checkboxlist key="personBean.carModels" list="carModelsAvailable" /> 第11课 使用XML进行表单验证

使用一个独立的XML验证文件使你可以能够使用Struts2框架内建的验证器。 11.1 使用XML进行验证

一个包含了验证规则的XML文件,该文件的命名必须形如:ActionClassName-validation.xml。

Struts2提供了各种各样的验证器,如requiredstring validator验证器等。 11.2 XML验证器格式

<!DOCTYPE validators PUBLIC

"-//OpenSymphony Group//XWork Validator 1.0.2//EN"

"/xwork/xwork-validator-1.0.2.dtd">

<validators>

<validator type="requiredstring">

<param name="fieldname">personBean.firstName</param>

<message>First name is required.</message>

</validator>

</validators>

11.3 验证电子邮件地址

<validator type="requiredstring">

<param name="fieldname">personBean.email</param>

<message>Email address is required.</message>

</validator>

<validator type="email">

<param name="fieldname">personBean.email</param>

<message>Email address not valid.</message>

</validator>

11.4 使用正则表达式验证用户输入

<validator type="requiredstring">

<param name="fieldname">personBean.phoneNumber</param>

<message>Phone number is required.</message>

</validator>

<validator type="regex">

<param name="fieldname">personBean.phoneNumber</param>

<param name="expression"><![CDATA[\d{3}-\d{3}-\d{4}]]></param>

<message>Phone number must be entered as 999-999-9999.</message>

</validator>

注意:正则表达式必须位于一个CDATA节中。

11.5 使用OGNL表达式验证用户的输入

<validator type="fieldexpression">

<param name="fieldname">personBean.carModels</param>

<param name="expression"><![CDATA[personBean.carModels.length > 0]]></param> <message>You must select at least one car model.</message>

</validator>

第12课 通配符方法选择

12.1 通配符方法选择

<action name="*Person" class="org.apache.struts.tutorials.wildcardmethod.action.PersonAction" method="{1}"> <result name="success">view.jsp</result>

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

</action>

12.2 动态方法调用

Struts2文档建议反对使用DMI技术,主要是由于安全及该技术内部实现的一些原因。同时建议显式的设置DMI为false以关闭DMI。

第13课 Struts2主题

第14课 Spring和Struts2

一旦一个类创建了另一个类的对象,那么便在这两个类之间产生了依赖。

本章将讨论怎样利用Struts2和Spring来管理Action类和其它类(如服务层和模型层类)的依赖关系。

14.1 Struts 2 Spring 插件

Struts2提供了一个插件,该插件使Spring能够向Action类中注入任何已经在Spring配置文件中指定的对象。

为了使应用程序能够检测到Spring,我们需要在Web.xml中添加下面的监听器: <listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

记住:向Spring注册Action不是必须的!

默认情况下,Struts2框架至少会尝试一次使用Spring创建所有的对象,如果Spring不能创建,则框架会自己创建。

Spring配置文件也不仅限于“applicationContext.xml”:

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>

</context-param>

14.2 Spring配置文件

由Spring创建的对象将拥有单例的作用域,因为这是默认的作用域。

14.3 可选:由Spring来管理Action对象的创建

使用上面的方式,Struts框架仍然管理着Action对象的创建。如果你想配置应用程序以便由Spring来创建Action对象。为实现这一点,你需要为相应的Action类在Spring配置文件中添加一个bean节点:

<bean id="editService" class="org.apache.struts.edit.service.EditServiceInMemory" />

<bean id="editAction" class="org.apache.struts.edit.action.EditAction" >

<property name="editService" ref="editService" />

</bean>

singleton="false"到底加不加???

由于现在已经由Spring来管理Action类对象的创建,所以我们必须指定所有的希望由Spring注入的属性。

而在struts.xml配置文件中,你必须指定Spring的id值作为class属性的值!这将告诉Struts框架通过该id值向Spring获取Action类的对象。

<action name="edit" class="editAction" method="input">

<result name="input">/edit.jsp</result>

</action>

14.4 Bean作用域

根据经验,对有状态的bean应该使用prototype作用域,对无状态的bean应该使用singleton作用域。

要使用request、session和 global session作用域的bean(即具有web作用域的bean), 在开始设置bean定义之前,还要做少量的初始配置。请注意,假如你只想要“常规的”作用域,(singleton和prototype),就不需要这一额外的设置。

在目前的情况下,根据你的特定servlet环境,有多种方法来完成这一初始设置...

如果你用Spring Web MVC,即用SpringDispatcherServlet或DispatcherPortlet来处理请求,则不需要做特别的配置:DispatcherServlet 和 DispatcherPortlet已经处理了所有有关的状态

当使用了Spring's DispatcherServlet以外的Servlet 2.4及以上的Web容器时(如使用JSF或Struts),你需要在Web应用的'web.xml'文件中增加 javax.servlet.ServletRequestListener 定义

<web-app>

...

<listener>

<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>

</listener>

...

</web-app>

如果你用的是早期版本的web容器(Servlet 2.4以前的版本),那么你要使用一个javax.servlet.Filter的实现。请看下面的web.xml配置片段:

<web-app>

..

<filter>

<filter-name>requestContextFilter</filter-name>

<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>requestContextFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

...

</web-app>

RequestContextListener和RequestContextFilter两个类做的都是同样的工作: 将HTTP request对象绑定到为该请求提供服务的Thread。 这使得具有request和session作用域的bean能够在后面的调用链中被访问到。

第15课 Struts2注解

第16课 拦截器介绍

到现在为止,我们并没有讨论到Struts2框架的内部实现机制。在本章中,我们将介绍一个很关键的类的集合,而一旦一个Action被调用,Struts2框架将依赖该集合做大部分的事情。

在execute方法被调用之前,Struts2框架已经在幕后做了许多的工作,例如:

1. 处理所有出现的异常;

2. 将名称匹配的字符串请求参数转换到实例域;

3. 调用验证方法或外部XML验证。

在execute方法完成之后,更多的工作需要做:

1. 处理所有出现的异常;

2. 转换实例域为文本值,以在视图中显示;

3. 依据execute方法返回的结果字符串,定向到正确的视图页。

使用Struts2框架的一个好处是,所有的这些工作都被自动进行。从而我们可以将关注的焦点放在控制逻辑(即Action类)、服务层、数据访问层、领域模型等等上面。

上面这些工作都是由Struts2拦截器实现的。拦截器是包含在Struts2核心jar包中的一些标准的java类,且会按指定的顺序执行。

<action name="register" class="org.apache.struts.register.action.Register" method="execute">

<interceptor-ref name="timer" />

<interceptor-ref name="logger" />

<interceptor-ref name="defaultStack">

<param name="exception.logEnabled">true</param>

<param name="exception.logLevel">ERROR</param>

</interceptor-ref>

<result name="success">thankyou.jsp</result>

<result name="input">register.jsp</result>

</action>

当你为一个Action指定了一个你想要使用的拦截器时,那么仅仅这些拦截器会被执行,而默认的拦截器将不再执行。

本文来源:https://www.bwwdw.com/article/gwo1.html

Top