当我使用Struts 2通配符配置时如何返回404错误?

时间:2011-08-02 07:16:42

标签: java jsp java-ee struts2

我正在使用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错误并同时使用通配符配置?

3 个答案:

答案 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;
}