1. 程式人生 > >struts2.5框架使用萬用字元指定方法常見錯誤

struts2.5框架使用萬用字元指定方法常見錯誤

struts2.5框架使用萬用字元指定方法(常見錯誤)

在學習struts框架時經常會使用到萬用字元呼叫方法,如下:

<package name="shop" namespace="/" extends="struts-default">
        <!-- 配置Action -->
        <actionname="user_*"  class="userAction" method="{1}">      
                <result name="success">/WEB-INF/jsp/login.jsp</result>
        </action>
</package>                                                                                            


其中的action name="user_*"中*這個符號代表的值會傳入method=“{1}”中,並對應action類的一個方法名,這樣就能很大程度地減少配置文件中action的數目。

但是在使用這種萬用字元方法的時候,經常會看到這樣的對映錯誤提示

Struts has detected an unhandled exception:

Message:There is no Action mapped for namespace [/] and action name [user_login] associated with context path [/shop].

如果看到提示的是對映問題,你可以按照對映路線排除一遍,

第一步:先排查訪問的連結有沒有問題(細節問題)

第二步:檢視struts.xml的配置(仔細排查,出現問題機率很大)

第三步:檢視相關的action類及方法(比如return的值是不是跟配置檔案中的result對應得上等)

第四步:檢視結果響應頁面是否存在問題(出現問題的機率比較小)

(具體的做法我不細講了,網上很多優秀篇章都有提及,可自行百度)

如果上面的四個步驟沒出問題,可是還是報錯,怎麼辦?那就可能是內部屬性配置的問題了

在Struts 2的核心jar包struts2-core中,有一個default.properties的預設配置檔案(路徑:struts-2.5.2-min\lib\org\apache\struts2\default.properties

)裡面配置了一些全域性的資訊

其中有條語句是配置動態方法呼叫的

struts.enable.DynamicMethodInvocation = true

當使用動態呼叫方法時(action名 + 感嘆號 + 方法名進行方法呼叫),需要將其屬性改為true,

當使用萬用字元呼叫語法時,建議將其屬性改為falsestruts2.5.2中預設是false)

當我們需要將其屬性改成false時,

只在struts.xml配置檔案中加入此句即可修改屬性

<constant name="struts.enable.DynamicMethodInvocation" value="false" />

很多網友都說改了之後都行了,不過我換了struts2.5之後,整了好久都還是不行……

最後是在配置文件struts.xml的Action中配置了

<allowed-methods>Action內的方法名</allowed-methods>才成功了

比如上面程式碼修改如下:

<package name="shop" namespace="/" extends="struts-default">
        <!-- 配置Action -->
        <action name="user_*"  class="userAction"method="{1}">    
                <result name="success">/WEB-INF/jsp/login.jsp</result>                                                                                     <allowed-methods>login</allowed-methods>                                                                                        
        </action>
</package>  

備註:紅色程式碼中的login為對應Action類裡面的方法名,可以加上多個方法,方法名之間用逗號隔開。

總結:在struts2.3之前的版本,正常的配置就可以了,但在struts2.3版本之後,使用萬用字元呼叫方法時,內部會驗證是否允許訪問該方法,所以要加上

<allowed-methods>方法名1,方法名2…</allowed-methods>程式碼。

或者在<action></action>外面新增

<global-allowed-methods>方法名1,方法名2</global-allowed-methods>

希望這個小知識點能幫助更多程式設計愛好者,在java道路上,與志同道合者共勉!!

相關推薦

struts2.5框架使用字元指定方法常見錯誤

struts2.5框架使用萬用字元指定方法(常見錯誤) 在學習struts框架時經常會使用到萬用字元呼叫方法,如下: <package name="shop" namespace="/" ex

Struts2學習筆記】struts2.5使用字元配置action跳轉

寫在前面:其實在一年前,還沒有開始寫部落格的時候就已經學過struts2了,只是當時太蠢,無法理解MVC以及struts2的一些“人性化”的設定,過了一年再反過來看struts2就很明白了。只是在struts2.5裡面多了一個機制導致無法像以往一樣簡單的使

分享知識-快樂自己:Struts2(動態方法、動態結果、字元方法內部跳轉、action跳轉、OGNL 的使用及注意事項)

這裡主要以案例演示:涵蓋以下知識點 1、動態方法呼叫:使用關鍵 符號 ! 進行操作   例如:/名稱空間 ! 方法名 2、動態結果集:就是說,通過後臺返回的結果 ${} 獲取,重定向到符合預期的頁面。 3、萬能萬用字元:*_*  :第一個 * 為 類名、第二個 * 為方

Mybatis typealiaspackage 字元掃描方法

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

Struts2的萬能字元

<!--統配下劃線_//方法名 {1}第一個引數類的簡單名稱-method{2}方法名--><action name="*_*" class="day06Pattern.{1}" method="{2}"> <result name="{2}">/{1}/{2}.js

5.rabbitmq--字元模式Topics

rabbitmq--萬用字元模式Topics topic模式也稱為主題模式,其實他相對於routing模式最大的好處就是他多了一種匹配模式的路由,怎麼理解匹配呢,其實就相當於我們之前正則的.*這種,不過他的匹配機制可能不是這種(其實除了匹配規則外,他的作用就和routing模式一樣 ),而他的工作

32.3-5帶有字元的匹配(自動機)

功能 這個程式可以判斷一個帶有萬用字元*的模式串是否在文字串中存在,沒有記錄位置資訊,當然,想記錄也是可以的 樣例輸入: abccbacbababc ab*bab*c 樣例輸出: 1 思路 對於樣例輸入,有限自動機如圖所示: 我們把每個萬用字元隔開

linux的shell指令碼的字元使用方法

#!/bin/bash #author: ***** #date : #Email : ****@*** # 萬用字元 # # ? 任意單個字元 # * 任意0個或多個字元 # [ ] 匹配

判斷檔案是否存在,字元檔案匹配發生錯誤 binary operator expected

time1=$(date -d "$currentTime" +%s) time2=$(($time1-24*3600)) filepath=/root/g01/g_01_api_*_$time2.tx

struts2.5框架使用字元與動態方法

 概述:struts2.5以後加強了安全性,下面就是安全配置引發的問題 萬用字元: 在學習struts框架時經常會使用到萬用字元呼叫方法,如下: <package name="usercrud" namespace="/" extends="struts-default">

Struts2怎樣呼叫Servlet?字元怎樣使用?Struts2的動態方法呼叫如何配置使用?Struts2如何在執行方法之前進行驗證?

1.Struts2怎樣呼叫Servlet//    servlet.api的三種方式        1.ActionContext.getContext().getSession();//Action上下文呼叫        2.ServletActionContext.

struts2.5.12版本使用action字元提示找不到action的問題

我配置了一個PageAction <action name="*" method="{1}" class="com.cheng.web.action.PageAction"> <result name="success">/p

struts2.5的method使用字元無效問題

struts2.5版本引入了新的安全限制(據說是2.3版本開始,沒去確認) 新版本萬用字元需要配置才能使用 兩種方法 1. 關閉嚴格方法呼叫 .... <package na

Struts2 學習之路(二):2.4 Struts2(2.5.14.1版本)中的字元匹配問題

struts.xml 配置檔案中萬用字元的匹配 可以匹配action節點中的class屬性,method屬性,result子節點的name屬性,甚至是result子節點的路徑內容 因為2.5.x版本

struts2動態方法呼叫和使用字元定義action

struts.xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Con

struts2.5字元對映問題

寫專案時遇到的一個問題,在struts2.5中,使用萬用字元*對映,總是報錯顯示沒有這個action的mapppe。多方百度,才解決了問題。只要在需要萬用字元對映的package中新增一個屬性stric

struts2.5+框架使用通配符與動態方法

round ret extend turn pro 一個 span ucc 方法  概述:struts2.5以後加強了安全性,下面就是安全配置引發的問題 通配符: 在學習struts框架時經常會使用到通配符調用方法,如下: <package

第11講 struts2的struts.xml的字元控制

1複製HeadFirstStruts2chapter02-04,改名:HeadFirstStruts2chapter02-05,修改web project settings匯入StudentAction和GradeAction,刪除其他多餘的Action, StudentAction如下:packa

struts2 <action>無法使用字元解決辦法

在我們使用struts2的時候,肯定不想每一個方法就寫一<action>,所以通常我們會使用萬用字元,簡化我們的程式碼。  <action name="userAction_*" class="userAction" method="{1}" >  

Java泛型方法和型別字元的區別

泛型方法VS型別萬用字元(兩者可以混用):      1)你會發現所有能用型別萬用字元(?)解決的問題都能用泛型方法解決,並且泛型方法可以解決的更好: 最典型的一個例子就是: