我是靠谱客的博主 精明大山,最近开发中收集的这篇文章主要介绍struts2之action的创建方式及优化笔记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在struts2中有三种方式创建action处理类。

action的创建方式

通过实现Action接口来创建Action处理类

该方式可以直接使用action提供的常量SUCCESS等,不需要Action.SUCCESS
该方式必须重写默认处理方法;

  • web.xml
<!-- struts2的前端控制器 -->
<filter>
	<filter-name>struts2</filter-name>
	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>*.action</url-pattern>
</filter-mapping>
  • 处理类
package com.x.action;

import com.opensymphony.xwork2.Action;

public class HelloAction implements Action{
	public String execute() throws Exception {
		System.out.println("action的处理类被执行");
		return SUCCESS;
	}
}
  • struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
    
<struts>
	<package name="default" namespace="/" extends="struts-default">
		<action name="hello" class="com.x.action.HelloAction">
			<result name="success">/index.jsp</result>
		</action>
	</package>
</struts>
  • 页面
<body>
	action被执行
</body>

通过继承ActionSupport类来创建action的处理类(推荐)

ActionSupport实现类Action接口,并且提供了很多其他的struts2提供的功能。比如:数据校验,国际化。默认实现execute方法。

  • web.xml
<!-- struts2的前端控制器 -->
<filter>
	<filter-name>struts2</filter-name>
	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>*.action</url-pattern>
</filter-mapping>
  • 处理类
public class Hello1Action extends ActionSupport{
	
}
  • struts.xml
<struts>
	<package name="default" namespace="/" extends="struts-default">
		<action name="hello1" class="com.x.action.Hello1Action">
			<result name="success">/index.jsp</result>
		</action>
	</package>
</struts>

无侵入性的实现
  • web.xml
<!-- struts2的前端控制器 -->
<filter>
	<filter-name>struts2</filter-name>
	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>*.action</url-pattern>
</filter-mapping>
  • 处理类
package com.x.action;

public class Hello2Action {
	public String execute() {
		System.out.println("无侵入性实现");
		return "success";
	}
}
  • struts.xml
<struts>
	<package name="default" namespace="/" extends="struts-default">
		<action name="hello2" class="com.x.action.Hello2Action">
			<result name="success">/index.jsp</result>
		</action>
	</package>
</struts>


action的配置优化

在struts2中,随着业务的增加,action的配置文件会急剧增加,导致了配置文件膨胀的问题。struts2提供了3中方式解决这个问题。

传统方式

  • web.xml
<!-- struts2的前端控制器 -->
<filter>
	<filter-name>struts2</filter-name>
	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>*.action</url-pattern>
</filter-mapping>
  • 处理类
public class UserAction {
	//增加
	public String save() {
		return Action.SUCCESS;
	}
	//删除
	public String delete() {
		return Action.SUCCESS;
	}
	//修改
	public String update() {
		return Action.SUCCESS;
	}
	//查找
	public String find() {
		return Action.SUCCESS;
	}
}
  • sturts.xml
<struts>
	<package name="default" namespace="/" extends="struts-default">
		<action name="save" class="com.x.action.UserAction" method="save">
			<result type="redirectAction">find</result>
		</action>
		<action name="delete" class="com.x.action.UserAction" method="delete">
			<result type="redirectAction">find</result>
		</action>
		<action name="update" class="com.x.action.UserAction" method="update">
			<result type="redirectAction">find</result>
		</action>
		<action name="find" class="com.x.action.UserAction" method="find">
			<result>/list.jsp</result>
		</action>
	</package>
</struts>

通过动态方法调用来优化

第一步:开启动态方法调用;

第二步:配置action,一个action处理类只需配置一次即可,不需要配置处理方法;

第三步:调用处理方法:ActionName!methodName.action,如:localhost:8080/项目名/userAction!find.action

  • web.xml
<!-- struts2的前端控制器 -->
<filter>
	<filter-name>struts2</filter-name>
	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>*.action</url-pattern>
</filter-mapping>
  • struts.xml
<struts>
	<!-- 开启动态方法调用 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

	<package name="default" namespace="/" extends="struts-default">
		<action name="userAction" class="com.x.action.UserAction">
			<result type="redirect">userAction!find.action</result>
			<result name="list">/list.jsp</result>
		</action>
	</package>
</struts>
  • 处理类
public class UserAction {
	//增加
	public String save() {
		return Action.SUCCESS;
	}
	//删除
	public String delete() {
		return Action.SUCCESS;
	}
	//修改
	public String update() {
		return Action.SUCCESS;
	}
	//查找
	public String find() {
		System.out.println("find");
		return "list";
	}
}
  • 注意:使用动态方法调用,需要注意不同处理方法的返回值是否一致,可能会配置多个结果集。这种方式不推荐!!!

通过通配符配置来优化
  • struts.xml

表示一个或者多个字符;
②占位符1表示匹配第一个
号的内容;

  • web.xml
<!-- struts2的前端控制器 -->
<filter>
	<filter-name>struts2</filter-name>
	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>*.action</url-pattern>
</filter-mapping>
  • struts.xml
<struts>
	<!-- 开启动态方法调用 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

	<package name="default" namespace="/" extends="struts-default">
		<!-- *表示一个或者多个字符 
			  占位符1表示匹配第一个*号的内容-->
		<action name="*_*" class="com.x.action.UserAction" method="{1}">
			<result type="redirect">find</result>
			<result name="list">/list.jsp</result>
		</action>
	</package>
</struts>
  • 处理类
public class UserAction {
	//增加
	public String save() {
		return Action.SUCCESS;
	}
	//删除
	public String delete() {
		return Action.SUCCESS;
	}
	//修改
	public String update() {
		return Action.SUCCESS;
	}
	//查找
	public String find() {
		System.out.println("find");
		return "list";
	}
}
  • 访问:localhost:8080/项目名/save.action
  • 注意:使用通配符时需要注意,如果有不是通配符的action,先匹配action在匹配通配符,在实际应用开发中使用通配符比较常见。

通过注解来优化
  • 导入struts2-convention-plugin-2.5.22.jar
  • 在处理类上添加相关注解
package com.x.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;

@ParentPackage(value="struts-default")
@Namespace(value="/")
public class UserAction {
	//增加
	public String save() {
		return "success";
	}
	//删除
	public String delete() {
		return "success";
	}
	//修改
	public String update() {
		return "success";
	}
	//查找
	@Action(value="find",results= {
			@Result(name="list",location="/list.jsp")
	})
	public String find() {
		System.out.println("find");
		return "list";
	}
}

最后

以上就是精明大山为你收集整理的struts2之action的创建方式及优化笔记的全部内容,希望文章能够帮你解决struts2之action的创建方式及优化笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部