struts2静态方法和动态方法调用

1 jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">   
    <title>struts2静态方法和动态方法调用</title>
  </head>
  
  <body>
    <a href="${pageContext.request.contextPath }/methodLogin.a">通过静态方法调用进入login</a><br />
    <a href="${pageContext.request.contextPath }/methodLoginA.b">通过静态方法调用进入loginA</a><br />
    <a href="${pageContext.request.contextPath }/methodDync!login.action">通过动态方法调用进入login</a><br />
    <a href="${pageContext.request.contextPath }/methodDync!loginA.action">通过动态方法调用进入loginA</a><br />
     <a href="${pageContext.request.contextPath }/methodDync!loginB.action">通过动态方法调用进入loginB</a><br />
      
  </body>
</html>

2 method.xml页面(必须在struts2.xml里定义,定义的格式为:<include file="method.xml"></include>)

<?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>
    
    <package name="methodPackage" extends="struts-default">
          <!-- 
             	定义了两个静态方法      method是指定跳转到类的某个自定义方法
           -->      
          <action name="methodLogin" class="cn.etop.struts2.method.MethodAction"  method="login">
            <result name="test">/method/success.jsp</result>
          </action>
          <action name="methodLoginA" class="cn.etop.struts2.method.MethodAction" method="loginA">
            <result name="test">/method/success.jsp</result>
          </action>
          <!-- 
                                     定义了一动态方法,但在jsp请求路径中,必须在类名后加“!要执行的方法名”
                                      如:action的name为:login,动态执行的方法为test,那么jsp的路径为:login!test.action
                                     开启动态方法有三种方式
             	 第一种:在web.xml里配置参数
		              <init-param>
			            <param-name>struts.enable.DynamicMethodInvocation</param-name>
			            <param-value>true</param-value>
			         </init-param> 
			         
			           第二种:在src下创建一个属性文件:struts.properties(名字struts是固定的,不能是别的名字) 
			          struts.enable.DynamicMethodInvocation = true
			          
			           第三种:在struts.xml里配置参数
			           <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>                        
           -->
          <action name="methodDync" class="cn.etop.struts2.method.MethodAction" >
            <result name="test">/method/success.jsp</result>
          </action>
    </package>
  
</struts>


3 java代码

package cn.etop.struts2.method;

import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 测试静态方法和动态方法
 * 自定义从xml请求的路径执行的方法
 * 
 * @author Administrator
 *
 */
public class MethodAction extends ActionSupport {
   public String login(){
	   HttpServletResponse response=ServletActionContext.getResponse();
	   response.setContentType("text/html;charset=utf-8");
	   try {
		response.getWriter().print("方法login");
	} catch (IOException e) {
		e.printStackTrace();
	}
	return null;  
   }
   public String loginA(){
	   HttpServletResponse response=ServletActionContext.getResponse();
	   response.setContentType("text/html;charset=utf-8");
	   try {
		response.getWriter().print("方法loginA");
	} catch (IOException e) {
		e.printStackTrace();
	}
	return null;  
   }
   public String loginB(){
	   HttpServletResponse response=ServletActionContext.getResponse();
	   response.setContentType("text/html;charset=utf-8");
	   try {
		response.getWriter().print("方法loginB");
	} catch (IOException e) {
		e.printStackTrace();
	}
	return null;  
   }
   
   public String loginC(){
	   HttpServletResponse response=ServletActionContext.getResponse();
	   response.setContentType("text/html;charset=utf-8");
	   try {
		response.getWriter().print("方法loginC");
	} catch (IOException e) {
		e.printStackTrace();
	}
	return null;  
   }
}

4 在web.xml里配置动态方法

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
    <!-- 定义Struts 2的FilterDispatcher的Filter -->

         <filter>
               <!-- 定义核心Filter的名字 -->
	         <filter-name>struts2</filter-name>
	           <!-- 定义核心Filter的实现类 -->
	         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	         <!-- 配置动态方法 -->
	         <init-param>
	            <param-name>struts.enable.DynamicMethodInvocation</param-name>
	            <param-value>true</param-value>
	         </init-param>
         </filter>
        <!-- FilterDispatcher用来初始化Struts 2并且处理所有的Web请求 -->

         <filter-mapping>
	         <filter-name>struts2</filter-name>
	         <url-pattern>/*</url-pattern>
         </filter-mapping>

     <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

5 在struts2.properties里配置动态方法

#设置是否启动动态方法
struts.enable.DynamicMethodInvocation = true
#设置struts2的后缀
struts.action.extension=action,a,b
#设置是否启动开发模式
struts.devMode = true
#设置国际化属性文件的basename
struts.custom.i18n.resources=message
#设置上传文件的大小
struts.multipart.maxSize=20971520

6 在struts2.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>
<!-- 表示自动扫描包结构中包含配置的字符 并带有注解的action-->
	<constant name="struts.convention.package.locators" value="action,actions,struts,struts2"/>
	<!-- 表示自动扫描以某个后缀结尾的类 要求必须带有注解 -->
	<constant name="struts.convention.action.suffix" value="Action"/>
	<!-- 表示从哪个包开始扫描 -->
	<constant name="struts.convention.package.locators.basePackage" value="cn.et"/>
    <!-- include是其他的xml必须在Struts里定义,相当于继承 -->  
     <include file="method.xml"></include>    
</struts>





原文地址:https://www.cnblogs.com/t0404/p/10290981.html