- 浏览: 223531 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (121)
- tomcat (1)
- 线程 (1)
- java基础 (7)
- jsp、EL (1)
- JSON (1)
- Struts2 (14)
- properties (1)
- log4j (1)
- Hibernate (14)
- xml (1)
- 存储过程 (1)
- 数据库 (5)
- 动态参数传递 (1)
- webservice (1)
- Spring (10)
- jar包冲突 (1)
- js (8)
- jQuery (5)
- 动态代理技术 (1)
- 负载均衡 (1)
- WebLogic (1)
- 异常处理办法 (3)
- struts1 (4)
- url重写技术 (1)
- 聊天室 (1)
- ip地址 (2)
- html (4)
- ajax (1)
- 其他 (6)
- ibatis (6)
- oracle (2)
- 服务器 (1)
- 常见异常 (3)
- jms (1)
- 乱码 (2)
- web基础 (1)
- JPA (2)
- 开发软件 (3)
- MongoDB (1)
- play (1)
最新评论
-
whjpyyyy:
有用。。
Struts2的iterator各种用法 -
cuisuqiang:
关于pushlet的使用:http://cuisuqiang. ...
网页聊天室的原理
Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。
该方法如下:
public String execute() throws Exception
Struts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的public方法即可:
public String xxx()
在实际开发中,action类很少直接实现Action接口,通常都是从com.opensymphony.xwork2.ActionSupport类继承,ActionSupport实现了Action接口和其他一些可选的接口,提供了输入验证,错误信息存取,以及国际化的支持,选择从ActionSupport继承,可以简化action的定义。
开发好action之后,好需要对action进行配置,以告诉Struts2框架,针对某个URL的请求应该交由哪个action进行处理。
1. Action映射:
action映射是Struts2框架中的基本” 工作单元”,action映射就是将一个请求URL(即action的名字)映射到一个action类,当一个请求匹配某个action的名字时,框架就使用这个映射来确定如何处理请求。
action元素的完整属性表
属性 是否必须 说明
name 是 action的名字,用于匹配URL
class 否 Action实现类的完整类名
method 否 执行Action类时调用的方法
convert 否 应用于action的类型转换的完整类名
例如:
<action name="user" class="org.lesson05.UserAction">
<result name="success">/user.jsp</result>
</action>
2. 使用method属性
在配置action时,我们可以通过action元素的method属性来指定action调用的
方法,所指定的方法,必须遵循与execute方法相同的格式。
在Struts2.xml文件中,我们可以为同一个action类配置不同的别名,并使用
method属性。
在Struts.xml文件中为同一个Action类配置不同的别名
<!-- 使用method属性 -->
<package name="methods" namespace="/"
extends="struts-default">
<!-- 对应着MethodAction里面的execute方法 -->
<action name="list" class="org.lesson05.MethodAction">
<result name="success">/Methods/list.jsp</result>
</action>
<!-- 对应着MethodAction里面的add方法 -->
<action name="add" class="org.lesson05.MethodAction"
method="add">
<result name="success">/Methods/add.jsp</result>
</action>
<!-- 对应着MethodAction里面的edit方法 -->
<action name="edit" class="org.lesson05.MethodAction"
method="edit">
<result name="success">/Methods/edit.jsp</result>
</action>
<!-- 对应着MethodAction里面的delete方法 -->
<action name="delete"
class="org.lesson05.MethodAction"
method="delete">
<result name="success">/Methods/delete.jsp</result>
</action>
</package>
对应的MethodAction类,代码如下:
import com.opensymphony.xwork2.ActionSupport;
public class MethodAction extends ActionSupport
{
@Override
public String execute() throws Exception
{
return SUCCESS;
}
public String add() throws Exception
{
return SUCCESS;
}
public String edit() throws Exception
{
return SUCCESS;
}
public String delete() throws Exception
{
return SUCCESS;
}
}
使用action的method属性可以任意指定处理请求的方法(只要该方法和execute
方法具有相同的格式),这样就可以在同一个类中完成相关的任务,而不需要去编写不
同的Action类。
注意:Struts2在根据action元素的method属性查找方法时有两种途径:
1.查找与method属性值完全一致的方法.
2.查找doMethod()形式的方法.
3.动态方法调用:
另外一种无需配置就可以直接调用Action中的非execute方法的方式,是使用
Struts2的动态方法调用。
动态方法调用是在action的名字中使用感叹号(!)来标识要调用的方法名,其语法格
式为 actionName!methodName.action
例如,我们配置了如下的action
<action name="user" class="org.lesson05.UserAction">
<result name="success">/Methods/list.jsp</result>
</action>
当请求/user!delete.action时,就会自动调用UserAction中的delete()方
法
提示,这种调用方式会带来安全隐患!
4.模拟Struts1中的ForwardAction
<action name="user">
<result>/index.jsp</result>
</action>
这样写就可以了.
5.默认的action
如果请求一个不存在的action,结果将是HTTP404错误。在Struts2中,可以指定一个默认的action,如果一个请求没有其他的action匹配,那么默认的action将被执行。
默认的action使用default-action-ref元素来声明,如下所示:
<!-- 默认action -->
<package name="defaultAction" namespace="/default"
extends="struts-default">
<default-action-ref name="error"></default-action-ref>
<action name="defaultaction"
class="org.lesson05.DefaultAction">
<result name="success">/defaultAction.jsp</result>
</action>
<action name="error">
<result>/error.jsp</result>
</action>
</package>
注意:根据struts-2.0.dtd中定义的package元素的内容模型,
default-acion-ref必须在action元素之前使用。
如果请求的是/default/defaultaction1.action,框架找不到映射到defaultaction1的action,那么名为error的action将被调用。
注意:每个包中都可以有它自己默认的action,但是每一个名称空间应该只有一个默认action。如果具有相同名称空间的多个包中都声明了默认action,那么哪一个action才是默认的将无法保证。
注意:默认action只对action的访问有效。如果你访问一个非action的资源,例如/user.jsp,而该页面不存在,这时仍会看到HTTP404错误。如果想为整个Web应用程序指定默认页面,需要在web.xml文件中对HTTP404错误指定相应的错误处理页面。
6.通配符映射
随着Web应用程序的增加,所需的Action也会更多,从而导致大量的action映射,使用通配符可以减少action配置的数量,使一些具有类似行为的Action或者Action方法可以使用通用的样式来配置。
通配符即星号(*),用于匹配0个或多个字符,在配置action时,可以在action元素的name属性中使用星号(*)来匹配任意的字符。
以下是在action映射中使用通配符:
<action name="news*"
class="org.struts2.lesson05.News{1}Action">
<result name="success">/WEB-INF/News/{1}.jsp</result>
</action>
我们在action元素的name属性中使用了通配符(*),允许这个映射匹配所有以/news开始的URL,例如/newsAdd,/newsEdit,/newsDelete,但是,如果请求的是/newsEdit/add,那么这个映射就不会被匹配。
在上面,有一个特殊的记号{1},这是作为占位符使用的,它将被通配符所匹配的值替换,例如访问/newsEdit,通配符(*)匹配的部分是Edit,那么,这个值将替换{1},最终调用的类是org.struts2.lesson05.NewsEditAction,Action
执行成功后导向的结果页面是/WEB-INF/News/Edit.jsp。
在action映射和action结果中,通配符匹配的值可以用记号{N}来访问,N是从1到9的数字,指出替换的是哪一个通配符匹配的值。整个请求URL可以用记号{0}来访问。例如如下的action映射:
<action name="*_*" class="org.struts2.lesson05.{1}Action"
method="{2}">
<result>/WEB-INF/News/{0}.jsp</result>
</action>
当访问/News_delete时,name属性中的第一个”*”匹配News,第二个”*”匹配delete,class属性中使用的记号是{1},所以被News所替换,method属性中使用的记号是{2},于是被delete所替换。结果映射中使用的记号是{0},于是被整个URL替换,即News_delete所替换。整个替换后的结果是:当请求/News_delete时,框架调用NewsAction实例的delete方法对请求进行处理。执行成功后,请求被导向到/WEB-INF/News/News_delete.jsp页面。
通配符方法设置的另一种常见方式是使用后缀通配符,即将”*”放在action名字的后面,在”*”和名字前缀之间使用一个特殊字符作为分隔,常用的特殊字符是下划线(_),当然也可以使用其他字符。例如:
<action name="News_*"
class="org.struts2.lesson05.NewsAction" method="{1}">
<result>/WEB-INF/News/{0}.jsp</result>
</action>
当请求/News_delete时,调用的是NewsAction实例的delete方法,当请求/News_edit的时候,调用的是NewsAction实例的edit方法。
该方法如下:
public String execute() throws Exception
Struts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的public方法即可:
public String xxx()
在实际开发中,action类很少直接实现Action接口,通常都是从com.opensymphony.xwork2.ActionSupport类继承,ActionSupport实现了Action接口和其他一些可选的接口,提供了输入验证,错误信息存取,以及国际化的支持,选择从ActionSupport继承,可以简化action的定义。
开发好action之后,好需要对action进行配置,以告诉Struts2框架,针对某个URL的请求应该交由哪个action进行处理。
1. Action映射:
action映射是Struts2框架中的基本” 工作单元”,action映射就是将一个请求URL(即action的名字)映射到一个action类,当一个请求匹配某个action的名字时,框架就使用这个映射来确定如何处理请求。
action元素的完整属性表
属性 是否必须 说明
name 是 action的名字,用于匹配URL
class 否 Action实现类的完整类名
method 否 执行Action类时调用的方法
convert 否 应用于action的类型转换的完整类名
例如:
<action name="user" class="org.lesson05.UserAction">
<result name="success">/user.jsp</result>
</action>
2. 使用method属性
在配置action时,我们可以通过action元素的method属性来指定action调用的
方法,所指定的方法,必须遵循与execute方法相同的格式。
在Struts2.xml文件中,我们可以为同一个action类配置不同的别名,并使用
method属性。
在Struts.xml文件中为同一个Action类配置不同的别名
<!-- 使用method属性 -->
<package name="methods" namespace="/"
extends="struts-default">
<!-- 对应着MethodAction里面的execute方法 -->
<action name="list" class="org.lesson05.MethodAction">
<result name="success">/Methods/list.jsp</result>
</action>
<!-- 对应着MethodAction里面的add方法 -->
<action name="add" class="org.lesson05.MethodAction"
method="add">
<result name="success">/Methods/add.jsp</result>
</action>
<!-- 对应着MethodAction里面的edit方法 -->
<action name="edit" class="org.lesson05.MethodAction"
method="edit">
<result name="success">/Methods/edit.jsp</result>
</action>
<!-- 对应着MethodAction里面的delete方法 -->
<action name="delete"
class="org.lesson05.MethodAction"
method="delete">
<result name="success">/Methods/delete.jsp</result>
</action>
</package>
对应的MethodAction类,代码如下:
import com.opensymphony.xwork2.ActionSupport;
public class MethodAction extends ActionSupport
{
@Override
public String execute() throws Exception
{
return SUCCESS;
}
public String add() throws Exception
{
return SUCCESS;
}
public String edit() throws Exception
{
return SUCCESS;
}
public String delete() throws Exception
{
return SUCCESS;
}
}
使用action的method属性可以任意指定处理请求的方法(只要该方法和execute
方法具有相同的格式),这样就可以在同一个类中完成相关的任务,而不需要去编写不
同的Action类。
注意:Struts2在根据action元素的method属性查找方法时有两种途径:
1.查找与method属性值完全一致的方法.
2.查找doMethod()形式的方法.
3.动态方法调用:
另外一种无需配置就可以直接调用Action中的非execute方法的方式,是使用
Struts2的动态方法调用。
动态方法调用是在action的名字中使用感叹号(!)来标识要调用的方法名,其语法格
式为 actionName!methodName.action
例如,我们配置了如下的action
<action name="user" class="org.lesson05.UserAction">
<result name="success">/Methods/list.jsp</result>
</action>
当请求/user!delete.action时,就会自动调用UserAction中的delete()方
法
提示,这种调用方式会带来安全隐患!
4.模拟Struts1中的ForwardAction
<action name="user">
<result>/index.jsp</result>
</action>
这样写就可以了.
5.默认的action
如果请求一个不存在的action,结果将是HTTP404错误。在Struts2中,可以指定一个默认的action,如果一个请求没有其他的action匹配,那么默认的action将被执行。
默认的action使用default-action-ref元素来声明,如下所示:
<!-- 默认action -->
<package name="defaultAction" namespace="/default"
extends="struts-default">
<default-action-ref name="error"></default-action-ref>
<action name="defaultaction"
class="org.lesson05.DefaultAction">
<result name="success">/defaultAction.jsp</result>
</action>
<action name="error">
<result>/error.jsp</result>
</action>
</package>
注意:根据struts-2.0.dtd中定义的package元素的内容模型,
default-acion-ref必须在action元素之前使用。
如果请求的是/default/defaultaction1.action,框架找不到映射到defaultaction1的action,那么名为error的action将被调用。
注意:每个包中都可以有它自己默认的action,但是每一个名称空间应该只有一个默认action。如果具有相同名称空间的多个包中都声明了默认action,那么哪一个action才是默认的将无法保证。
注意:默认action只对action的访问有效。如果你访问一个非action的资源,例如/user.jsp,而该页面不存在,这时仍会看到HTTP404错误。如果想为整个Web应用程序指定默认页面,需要在web.xml文件中对HTTP404错误指定相应的错误处理页面。
6.通配符映射
随着Web应用程序的增加,所需的Action也会更多,从而导致大量的action映射,使用通配符可以减少action配置的数量,使一些具有类似行为的Action或者Action方法可以使用通用的样式来配置。
通配符即星号(*),用于匹配0个或多个字符,在配置action时,可以在action元素的name属性中使用星号(*)来匹配任意的字符。
以下是在action映射中使用通配符:
<action name="news*"
class="org.struts2.lesson05.News{1}Action">
<result name="success">/WEB-INF/News/{1}.jsp</result>
</action>
我们在action元素的name属性中使用了通配符(*),允许这个映射匹配所有以/news开始的URL,例如/newsAdd,/newsEdit,/newsDelete,但是,如果请求的是/newsEdit/add,那么这个映射就不会被匹配。
在上面,有一个特殊的记号{1},这是作为占位符使用的,它将被通配符所匹配的值替换,例如访问/newsEdit,通配符(*)匹配的部分是Edit,那么,这个值将替换{1},最终调用的类是org.struts2.lesson05.NewsEditAction,Action
执行成功后导向的结果页面是/WEB-INF/News/Edit.jsp。
在action映射和action结果中,通配符匹配的值可以用记号{N}来访问,N是从1到9的数字,指出替换的是哪一个通配符匹配的值。整个请求URL可以用记号{0}来访问。例如如下的action映射:
<action name="*_*" class="org.struts2.lesson05.{1}Action"
method="{2}">
<result>/WEB-INF/News/{0}.jsp</result>
</action>
当访问/News_delete时,name属性中的第一个”*”匹配News,第二个”*”匹配delete,class属性中使用的记号是{1},所以被News所替换,method属性中使用的记号是{2},于是被delete所替换。结果映射中使用的记号是{0},于是被整个URL替换,即News_delete所替换。整个替换后的结果是:当请求/News_delete时,框架调用NewsAction实例的delete方法对请求进行处理。执行成功后,请求被导向到/WEB-INF/News/News_delete.jsp页面。
通配符方法设置的另一种常见方式是使用后缀通配符,即将”*”放在action名字的后面,在”*”和名字前缀之间使用一个特殊字符作为分隔,常用的特殊字符是下划线(_),当然也可以使用其他字符。例如:
<action name="News_*"
class="org.struts2.lesson05.NewsAction" method="{1}">
<result>/WEB-INF/News/{0}.jsp</result>
</action>
当请求/News_delete时,调用的是NewsAction实例的delete方法,当请求/News_edit的时候,调用的是NewsAction实例的edit方法。
发表评论
-
struts2.0拦截器token的使用导致数据无法绑定
2012-07-19 18:29 1142之前在用struts2.0做表单提交时,为了防止重复提交,使用 ... -
struts2表单重复提交问题
2012-07-19 18:23 912struts2 使用拦截器来检查表单是否重复 ... -
struts.xml详解
2012-06-14 16:27 1458一。常量配置 1. 在struts2中配 ... -
struts.properties配置详解
2012-06-08 17:29 717Struts 2框架有两个核 ... -
struts2配置文件详解
2012-06-08 15:59 19261) struts-default.xml 这 ... -
struts1安全问题,和struts2的区别
2012-05-28 10:21 1193struts 1.x的一个安全性问 ... -
Struts2的iterator各种用法
2012-04-20 18:00 71484、普通属性 public String execute(){ ... -
struts.devMode
2012-04-19 13:46 1391struts.devMode也就是struts的开发模式,默认 ... -
Struts2实现文件上传
2012-04-18 11:15 826Struts2中提供了fileUpload拦截器,为文件上传提 ... -
jsp页面中Struts2标签实用注意事项
2012-04-17 18:24 1069org.apache.jasper.JasperExcepti ... -
struts2 文件上传 文件大小配置问题
2012-04-17 18:20 1595问题描述:struts.xml中设 ... -
struts2的codebehind插件
2012-04-10 17:56 842codebehind plugin是一个可以简化struts2 ... -
Struts2 的result类型
2012-04-10 16:56 867web.xml 中 <filter> < ...
相关推荐
1. `@Action`: 这是Struts 2中最核心的注解,用于标记一个方法为处理请求的Action。你可以指定Action的名字、结果页面和其他属性。例如: ```java @Action(value = "myAction", results = { @Result(name = ...
首先,Action配置是Struts2中定义业务逻辑入口的关键,它将HTTP请求映射到特定的Java类方法上。在`struts.xml`中,一个Action配置通常由`<action>`元素定义,包含了多个属性,如`name`、`class`、`method`等。 `...
- **Interceptor**:在`package`元素内部,可以定义拦截器或引用拦截器堆栈,拦截器是Struts2中非常重要的组件,用于在Action执行前后进行一系列的前置和后置处理操作,比如登录验证、数据校验等。 - **Result ...
- 请求编码:Struts2配置文件(struts.xml或struts.properties)中可以设定全局的请求编码格式,例如`<constant name="struts.i18n.encoding" value="UTF-8"/>`。 - 表单编码:在HTML表单中,可以使用`accept-...
- **定义**:Action类是Struts 2中的核心组件之一,它负责处理用户的请求并将数据传递给视图层。 - **特点**:Action类可以使用注解或XML配置文件进行配置,这为开发人员提供了极大的灵活性。通过实现`Action`接口...
在Struts2中,Action类扮演了控制器的角色,它接收请求,执行相关逻辑,并返回一个表示结果的字符串,这个字符串被用来决定显示哪个视图。 **Struts2框架的执行流程**: 1. 用户发送HTTP请求到服务器。 2. `web.xml...
Struts2 中 Action 接收参数的方法 Struts2 框架中,Action 组件可以通过多种方式接收参数,这些方式包括使用 Action 的属性、使用 DomainModel 和使用 ModelDriven。下面将详细介绍这些方法: 使用 Action 的属性...
在Struts2中,Action的配置和使用方式有多种,下面将详细介绍Struts2 Action参数的详细说明。 首先,我们来看Action的配置格式。在Struts2的配置文件(通常是struts.xml)中,Action的基本配置结构如下: ```xml ...
- **Action**:在Struts2中,Action是业务逻辑的载体,负责处理用户请求并返回结果。每个Action对应一个特定的用户操作。 - **Result**:Action执行完毕后,会返回一个Result,定义了页面跳转或数据呈现的方式。 ...
在 Struts2 框架中,Redirect 和 Redirect-action 是两个不同的 Result 配置类型。Redirect 配置用于重定向到一个新的 URL,而 Redirect-action 配置用于重定向到一个 Action。 Redirect-action 配置可以省略后缀名...
Action是Struts2中的核心组件,它负责处理用户的请求并执行业务逻辑。在Struts2中,Action类需要实现`com.opensymphony.xwork2.Action`接口,或者更常见的是继承`com.opensymphony.xwork2.ActionSupport`,这个基类...
根据提供的信息,我们可以推断出这是一本关于Struts 2框架的书籍——《Struts 2实战 Struts 2 in action 的中文版》。本书主要介绍了Struts 2框架的相关概念、工作原理以及实际应用案例等内容。接下来,我们将根据...
例如,一个简单的Action配置可能如下: ```xml <package name="default" namespace="/" extends="struts-default"> <action name="hello" class="com.example.HelloWorldAction"> <result name="success">/Hello...
STRUTS2 Convention 零配置是Struts2框架中的一种高级特性,旨在简化应用程序的配置,让开发者能够更快地构建MVC应用。从Struts2.1版本开始,推荐使用Convention插件替代Codebehind插件,因为它更加自动化,几乎无需...
- 在浏览器中访问`http://localhost:8080/Struts2Test/hello`,如果一切配置正确,你应该能看到"hello.jsp"页面显示Action返回的结果。 通过以上步骤,你已经在Eclipse中成功配置并运行了Struts2框架。这是一个...
`struts.xml` 文件是Struts2的核心配置文件之一,主要负责管理和定义应用程序中的Action映射以及相关的Result定义。具体来说,该文件包括以下几个关键部分: 1. **Action 映射**: - 指定每个Action的名称、执行的...
例如,如果你有一个应用,所有的Action名称都遵循某种模式,如`user_*`,你可以使用通配符`user_*`来定义一个Action配置,这将自动覆盖所有符合该模式的Action。这样,你就不需要为每一个特定的Action如`user_save`...
本文将围绕Struts2中的关键配置进行深入探讨,旨在帮助开发者更好地理解和掌握Struts2的核心功能。 #### 二、Struts2核心配置 ##### 1. **ActionServlet配置** - **ActionServlet** 是Struts2的核心组件之一,...
同时,`struts.xml`文件中的配置会指导Struts2如何处理请求和响应,你需要在这里定义Action、结果类型、拦截器栈等。 总之,Struts2包和配置文件为你提供了构建高效、结构化的Web应用的工具和蓝图。通过合理的配置...
Convention 插件可以通过设置 struts-plugin.xml 文件中的 <constant name="struts.convention.package.locators" value="action,actions,struts,struts2"/> 来配置 Action 类存在的路径搜索包。这个配置将所有包含...