转自:(http://blog.csdn.net/xys_777/article/details/7542095)  

Action, ActionForm, ActionForward ,这三个对象构成了Struts 的核心。 
Struts 最核心的控制器是ActionServlet ,该Servlet 拦截用户请求,井将用户请求转入到Struts 体系内。 
一、配置ActionServlet 
ActionServlet 是一个标准的Servlet ,在web.xml 文件中配置,该Servlet 用于拦所有的HTTP 请求。因此,应将该Servlet 配置成自启动Servlet ,即为该Servlet 配置load-on-startup 属性。 
注意:在应用Struts 的很多场景下,为Servlet 配直load-on-startup 属性都是必需的。因此,笔者建议应为ServletAction 配直load-an-startup 属性。 
在web.xml 文件中配置ActionServlet 应增加如下片段:

<!-- 将ActionServlet配置成自启动的Servlet -->
<servlet>
<!-- 指定Servlet 的名字 -->
<servlet-name>actionSevlet</servlet-name>
<!-- 指定该Servlet 的实现类 -->
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<!-- 配置自启动的级别 -->
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<!-- 配置ActionServlet的URL 映射 -->
<servlet-name>actionSevlet</servlet-name>
<!-- 所有以.do 结尾的请求由ActionServlet拦截 -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>

该ActionServlet作为一个标准Servlet,配置在Web 应用中,负责拦截用户请求。该Servlet 还有加载Struts 配置文件的责任。但这里并未告诉它如何加载Struts 的配置文 
件,以及Struts 的配置文件放在哪里及文件名是什么。ActionServlet默认加载WEB-INF 下的struts-config.xml文件。如果需要Struts 的配置文件不在WEB-INF路径下,或者改变了文件名,则应采用如下方式配置:

<servlet>
<servlet-name>actionSevlet</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config-user.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

在上面的配置中,指定了ActionServlet 的配置文件: struts-config-user.xml文件,该文件作为init-param参数载入,载入时候指定了参数名:config ,config 是Struts 固定的参数名, struts负责解析该参数,并加载该参数的指定的配置文件。Struts 支持使用多个配置文件,当有多个配置文件时,应将不同的配置文件配置成不同的模块,并指定不同的URI。下面的片段配置了两个配置文件:

<servlet>
<!-- ActionServlet 的名 -->
<servlet-name>actionSevlet</servlet-name>
<!-- 配置Servlet 的实现类 -->
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<!-- 指定Struts 的第一个配置文件 -->
<init-param>
<!-- 指定配置文件的映射 -->
<param-name>config</param-name>
<param-value>/WEB-INF/struts-con工fgl.xml</param-value>
</init-param>
<!-- 指定Struts 的第二个配置文件 -->
<init-param>
<!-- 指定配置文件的映射 -->
<param-name>config/wawa</param-name>
<param-value>/WEB-INF/struts-config2.xml</param-value>
</init-param>
<!-- 将ActionServlet配置成自启动Servlet -->
<load-on-startup>2</load-on-startup>
</servlet>

上面的配置片段中指定了两个配置文件:struts-config l.xml 和struts-config2.xml 文件。这两个配置文件分别被配置到config 和config/wawa 的路径下。表明将struts-config 1.xml 中的Action 映射到应用的根路径下,而struts-config2.xml 文件中的Action 则被映射到应用的wawa 子路径下。也就是说wawa 将作为系统的一个模块使用。

二、配置ActionForm 
配置ActionForm ,必须包含ActionForm 类才行。Struts 要求ActionForm 必须继承Struts 的基类: org.apache.struts.action.ActionForm,ActionForm 的实现非常简单,该类只是一个普通的JavaBean,只要为每个属性提供对应的setter 和getter 方法即可。根据前面的讲解, ActionForm 用于封装用户的请求参数,而请求参数是通过JSP 页面的表单域传递过来的。因此应保证ActionForm 的参数与表单域的名字相同。 
注意: JavaB ean 的参数是根据getter 、setter 方法确定的。如果希望有一个A 的属性,则应该提供getA 和setA 的方法。 
(1)ActionForm的实现 
ActionForm 的属性必须与JSP 页面的表单域相同。本示例的表单包含如下两个表单域: 
• usemame 
• password 
因此, ActionForm 必须继承org.apache.struts.action.ActionForm,并为这两个域提供对应的setter 和getter 方法,下面是ActionForm 的源代码:

import org.apache.struts.action.ActionForm;
public class LoginForm extends ActionForm {
private String username;
private String password; // 表单域username对应的setter 方法
/**
* @return the username
*/
public String getUsername() {
return username;
} /**
* @param username
* the username to set
*/
public void setUsername(String username) {
this.username = username;
} /**
* @return the password
*/
public String getPassword() {
return password;
} /**
* @param password
* the password to set
*/
public void setPassword(String password) {
this.password = password;
} }

另外,该ActionForm 的两个属性名可以不是usemame 和password。只要提供了usemame 和password 的setter 和getter 方法即可。 
注意: FormBean 类应尽量声明成public。 
(2)ActionForm 的配置 
所有的ActionForm 都被配置在struts-config.xml 文件中,该文件包括了一个form-beans 的元素,该元素内定义了所有的ActionForm,每个ActionForm 对应一个form-bean 元素。 
为了定义LoginForm. 必须在struts-config.xml文件中增加如下代码:

<!-- 用于定义所有的ActionForm -->
<form-beans>
<!-- 定义ActionForm,至少指定两个属性: name , type-->
<form-bean name="loginForm" type="lee.LoginForm" />
</form-beans>

配置ActionForm非常简单,只需指定ActionForm 的name 属性即可。该属性定义了ActionForm的id. 用于标识该Form; 另外还需要一个type 属性,该属性定义了ActionForm的实现类。 
下面将介绍Action 如何使用该ActionForm. 以及Action 如何与该ActionForm关联。

三、配置Action 
Action 的配置比ActionForm 相对复杂一点,因为Action 负责管理与之关联的ActionForm. 它不仅需要配置实现类,还需要配置Action 的path 属性,该属性用于被用 
户请求。对于只需在本Action 内有效的Forward. 还应在Action 元素内配置局部Forward。 
(1)Action 的实现 
通过ActionForm. 可使Action 无须从HTTP 请求中解析参数。因为所有的参数都被封装在ActionForm中,下面是Action 从AcitionForm 取得请求参数的源代码:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class LoginAction extends Action {
// 必须重写该核心方法,该方法actionForm 将表单的请求参数封装成值对象
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//将ActionForm强制类型转换为LoginForm
LoginForm loginForm = (LoginForm) form;
// 从ActionForm中解析出请求参数: username
String username = loginForm.getUsername();
// 从ActionForm中解析出请求参数: password
String pass = loginForm.getUsername();
//后面的处理与前一个示例的Action 相同。
...
}
}

该Action 从转发过来的ActionForm 中解析请求参数,对应的ActionForm 则由ActionServlet 在接收到用户请求时,负责实例化。 
实际的过程是: ActionServlet 拦截到用户请求后,根据用户的请求,在配置文件中查找对应的Action , Action 的name 属性指定了用于封装请求参数的ActionForm; 然后ActionServlet 将创建默认的ActionForm 实例,并调用对应的setter 方法完成ActionForm的初始化。 
ActionServlet 在分发用户请求时,也将对应ActionForm 的实例一同分发过来。 
(2)Action 的配置 
Action 需要配置如下几个方面。 
• Action 的path: ActionServlet 根据该属性来转发用户的请求,即将用户请求转发与之同名的Action 。同名的意思是:将请求的.do 后缀去掉,匹配Action 的path属性值。 
• Action 的name: 此处的name 属性并不是Action 本身的名字,而是与Action 关联的ActionForm。因此该name 属性必须是前面存在的ActionForm 名。 
• Action 的type: 该属性用于指定Action 的实现类,也就是负责处理用户请求的业 
务控制器。 
• 局部Forward: Action 的转发并没有转发到实际的JSP 资源,而是转发到逻辑名,即Forward 名。在Action 内配置的Forward 都是局部Forward (该Forward 只在该Action 内有效)。 
下面是该Action 的配置代码:

<!-- 该元素里配置所有的Action -->
<action-mappings>
<!-- 配置Action. 指定了path , name , type 等属性 -->
<action path="/login" type="lee.LoginAction" name="loginForm">
<!-- 配置局部Forward -->
<forward name="welcome" path="/WEB-INF/jsp/welcome.jsp" />
<forward name="input" path="/login.jsp" />
</action>
</action-mappings>

四、配置Forward 
正如前面所讲, Forward 分局部Forward 和全局Forward 两种。前者在Action 里配置,仅对该Action 有效:后者单独配置,对所有的Action 都有效。 
配置Forward 非常简单,主要需要指定以下三个属性。 
• name: 该Forward 的逻辑名。 
• path: 该Forward 映射到的JSP 资源。 
• redirect: 是否使用重定向。 
局部Forward 作为Action 的子元素配置;全局Forward 配置在global-forwards 元素里。 
下面是配置全局Forward 的代码:

<!-- 配置全局Forward -->
<global-forwards>
<!-- 配置Forward对象的name 和path 属性 -->
<forward name="error" path="/WEB-INF/jsp/error.jsp" />
</global-forwards>

上面的配置代码中,配置了一个全局Forward,该Forward 可以被所有的Action 访问。通常,只将全局资源配置成全局Forward。当每个Action 在转发时,首先在局部Forward 中查找与之对应的Forward,如果在局部Forward 中找不到对应的Forward 对象,才会到全局Forward 中查找。因此,局部Forward 可以覆盖全局Forward。 
下面提供了该应用的struts-config.xm1文件的全部源代码:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Struts 配置文件的文件头,包含DTD 等信息 -->
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<!--Struts 配置文件的根元素 -->
<struts-config>
<!--配置所有的ActionForm -->
<form-beans>
<!--配置第一个ActionForm,指定ActionForm的name 和type 属性 -->
<form-bean name="loginForm" type="lee.LoginForm" />
</form-beans>
<!--配置全局Forward对象 -->
<global-forwards>
<!--该Forward对象的name 属性为error. 映射资源为/WEB-INF/jsp/error.jsp -->
<forward name="error" path="/WEB-INF/jsp/error.jsp" />
</global-forwards>
<!--此处配置所有的Action 映射-->
<action-mappings>
<!--配置Action 的path. type 属性name 属性配置Action 对应的ActionForm-->
<action path="/login" type="lee.LoginAction" name="loginForm">
<!--还配置了两个局部Forward. 这两个局部Forward仅对该Action有效-->
<forward name="welcome" path="/WEB-INF/jsp/welcome.jsp" />
<forward name="input" path="/login.jsp" />
</action>
</action-mappings>
</struts-config>

Structs1 -配置例子(转)的更多相关文章

  1. Linux(Ubuntu) Mysql的安装配置例子以及常用命令

    1.安装配置例子 有空再写 2.注意事项 (1)启动mysql 在/etc/mysql 目录下 service mysql start  新版本是(service mysqld start  ) (2 ...

  2. spring源码学习之:xml标签扩展配置例子

    在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的 时候,会显得非常笨拙.一般的做法会用原生态的方式去解析定义好 ...

  3. Spring Boot SSL [https]配置例子

    前言 本文主要介绍Spring Boot HTTPS相关配置,基于自签证书实现: 通过本例子,同样可以了解创建SSL数字证书的过程: 本文概述 Spring boot HTTPS 配置 server. ...

  4. laravel 5.1 简单配置例子

    这里演示5.1版本 一.数据库配置 .env文件(也可以直接修改config/database.php) DB_HOST=localhost DB_DATABASE=test  //数据库名称 DB_ ...

  5. Nginx基于TCP的负载均衡的配置例子

    原文:https://blog.csdn.net/bigtree_3721/article/details/72833955 nginx-1.9.0 已发布,该版本增加了 stream 模块用于一般的 ...

  6. maven+ssm+cxf3配置例子

    以下只是简单记录 ssm结合cxf3的配置 提供方配置::: pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0&quo ...

  7. Nginx的安装配置 例子

    1.下载 2.解压 3.运行 a.双击nginx.bat b.启动Nginx 会发现进程里面已经开始运行 4.配置 a.双击打开配置文件夹里面的nginx.conf b.修改 upstream tee ...

  8. Spring Security 入门(1-2)Spring Security - 从 配置例子例子 开始我们的学习历程

    1.Spring Security 的配置文件 我们需要为 Spring Security 专门建立一个 Spring 的配置文件,该文件就专门用来作为 Spring Security 的配置. &l ...

  9. 【基于不同设备厂商在处理vlan之间通信配置例子】

    H3C: Dot1q子接口实现vlan之间的通信 一:根据项目需求搭建好拓扑图如下: 二:配置 HUAWEI: CISCO

随机推荐

  1. linux rc.sysinit文件详解

    /etc/rc.d/rc.sysinit 系统初始化脚本的任务 .激活udev和selinux .根据/etc/sysctl.conf文件设定内核参数 .设定系统时钟 .装载键盘映射 .启用交换分区 ...

  2. 微信网页获取openId

    <%@ WebHandler Language="C#" Class="UserAuth" %> public class UserAuth : I ...

  3. ContentProvider官方教程(6)provider支持的数据类型

    Provider Data Types Content providers can offer many different data types. The User Dictionary Provi ...

  4. 13. 用Roberts、Sobel、Prewitt和Laplace算子对一幅灰度图像进行边缘检测。观察异同。

    #include <opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/ ...

  5. HDU 5671 Matrix

    Matrix Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Su ...

  6. AOD.net

    ADO.NET中的五个主要对象 Connection 物件Connection 对象主要是开启程序和数据库之间的连结.没有利用连结对象将数据库打开,是无法从数据库中取得数据的.这个物件在ADO.NET ...

  7. [翻译]观察变换View Transform (Direct3D 9)

    这一节介绍在Direct3d中观察变换的基本概念和怎么去设置观察矩阵. 视口变换把观察者放在世界坐标系中,并把顶点转化到摄像机空间.在摄像机空间,摄像机或者说观察者在原点,观察方向为z轴正向.Dire ...

  8. [dataTables.js error] Uncaught TypeError: myTable.row is not a function

    使用dataTables.js时遇到的问题. 代码如下: var myTable = $('#dynamic-table') .dataTable({ bAutoWidth : false, &quo ...

  9. 长链非编码RNA(lncRNA)

    长链非编码RNA(lncRNA) 转自:http://blog.sina.com.cn/s/blog_909da11301010bkz.html     长链非编码RNA(lncRNA)是一类转录本长 ...

  10. Linux红帽认证----I Want

    仅此设定一个目标,此证一定搞到手!!!