一個Member問起這個問題,我覺得很不錯。
Error Code 404 這個問題說大不大,不過是使用者敲錯了URL,又不是Error Code 500代表我們的系統出現錯誤,何況使用者要敲什麼,我們哪管得著?我想這也沒錯啦,如果我在Google Map敲個'我家',然後還希望它給我什麼好看的是不是有點超過?(也許會出現全家便利商店?)
在Struts2中,一般要解決的404URL大約是兩類,一類是struts2 的.action,另一類就是一般的resource,像jpg、js等
第一類Action的方式很容易,在struts.xml中設定一個default的package,然後用個default-action-ref就可以解決
<package name="default" extends="struts-default"> <default-action-ref name="index"/> <action name="index"> <result>/index.jsp</result> </action> </package>
第二類非Action的話就要在xml中加上error-page的設定
<error-page> <error-code>404</error-code> <location>/rootAction.action</location> </error-page>這類的處理要注意的是,如果是直接導到jsp或html就不用在意,但若是想導到一個action的話,請注意你的struts action filter,是不是有加上error 的dispatcher。
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <!-- <init-param> <param-name>actionPackages</param-name> <param-value>com.mycompany.myapp.actions</param-value> </init-param> --> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping>