struts2动态方法调用和通配符配置

struts2默认一个action需要继承ActionSupport并提供默认execute方法,在struts.xml文件中需要配置action对应的类和返回结果页面。随着开发的进行,请求会越来越多,这样我们的action会越来越多,而且在struts.xml中的配置也会越来越多,这么繁琐的编码和配置,肯定不是struts2的初衷。当然有可以解决这种多请求的办法。我们可以在一个action总定义多个方法,减少了action类的编写,但是同样需要配置action方法和结果页面。这就有了动态方法调用和通配符配置。

动态方法调用(action和method之间用感叹号!,这是规定)

struts2默认关闭了动态方法调用,需要在配置中开启,配置常量为:struts.enable.dynamicmethodinvocation=true。开启之后,我们访问/struts/user!add.action就可以访问到UserAction中的add方法,同理,我们可以通过/struts/user!list.action访问UserAction中的list方法。我们开启了动态方法调用,可以访问到我们对应的方法,但是结果页面,还是需要配置,这里引入了一个struts2-convention-plugin(pom.xml需要引入struts2-convention-plugin依赖),他可以帮助我们找到结果页面。

struts2动态方法调用和通配符配置_第1张图片

UserAction.java的代码:

package com.xxx.struts.action;
public class UserAction {
	
	public String list(){
		return "list";
	}
	
	public String add(){
		return "edit";
	}
	
	public String update(){
		return "edit";
	}
}

访问:http://localhost:8080/struts/user!add.action,得到得页面:

访问:http://localhost:8080/struts/user!list.action,得到得页面:

通配符配置(action和method之间用下划线,可以配置)

通配符可以通过action_*的方式访问action下的相关方法,在struts.xml中配置如下。

 
    
         WEB-INF/template/user-edit.jsp
         WEB-INF/template/user-list.jsp
    
 

这里的*就是指定的方法,{1}代表*处的方法,如果*是add那么访问对应的add方法,如果是list,那么访问对应的list方法。

UserAction.java

package com.xxx.struts.action;
import org.apache.struts2.convention.annotation.ParentPackage;
@ParentPackage("mystruts")
public class UserAction {
	
	public String list(){
		return "list";
	}
	
	public String add(){
		return "edit";
	}
	
	public String update(){
		return "edit";
	}
}

访问:http://localhost:8080/struts/user_add.action,得到得页面:

访问:http://localhost:8080/struts/user_list.action,得到的页面:

实现了动态方法调用。

另外如果项目中加入了struts2-config-browser插件,我们可以通过访问action服务列表,查看我们的action映射:

http://localhost:8080/struts/config-browser/actionNames.action

struts2动态方法调用和通配符配置_第2张图片

 

你可能感兴趣的:(java)