package详解
1.1. action
A)name action的名称,是外界反问的唯一性标识
B)class action所对应的类
C)method 在一个action中可能有很多个方法,那么我们就可以结合这个属性去访问 一个action中不同的方法体。
如:在LoginAction中有两个方法体,分别是login和checkValid,如何访问呢?
<action name="login" class="com.sun.demo.LoginAction" method="login"/>
<action name="checkValid" class="com.sun.demo.LoginAction" method="checkValid"/>
你会发现这两个action的配置加载了同一个类com.sun.demo.LoginAction,不同的是属性name和属性method的区别,在访问的时候,根据name去访问到对应的类文件,然后再根据对应的method去访问相应的方法体。
DMI【动态调用action的不同方法】:
我们不再根据method属性来访问不同的方法了,而是在前台View页面进行设置:
<action name="login" class="com.sun.demo.LoginAction"/>
VIEW:
<a href="/login!login.action">登录</a>
<a href="/login!checkValid.action">验证</a>
用感叹号【!】来做标识,依次向下执行,前面为action名称,后面是方法名。
以上method和DMI的区别在于前者每个方法可以返回不同的结果,且在每个方法中可以使用不同的拦截器,而后者最终的结果都是一样的,它们使用的拦截器也是一样的,具体使用那种方式进行设置依据开发的实际需要进行选择。
在这里有必要提醒一下:
在设置action属性method时,其多对用的Action类中的方法名可以为“do方法名”,如:
<action
name="login" class="com.sun.demo.LoginAction" method="login"/>
在com.sun.demo.LoginAction类中对应的方法可以写成这样doLogin
通配符映射:
* 代表0-N个字符,但是不包括"/"
** 代表0-N个字符,包括"/"
\ 转义字符
在一个包中可能存在多个action,如:
<action name="addNote" class="com.sun.NoteAction" method="addNote" />
<action name="updateNote" class="com.sun.NoteAction" method="updateNote"/>
<action name="deleteNote" class="com.sun.NoteAction" method="deleteNote"/>
仔细观察就会发现,这些action的名称有些相同的特征,我们可以通过通配符来处理。
<action name="*Note" class="com.sun.NoteAction" method="{1}Note"/>
当我们访问addNote时,add字段就会填补*通配符,同时依据占位符的顺序去查询对应的方法。
对于以上这种action名称的设定,我们一般是在指明对与什么表进行操作的情况下,但是当有多个表时,我们的操作就显得有点麻烦了,现在我们又有了新的设定,如下:
<action name="*_*" class="com.sun.{1}Action" method="{2}Note"/>
也就是设定多个通配符,同时采用占位符遍历的方式去访问各个action中的方法。{0}表示**的整体信息
注意:在用占位符去匹配某个Action的时候,得注意首字母的大小写
通配符的变种:
默认action :
<action name="*"> ....</action>
<action name="main">....</action>
*号可以匹配任何的字符串,所以以上的两个默认的Action会不会发生错误呢?【不会】
总结:
当action的name属性中没有任何通配符时,其优先级最高。
只要有通配符,不论是什么通配符,一律按顺序向下执行。
我们一般依照没有通配符,有通配符,没有匹配的顺序进行编写。
D)Converter
1.2. default-action-ref
<default-action-ref name="login" />
"Login"是一个action的引用,在访问action的时候,如果action不存在,那么就会访问默认的action。但是这个必须放在所有action的最前面,另外值得关注的是,这样的默认处理只是对于action的访问就行了设置,对于访问不存在的页面是无法进行处理的,这就需要在web.xml 中就行设置了。
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
不过这样的设置有时候会出问题,不是总是正确的,这个得参考一下浏览器的高级设置
1.3. default-class-ref
当访问不到指定的action类时,就会调用这个默认的action类进行处理。
1.4. default-interceptor-ref
当访问不到指定的interceptor类时,就会调用这个默认的interceptor进行处理。
1.5. global-exception-mappings
设置全局异常转向,可以被直接访问。
1.6. global-results
设置全局处理结果转向,可以在action类中进行直接的转向。
1.7. Interceptors拦截器
在struts2中,许多人都action都有一个共同需要关心的问题,比如对页面的输入进行验证,对上传的文件进行预处理,防止重复提交,在页面显示前进行下拉列表的初始化,“拦截器”使得其变得相应容易些。
拦截器在action被调用前后都会被调用去执行一些code,struts2框架的大部分功能均是通过拦截器来实现的,如防止重复提交,类型转换,对象封装,校验,文件上传,页面预装载等,每个拦截器都是独立装载的,我们可以根据需要为每一个action配置其所需要的拦截器,例如:一个action需要来进行类型转换和文件上传,那么我们就可以为其设置两个拦截器。
测试一下:
找到xwork.jar包下的com.opensymphony.xwork2.interceptor包下的TimerInterceptor.class.
怎么配置拦截器:
在某个包下编写如下代码:
<interceptors>
<interceptor name="timer" class="com.opensymphony.xwork2.interceptor.TimerInterceptor "/>
</interceptors>
在该包下的任何一个action中,若想要使用该拦截器,那么只要在action中添加如下代码:
<interceptor-ref name="timer"></interceptor-ref>
然后再去运行项目文件,我们发现报错了,为什么呢????
在这里要特别的提醒一下:
我们之前的项目中,package继承了struts-default,这其中实现了各种拦截器,是系统默认创建的,在我们自己不去手动配置拦截器时,系统会默认的调用struts-default中的拦截器,而当我们自己手动配置了拦截器后,系统就不再去调用默认的那些配置了,在上面的例子中,我们的拦截器是配置在一个页面提交的action中的,所以还需要一个参数拦截器,可是我们没有配置所以报错了,而在自己不手动配置拦截器的情况下,在struts-default中这些必须的拦截器配置都是有的,懂了吧。但是我们在配置的时候倒是不妨多参考一下其中的各种信息。
再配置一个拦截器:
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
在需要传递参数的action中引用该拦截器:
<interceptor-ref name="params"></interceptor-ref>
当然了,我们也可以在action中引用默认的拦截器:
<interceptor-ref name="defaultStack"></interceptor-ref>
别的包,子包也可以继承父包,那么在父包中定义的拦截器在子包中也可以使用。
当某些action共同使用多个相同的拦截器时,可以将这些重复使用的拦截器放在一个拦截器栈中:
<interceptors>
<interceptor-stack name="自定义名称">
<interceptor-ref name="name1"></interceptor-ref>
<interceptor-ref name="name2"></interceptor-ref>
...........
</interceptor-stack>
</interceptors>
1.8. result-types
<!--EndFragment-->
分享到:
相关推荐
### Struts2学习笔记 #### 一、Struts2配置文件详解 在深入理解Struts2框架之前,我们首先需要了解其核心配置文件——`struts.xml`。 **1. struts.xml配置** ```xml <?xml version="1.0" encoding="UTF-8"?> <!...
在本篇学习笔记中,我们将聚焦于环境搭建和创建第一个"Hello, World!"程序。 首先,要开始学习Struts2,你需要确保你的开发环境中已经安装了以下基本组件: 1. **Java Development Kit (JDK)**:Struts2依赖于Java...
### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...
完成自定义类型转换器后,需要在配置文件(如struts.xml)中注册这个转换器,这样Struts2在进行类型转换时就会使用这个转换器来处理`Point`类型的字段。 ```xml <struts> <!-- ... --> <constant name="struts....
【张冰Struts2学习笔记】0102_第一个Struts2实例 在Java Web开发领域,Struts2框架是十分重要的MVC(模型-视图-控制器)架构之一,它极大地简化了Web应用程序的开发流程。这篇学习笔记将带你入门Struts2,通过创建...
### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...
Struts2是一个强大的MVC(Model-View-Controller)框架,它在Java Web开发中扮演着重要的角色。本文将深入探讨Struts2的核心配置、...通过深入学习和实践,开发者能够利用Struts2的强大功能,提升开发效率和应用质量。
### Struts学习笔记 #### 一、Struts2框架简介 Struts2是一个开源的、用于开发Java EE Web应用程序的MVC框架。它基于Struts 1进行了改进,提供了更加强大和灵活的功能,比如拦截器、动态方法调用、类型转换等。...
本篇笔记将详细介绍如何在MyEclipse环境中配置Struts2.0,并逐步演示从创建运行环境到实现简单的验证和自定义类型转换的过程。 首先,我们需要准备运行环境。MyEclipse 6.0 和 Tomcat 5.5 是开发Struts2.0应用的...
- `struts.xml`是Struts2的核心配置文件,用于定义包(Package)、Action及其映射等。一个简单的示例配置如下: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software ...
### Struts2学习笔记2012 #### 一、建立一个Struts2工程 **步骤详解:** 1. **创建Web项目:** - 在MyEclipse中选择“File” > “New” > “Dynamic Web Project”,创建一个新的Web项目。 2. **解压并配置...
Struts2 学习笔记-part2: 实现用户登录功能 在上一部分中,我们了解了构建一个基于Struts2的Java Web项目所需的基本库和配置文件。现在,我们将逐步实现一个简单的用户登录功能。 一、创建Action类 在Struts2框架...
本文详细介绍了如何在MyEclipse环境下配置Struts2的基本运行环境,包括导入jar包、配置web.xml和struts.xml文件、编写Action类以及使用Struts标签库等关键步骤。通过本文的介绍,读者应能熟练掌握Struts2环境的配置...
Struts2的核心配置文件是`struts.xml`,它定义了Action、Result、包(Package)以及其他相关的配置。配置文件中,`<constant>`标签用于设置全局常量,如`struts.devMode`控制开发模式。`<package>`标签用于组织...
本笔记将深入探讨Struts2的核心组件、配置以及它的一些关键特性。 首先,让我们从`web.xml`配置文件开始。这个文件是Java web应用的部署描述符,它告诉服务器如何处理请求。在Struts2中,我们定义了一个名为`struts...
### Struts2.1学习笔记 #### Struts2的来源与优点 - **来源**:Struts2是在WebWork2的基础上发展起来的,它继承了WebWork2的优点,并且进行了改进,使其更适合现代Web应用程序的需求。与Struts1相比,Struts2的...