配置Action
来源:互联网 发布:笔记本电脑自拍软件 编辑:程序博客网 时间:2024/06/10 23:15
包和命名空间:< package…/>
name:这是一个必需属性,该属性指定该包的名字,该名字是该包被其他包引用的key。
extends:该属性是一个可选属性,该属性指定该包继承其他包。继承其他包,可以继承其他包中的Action定义,拦截器定义等。
namespace:该属性是一个可选属性,该属性定义该包的命名空间。
abstract:该属性是一个可选属性,它指定该包是否是一个抽象包。抽象包中不能包含Action定义。
注意:
①Struts2之所以提供命名空间的功能,主要是为了处理同一个web应用中包含同名Action的情形,同一个命名空间里不能有同名的Action,不同的命名空间里可以有同名的Action。
②Struts2不支持为单独的Action设置命名空间,而是通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间。如果配置< package…/>时没有指定namespace属性,则该包下的所有Action处于默认的包空间下。
例子:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <!-- 开发模式 --> <constant name="conststruts.devMode" value="true"/> <!-- 下面配置名为slow的包,该包继承了Struts2的默认包,使用默认指定空间 --> <package name="slow" extends="struts-default"> <!-- 配置login的Action --> <action name="login" class="csdn.slow.app.action.LoginAction"> <result name="error">/WebContent/error.jsp</result> <result name="success">/WebContent/welcome.jsp</result> </action> </package> <!-- 下面配置名为get的包,该包继承了Struts2的默认包。指定该包的命名空间为/book --> <package name="get" extends="struts-default" namespace="/book"> <!-- 配置一个名为getBooks的Action --> <action name="getBooks" class="csdn.slow.app.action.GetBookAction"> <result name="login">/WebContent/login.jsp</result> <result name="success">/WebContent/showBook.jsp</result> </action> </package></struts>
☞注意:当某个包指定了命名空间后,该包下所有的Action处理的URL应该是命名空间+Action名。例如上面例子getBooks的Action:
http://localhost:8080/Struts2_1003/book/getBooks.action
☞注意:
①请求/barspace/bar.action的过程:查找/barspace命名空间里的bar的Action→(if找不到)查找默认命名空间里的bar的Action→(if找不到)系统出错。
②请求/barspace/search/bar.action的过程:查找/barspace/search命名空间里的bar的Action→(if找不到)查找默认命名空间里的bar的Action→(if找不到)系统出错。
③请求/bar.action的过程:查找根命名空间里的bar的Action→(if找不到)查找默认命名空间里的bar的Action→(if找不到)系统出错。
使用Action的动态方法调用
在struts.xml添加:
<!-- 设置支持动态方法调用,默认是false --><constant name="struts.enable.DynamicMethodInvocation" value="true"/>
例子:用户登录和注册
测试结果:
登录:
注册:
代码:
login.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><%@taglib prefix="s" uri="/struts-tags"%><script> function regist(){ //获取页面的第一个表单 targetForm = document.forms[0]; //动态修改表单的action属性 targetForm.action = "login!regist"; }</script><html> <head> <title><s:text name="LoginPage"/></title> </head> <body> <form action="login" method="post"> 用户名:<input type="text" name="username"><br> 密 码:<input type="password" name="password"><br> <input type="submit" value="登录"> <input type="submit" value="注册" onclick="regist();"/> </form> </body></html>
LoginRegisterAction.java:
package csdn.slow.app.action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class LoginRegisterAction extends ActionSupport { //封装用户请求参数的两个属性 private String username; private String password; //封装处理结果的tip属性 private String tip; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getTip() { return tip; } public void setTip(String tip) { this.tip = tip; } //Action包含的注册控制逻辑 public String regist() throws Exception { ActionContext.getContext().getSession().put("user", getUsername()); setTip("恭喜您,"+getUsername()+",您已经注册成功!"); return SUCCESS; } //Action默认包含的控制逻辑 public String execute() throws Exception { if(getUsername().equals("slow") && getPassword().equals("slow")) { ActionContext.getContext().getSession().put("user", getUsername()); setTip("欢迎,"+getUsername()+",您已经登录成功!"); return SUCCESS; } else { return ERROR; } }}
welcome.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><html> <head> <title>成功页面</title> </head> <body> ${requestScope.tip } </body></html>
struts.xml:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <!-- 设置支持动态方法调用,默认是false --> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <!-- 开发模式 --> <constant name="conststruts.devMode" value="true"/> <!-- 下面配置名为slow的包,该包继承了Struts2的默认包,使用默认指定空间 --> <package name="slow" extends="struts-default"> <!-- 配置login的Action --> <action name="login" class="csdn.slow.app.action.LoginRegisterAction"> <result name="error">/WebContent/error.jsp</result> <result name="success">/WebContent/welcome.jsp</result> </action> </package></struts>
指定method属性及使用通配符
(1)指定method属性
改变上例的struts.xml:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <!-- 设置支持动态方法调用,默认是false --> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <!-- 开发模式 --> <constant name="conststruts.devMode" value="true"/> <!-- 下面配置名为slow的包,该包继承了Struts2的默认包,使用默认指定空间 --> <package name="slow" extends="struts-default"> <!-- 配置login的Action,处理类为LoginRegistAction,默认使用execute方法处理请求 --> <action name="login" class="csdn.slow.app.action.LoginRegisterAction"> <result name="error">/WebContent/error.jsp</result> <result name="success">/WebContent/welcome.jsp</result> </action> <!-- 配置regist的Action,处理类为LoginRegistAction,指定使用regist方法处理请求 --> <action name="regist" class="csdn.slow.app.action.LoginRegisterAction" method="regist"> <!-- 定义逻辑视图和物理视图之间的映射关系 --> <result name="error">/WebContent/error.jsp</result> <result name="success">/WebContent/welcome.jsp</result> </action> </package></struts>
(2)使用通配符
☞在配置< action…/>元素时,允许在指定name属性时使用模式字符串(即用”“代表一个或多个任意字符),接下来就可以在class、method属性及< result…/>子元素中使用{N}的形式来代表前面第N个星号( )所匹配的子串。
改变的struts.xml:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <!-- 设置支持动态方法调用,默认是false --> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <!-- 开发模式 --> <constant name="conststruts.devMode" value="true"/> <!-- 下面配置名为slow的包,该包继承了Struts2的默认包,使用默认指定空间 --> <package name="slow" extends="struts-default"> <!-- 使用模式字符串定义Action的name,指定所有以Action结尾的请求,--> <!-- 都可用LoginRegisterAction来处理,method属性使用{1} --> <!-- 这个{1}代表进行模式匹配时第一个*所代替的字符串 --> <action name="*Action" class="csdn.slow.app.action.LoginRegisterAction" method="{1}"> <result name="error">/WebContent/error.jsp</result> <result name="success">/WebContent/welcome.jsp</result> </action> </package></struts>
☞注意:
①< action…/>元素的class属性也可以使用{N}表达式,即:
<action name="*Action" class="csdn.slow.app.action.{1}Action"> ... </action>
②< action…/>元素的class属性和method属性同时使用{N}表达式,即:
<action name="*_*" class="actions.{1} method="{2}"> ... </action>
③处理所有匹配Crud_*的请求:
<action name="Crud_*" class="slow.Crud method="{1}"> ... </action>
④在< result…/>子元素中使用{N}表达式
<action name="*"> <result>/{1}.jsp</result></action>
☞注意:
①如果有URL为abcAction.action的请求,如果struts.xml文件中有名为abcAction的Action,则一定由该Action来处理用户请求;如果struts.xml文件中没有名为abcAction的Action,则搜寻name属性值能匹配abcAction的Action,例如name为*Action或*, *Action并不会比*更优先匹配abcAction的请求,而是先找到哪个Action,就会由哪个Action来处理用户请求。
配置默认Action
<!-- 配置一个默认Action,默认Action为simpleViewResultAction --><default-action-ref name="simpleViewResultAction"/>
配置Action的默认处理类
<!-- 配置Action的默认处理类 --><default-class-ref class="com.opensymphony.xwork2.ActionSupport"/>
- 配置action
- Action配置
- 配置Action
- 配置Action
- Struts2配置--Action配置
- struts2 action 配置方法
- Action的配置
- Struts中配置Action
- struts2配置 action
- 笔记action的配置
- Action映射配置元素
- struts之action配置
- Action配置方法
- STRUTS2的Action配置
- Struts2 action配置方法
- 使用Annotation配置Action
- struts2 action 配置方法
- struts2 action配置
- 走进AngularJs(四)自定义指令----(中)
- MFC -- CListCtrl使用
- 微信小程序学习用demo推荐:列表项左滑删除效果
- 用g++编译生成动态连接库*.so的方法及连接
- zoj2878
- 配置Action
- Android 操作sqllite数据库
- 我是一个线程
- mouseover与mouseout的差异与联系
- 走进AngularJs(三)自定义指令-----(上)
- ActiveMQ入门实例
- 关于CSS hack的部分代码(IE)
- 大家好
- Android杀死正在运行的进程