我正在使用struts 2构建一个网站。 这是我的“struts.xml”的剪辑:
<action name="*" class="com.domain.actions.UserAction" method="{1}">
<result name="myresult">/Pages/myresult.jsp</result>
<!-- there are many other results -->
</action>
现在,我遇到了问题
当我访问我没有设计的动作时,例如“aaabbb”,服务器将返回500错误
由于通配符配置,struts 2将尝试调用类“com.domain.actions.UserAction”的“aaabbb”方法,但“aaabbb”方法不存在。
但是,从逻辑上讲,返回404错误更好
如何在这些情况下返回404错误并同时使用通配符配置?
答案 0 :(得分:4)
我不是Struts2的专家,但你可以试试这个:
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>
然后有一个返回404的“错误”动作。
答案 1 :(得分:2)
在Struts 2中,如果方法属性值不存在,则调用execute()方法。
这意味着您可以在执行方法中返回自定义结果值,如下所示:
public String execute() throws Exception {
// if the method * does not exist, we will return a "404ERROR" result
return "404ERROR";
}
然后在struts.xml映射中,您可以创建一个类型为“httpheader”的结果类型,如下所示:
<action name="*" class="com.domain.actions.UserAction" method="{1}">
<result name="myresult">/Pages/myresult.jsp</result>
<!-- there are many other results -->
<result name="404ERROR" type="httpheader">
<param name="error">404</param>
<param name="errorMessage">This is a 404 error. Method does not exist</param>
</result>
</action>
这将在标题上调用404。这将使用户能够在您的web.xml中进行任何错误映射,如下所示:
<error-page>
<error-code>404</error-code>
<location>/error404.html</location>
</error-page>
答案 2 :(得分:0)
另一个会返回404的想法。(这是我唯一有效的方法)
public String execute() {
ServletActionContext.getResponse().setStatus(HttpServletResponse.SC_NOT_FOUND);
return SUCCESS;
}