1. 程式人生 > >Struts2動態方法報錯

Struts2動態方法報錯

在使用Struts2的2.5.12版本,在使用DMI(動態方法注入)的時候,總是報:

HTTP Status 404 - There is no Action mapped for namespace [/] and action name [user!update] associated with context path [/M_Struts_1].

type Status report

message There is no Action mapped for namespace [/] and action name [user!update] associated with context path [/M_Struts_1].

description The requested resource is
not available.
Struts Problem Report

Struts has detected an unhandled exception:

Messages:   
Method update for action user is not allowed!
Stacktraces

Method update for action user is not allowed! - [unknown location]
    com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java
:206) org.apache.struts2.factory.StrutsActionProxy.prepare(StrutsActionProxy.java:62) org.apache.struts2.factory.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37) com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58
) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:567) org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:81) org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:143) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458) java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Unknown Source)

原來 struts2.5 為了提升安全性,添加了 allomethod ,動態方法可以被訪問那麼需要新增到允許
可以有三種解決方法:

第一種:package設定

<constant name="struts.devMode" value="true"></constant>

    <!-- 開啟動態執行動作方法 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
    <package name="three"  extends="struts-default">
    <!--新增執行動態訪問方法的正則過濾  -->
    <global-allowed-methods>regex:.*</global-allowed-methods>
    <!--動態訪問:name!方法名.action  -->
        <action name="user" class="cn.code404.web.action.UserAction">

        <result name="success">/success.jsp</result>
        </action>

第二種:action設定

<constant name="struts.devMode" value="true"></constant>

    <!-- 開啟動態執行動作方法 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
    <package name="three"  extends="struts-default">
    <!--動態訪問:name!方法名.action  -->
        <action name="user" class="cn.code404.web.action.UserAction">

        <result name="success">/success.jsp</result>
        <!--配置當前類中哪些方法允許動態使用-->
        <allowed-methods>regex:.*</allowed-methods>
        </action>
    <!--動作類的配置方式  -->
        <!-- <action name="*" class="cn.code404.web.action.UserAction" method="{1}">
        <result name="success">/{1}.jsp</result>
        </action>
        <action name="*_*" class="cn.code404.web.action.UserAction" method="{1}{2}">
        <result name="success">/{1}.jsp</result>
        </action> -->

    </package>

第三種方式:使用註解@AllowedMethods


@Action(value="user",results={@Result(name="success",location="/success.jsp")})
@AllowedMethods(value={("add"),("update"),("delete")})
public class UserAction {


    public String add(){
        System.out.println("新增");
        return SUCCESS;
    }
    public String update(){
        System.out.println("修改");
        return SUCCESS;
    }
    public String delete(){
        System.out.println("刪除");
        return SUCCESS;
    }

}

相關推薦

Struts2動態方法

在使用Struts2的2.5.12版本,在使用DMI(動態方法注入)的時候,總是報: HTTP Status 404 - There is no Action mapped for namespace [/] and action name [user!u

BASE64Encoded() 方法方法未定義

.com 定義 acc string img src images alt 解決 代碼: String enParams = new BASE64Encoder().encode(strParams.getBytes()); 出錯,顯示方法未定義 解決方法:項目右鍵—

使用seek()方法:“io.UnsupportedOperation: can't do nonzero cur-relative seeks”錯誤的原因

pac nbsp mar std orm ack logs 打開文件 off 在使用seek()函數時,有時候會報錯為 “io.UnsupportedOperation: can‘t do nonzero cur-relative seeks”,代碼如下: >&g

myeclipse中用Junit測試方法

nbsp lips es2017 測試方法 報錯 images myeclipse junit ima 原因是在測試方法的上面沒有寫註解 @Test myeclipse中用Junit測試方法報錯

重寫getColumnName()方法java.lang.StackOverflowError

n) vector main thread 想法 color override 文章 nco 我在一個方法裏面初始化了一個列名,並添加了列名 columnNames = new Vector(); columnNames.add("學號");

struts2 動態方法調用

st2 public i18n 動態方法調用 icon https 代碼 不用 內容 https://blog.csdn.net/yangqicong/article/details/6887568 學習Struts2有一段時間了。對於Struts2的動態方法調用做一下

spring測試save方法

leg clas creat ould seq save eth val ble 用test類測試service的save方法時,報錯如下: 2018-08-24 21:52:13,506 - could not read a hi value com.mysql.jdb

Spring Data JPA使用getOne方法:Method threw 'org.hibernate.LazyInitializationException' exception. Cannot evaluate

com tps 對象 vlad 解釋 連接 method 需要 至少 getOne是懶加載,需要增加這個配置: spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true,但這種方式不太友好,建議不要使用。

for迴圈呼叫刪除方法解決辦法

1.每次刪除一個元素,索引往前移,即i-1.      List<String> list = new ArrayList<String>();      list.add("111");  &nbs

JPA自帶findOne方法原因

是由於jdk8的原因,有可能和spring boot的版本也關係, 兩種方式可選 註冊,返回類是Optional<Girl>, Optional是jdk8自帶的 @GetMapping(value = "/girls/{id}")public Optional<Gir

JdbcTemplate的queryForMap方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Junit 單元測試@Test註解的方法Annotations are not allowed here

問題描述:        Annotations are not allowed here ​​​​​​​       使用IDEA開發的時候,單元測試如果不使用IDE提供的方式建立,而是自己手動建立的話,會報這

第12講 struts2動態方法呼叫

1在HeadFirstStruts2chapter02-05中,直接修改struts.xml檔案,去掉method屬性和萬用字元屬性 xml version="1.0" encoding="UTF-8" ?> DOCTYPE struts PU

struts2動態方法呼叫與j2ee互動傳參

動態方法呼叫: (action程式碼) package com.zking.web; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ModelDriven; import

vue sort()方法:“You may have an infinite update loop in a component”

html  <div class="box" v-for="(item,itemindex) in itemrank" :key="itemindex"> <div class="box-title" > <div class="t

mybatis-plus呼叫自身的 selectById 方法:org.apache.ibatis.binding.BindingException:

  mybatis-plus的版本號是 2.0.1,在呼叫自身的insert(T)的時候沒有報錯,但是執行update報錯,呼叫selectById、deleteById的時候也報錯。也就是涉及到需要主鍵識別的都報錯。 語句如下:(介面與實現都是MP自己實現的) User

mybatis-plus調用自身的 selectById 方法:org.apache.ibatis.binding.BindingException:

spring ret 分享 img ceshi nbsp 都是 alua tro   mybatis-plus的版本號是 2.0.1,在調用自身的insert(T)的時候沒有報錯,但是執行update報錯,調用selectById、deleteById的時候也報錯。也就是涉

呼叫os.fork()方法:AttributeError: module 'os' has no attribute 'fork'

錯誤棧: Traceback (most recent call last): File “D:/Users/qc/PycharmProjects/day20/duoxiancheng/duoxiancheng.py”, line 5, in pid = os.fork() Attr

使用springboot 時contraller中findById 方法問題

在書寫springboot的contraller時 出現了 findById和findOne 報錯出紅。 經過查詢一番資料後,發現spring boot 2版本中所用的查詢是   findById();  並且在使用的時候會加上一個get()方法

解決C#中呼叫WCF方法:遠端伺服器返回錯誤 (404) 未找到

IIS配置問題,解決方法: 1. 首先新增MIME型別 副檔名“.svc”,MIME型別 “application/octet-stream”  2、處理程式對映--新增託管處理程式 請求路徑 “.svc” 型別 “System.ServiceModel.Activation.HttpH