Struts2学习——(三)升级action的配置方式
2015-11-29 18:55
591 查看
今天看到了一篇很好的博文,转载过来,希望可以一起学习。
原文出处:/article/2458197.html
非常感谢原博主!
//***********************************************************************分割线******************************************************************************************************
首先观察以下一个action的简单配置:
[html] view plaincopy
<package name="loginTest" extends="struts-default" namespace="/">
<action name="login" class="cn.luecc.action.LoginAction" >
<result name="success">/loginSuc.jsp</result>
<result name="error">/loginFail.jsp</result>
</action>
</package>
注意package中的namespace,Namespace决定了action的访问路劲,默认为 ””,可以接收所有路径的action,Namespace可以写成/,或者/xxx,或者/xxx/yyy,对应的action访问路径为login.action,/xxx/login.action,/xxx/yyy/login.action。
Namespace最好用模块来进行命名
这里首先说明一点,Action执行的时候并不是一定要执行execute方法的,所以请看下面示例:
[java] view plaincopy
//UserAction.java
package cn.luecc.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
public String add() {
return SUCCESS;
}
}
这个action中并没有execute()方法,那怎么来执行这个action呢?先看以下action配置:
[html] view plaincopy
//struts.xml
<package name="user" extends="struts-default" namespace="/user">
<action name="userAdd" class="cn.luecc.action.UserAction" method="add">
<result>/userAddSuc.jsp</result>
</action>
</package>
在action标签中,name属性值任取,class属性值为你写的action类,method属性值为需要执行的action中的方法名。上面的userAddSuc.jsp很简单,只是显示一句话而已:
[html] view plaincopy
<%@ page language="java" pageEncoding="GB18030"%>
用户添加成功!!
访问的url为:
http://localhost:8080/xxx(1)/user(2)/userAdd.action(3)
其中: (1)为项目名称;(2)为package的namespace;(3)配置的action属性名称
所以这里可以这样访问add方法:
这里我们考虑这样一个问题:如果UserAction中还有一个delete方法或update方法,我们该如何配置呢?
很明显,根据上面的方法,就应该配置更多的action,如
[html] view plaincopy
<action name="userAdd" class="cn.luecc.action.UserAction" method="delete">
<result>/userAddDel.jsp</result>
</action>
<action name="userAdd" class="cn.luecc.action.UserAction" method="update">
<result>/userAddUpd.jsp</result>
</action>
........
再设想,如果UserAction中还有更多的方法,那么这里就需要配置更多的action,是否感觉到这样会很麻烦,所以我们不提倡使用这样的方法,每增加一个方法,就需要多配置一个action,给我们的开发增添了额外的负担,我们提倡使用第以下action的配置方法。
我们只需要配置一个action,采用动态访问的方式:
[html] view plaincopy
<action name="user" class="cn.luecc.action.UserAction">
<result>/userAddSuc.jsp</result>
</action>
我们现在action中添加一个方法:
[java] view plaincopy
public class UserAction extends ActionSupport{
public String add() {
return SUCCESS;
}
public String delete() {
return SUCCESS;
}
public String update() {
return SUCCESS;
}
}
同样我们的userAddSuc.jsp就不能只是添加成功了,所以这里修改为:
<%@ page language="java"pageEncoding="GB18030"%>
用户数据更新成功!!
这样就可以通过以下url访问了add(): http://localhost:8080/xxx/user/user!add.action
如果还有其他方法就将add换成UserAction.java中的方法就可以了,如:
http://localhost:8080/xxx/user/user!delete.action
上面action配置中不管action类中增添了多少方法,都只需要配置一个action,采用动态访问的方式来访问。再设想,如果你的项目中有多个模块,那么就需要多个action,比如上面管理用户用一个UserAction,管理类别用一个CategoryAction,
管理XX用一个XXAction,这样同样需要配置很多的action,为了提高效率,struts2中为我们提供了一种更为便捷的配置方式:通配符配置,采用通配符配置可以将配置量降到最低。
看下面的配置:
[html] view plaincopy
<package name="user" extends="struts-default" namespace="/user">
<action name="*_*" class="cn.luecc.action.{1}Action" method="{2}">
<result>/{1}_{2}_Suc.jsp</result>
</action>
</package>
其中action name属性使用了”*_*”,class的属性值中的{1}代表”*_*”中的前一个星号,method的属性值中的{2}代表”*_*”中的第二个星号;<result>中的{1}{2}跟此一样。再看一下访问的url,那么*号代表的意思就一目了然了: http://localhost:8080/Struts2_004/user/User_add.action 首先看action的名字为User_add,那么”*_*”中的第一个星号就代表:User,第二个星号就代表:add,所以上面的配置在执行的时候就是:
[html] view plaincopy
<action name="User_add" class="cn.luecc.action.UserAction" method="add">
<result>/User_add_Suc.jsp</result>
</action>
这样做的好处就是,当我们事先约定好的情况下,我们的配置文件中只需要利用通配符配置一个action就ok了,所以我们这里要记住一个规则:
约定优于配置
下面是运行示例:
注意:在配置的所有action中,如果一个action中没有通配符,那么此action的优先级最高,其他包含通配符的action则按顺序匹配
原文出处:/article/2458197.html
非常感谢原博主!
//***********************************************************************分割线******************************************************************************************************
首先观察以下一个action的简单配置:
[html] view plaincopy
<package name="loginTest" extends="struts-default" namespace="/">
<action name="login" class="cn.luecc.action.LoginAction" >
<result name="success">/loginSuc.jsp</result>
<result name="error">/loginFail.jsp</result>
</action>
</package>
注意package中的namespace,Namespace决定了action的访问路劲,默认为 ””,可以接收所有路径的action,Namespace可以写成/,或者/xxx,或者/xxx/yyy,对应的action访问路径为login.action,/xxx/login.action,/xxx/yyy/login.action。
Namespace最好用模块来进行命名
这里首先说明一点,Action执行的时候并不是一定要执行execute方法的,所以请看下面示例:
[java] view plaincopy
//UserAction.java
package cn.luecc.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
public String add() {
return SUCCESS;
}
}
这个action中并没有execute()方法,那怎么来执行这个action呢?先看以下action配置:
[html] view plaincopy
//struts.xml
<package name="user" extends="struts-default" namespace="/user">
<action name="userAdd" class="cn.luecc.action.UserAction" method="add">
<result>/userAddSuc.jsp</result>
</action>
</package>
在action标签中,name属性值任取,class属性值为你写的action类,method属性值为需要执行的action中的方法名。上面的userAddSuc.jsp很简单,只是显示一句话而已:
[html] view plaincopy
<%@ page language="java" pageEncoding="GB18030"%>
用户添加成功!!
访问的url为:
http://localhost:8080/xxx(1)/user(2)/userAdd.action(3)
其中: (1)为项目名称;(2)为package的namespace;(3)配置的action属性名称
所以这里可以这样访问add方法:
这里我们考虑这样一个问题:如果UserAction中还有一个delete方法或update方法,我们该如何配置呢?
很明显,根据上面的方法,就应该配置更多的action,如
[html] view plaincopy
<action name="userAdd" class="cn.luecc.action.UserAction" method="delete">
<result>/userAddDel.jsp</result>
</action>
<action name="userAdd" class="cn.luecc.action.UserAction" method="update">
<result>/userAddUpd.jsp</result>
</action>
........
再设想,如果UserAction中还有更多的方法,那么这里就需要配置更多的action,是否感觉到这样会很麻烦,所以我们不提倡使用这样的方法,每增加一个方法,就需要多配置一个action,给我们的开发增添了额外的负担,我们提倡使用第以下action的配置方法。
我们只需要配置一个action,采用动态访问的方式:
[html] view plaincopy
<action name="user" class="cn.luecc.action.UserAction">
<result>/userAddSuc.jsp</result>
</action>
我们现在action中添加一个方法:
[java] view plaincopy
public class UserAction extends ActionSupport{
public String add() {
return SUCCESS;
}
public String delete() {
return SUCCESS;
}
public String update() {
return SUCCESS;
}
}
同样我们的userAddSuc.jsp就不能只是添加成功了,所以这里修改为:
<%@ page language="java"pageEncoding="GB18030"%>
用户数据更新成功!!
这样就可以通过以下url访问了add(): http://localhost:8080/xxx/user/user!add.action
如果还有其他方法就将add换成UserAction.java中的方法就可以了,如:
http://localhost:8080/xxx/user/user!delete.action
上面action配置中不管action类中增添了多少方法,都只需要配置一个action,采用动态访问的方式来访问。再设想,如果你的项目中有多个模块,那么就需要多个action,比如上面管理用户用一个UserAction,管理类别用一个CategoryAction,
管理XX用一个XXAction,这样同样需要配置很多的action,为了提高效率,struts2中为我们提供了一种更为便捷的配置方式:通配符配置,采用通配符配置可以将配置量降到最低。
看下面的配置:
[html] view plaincopy
<package name="user" extends="struts-default" namespace="/user">
<action name="*_*" class="cn.luecc.action.{1}Action" method="{2}">
<result>/{1}_{2}_Suc.jsp</result>
</action>
</package>
其中action name属性使用了”*_*”,class的属性值中的{1}代表”*_*”中的前一个星号,method的属性值中的{2}代表”*_*”中的第二个星号;<result>中的{1}{2}跟此一样。再看一下访问的url,那么*号代表的意思就一目了然了: http://localhost:8080/Struts2_004/user/User_add.action 首先看action的名字为User_add,那么”*_*”中的第一个星号就代表:User,第二个星号就代表:add,所以上面的配置在执行的时候就是:
[html] view plaincopy
<action name="User_add" class="cn.luecc.action.UserAction" method="add">
<result>/User_add_Suc.jsp</result>
</action>
这样做的好处就是,当我们事先约定好的情况下,我们的配置文件中只需要利用通配符配置一个action就ok了,所以我们这里要记住一个规则:
约定优于配置
下面是运行示例:
注意:在配置的所有action中,如果一个action中没有通配符,那么此action的优先级最高,其他包含通配符的action则按顺序匹配
相关文章推荐
- 【Eclipse】Win 7 下 Eclipse 图标无法锁定到任务栏的解决方法
- eclipse mars中的adt配置
- maven学习三:eclipse 创建maven普通项目和web项目
- Java面向对象知识点总结
- 基于xml的Spring多数据源配置和使用
- JAVA面向对象(一)
- Java语法基础
- 初试springWebMVC
- 如何在Java中使用注释
- eclipse
- Spring Data jpa 中@Column 注解解释
- Intellij Idea 将java项目打包成jar
- java基本类型赋值操作的原子性
- java 泛型
- 解决struts2以GET方式提交表单中文乱码问题
- Hibernate和Spring 缓存的二十二问,干货分享
- 基本数据类型和引用数据类型的内存传递的变化
- JAVA 堆栈 堆 方法区 解析
- 在Spring MVC中使用Velocity
- Java中的接口