MethodPrefixAction.java
package com.action;
public class MethodPrefixAction {
/*注释①
public String execute(){
return "111";
}
*/
public String execute1(){
System.out.println("execute1().....");
return "sss";
}
public String execute2(){
System.out.println("execute2()....");
return "aaa";
}
}
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 开启使用开发模式,详细错误提示 -->
<constant name="struts.devMode" value="false"/>
<!-- 指定每次配置文件更改后,自动重新加载 -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!--注释② 打开动态方法使用-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="com.action" extends="struts-default">
<action name="methodAction" class="com.action.MethodPrefixAction">
<result name="sss">/xx.jsp</result>
<result name="aaa">/pma.jsp</result>
<!-- 注释③<result name="111">/xx.jsp</result>-->
</action>
</package>
</struts>
method.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="methodAction">
<s:submit name="execute1" value="submit" method="execute1"></s:submit>
<s:submit name="execute2" value="submit" method="execute2"></s:submit>
</s:form>
</body>
</html>
三段代码基本可以完成整个工程了。
先说我出现的第一个问题
在注释①②③都没写的时候,
报错java.lang.NoSuchMethodException:xxxxx(省略).execute()
所以加了注释①③,然后运行报错是404,action下没有配置result,所以补上了试试。发现还是不行,所有的执行的都是注释①中execute方法,并没有调用execute1和execute2方法。
然后百度查看了很多案例,发现是因为struts2的动态方法使用是默认关闭的。
为什么Struts2中会引入这个功能的开关呢,原因如下:
1 )如果使用的是 POJO action ,!动态方法调用可能会引起安全问题;
2 )动态方法调用和从 Struts 1 中引用过来的通配符方法有重叠;
为了能够打到测试代码的功能,加入了注释②
<!--注释② 打开动态方法使用-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
测试正常。书本上很多东西不贴切,导致做示例的时候出现很多问题,我还是把自己遇到的问题贴上来,希望能帮助到遇到同样问题的人。