struts2结果请求的资源不可用

struts2结果请求的资源不可用,struts2,action,Struts2,Action,我有一个登录页面和一个登录操作。当用户登录时,操作返回“成功”结果。它必须转到另一个动作。但我得到了以下错误: HTTP状态404-/ESA/protected/admin/list 说明请求的资源不可用 这是我的struts.xml文件: <action name="login" class="ir.imrasta.esa.ui.action.UserAction" method="login"> <result name="success">p

我有一个登录页面和一个登录操作。当用户登录时,操作返回“成功”结果。它必须转到另一个动作。但我得到了以下错误:

HTTP状态404-/ESA/protected/admin/list
说明请求的资源不可用

这是我的struts.xml文件:

    <action name="login" class="ir.imrasta.esa.ui.action.UserAction" method="login">
        <result name="success">protected/admin/list</result>
        <result name="failed">/login.jsp?login=failed</result>
    </action>

    <action name="/protected/admin/list" class="ir.imrasta.esa.ui.action.ManagerAction" method="list">
        <result name="success">/protected/admin/list.jsp</result>
    </action>  

即使您所引用的action类也需要映射到struts.xml中,您得到404的原因是您正在查找的action类没有在struts中找到任何映射,以便重定向到您需要使用的另一个action
重定向action
结果类型

<action name="login" class="ir.imrasta.esa.ui.action.UserAction" method="login">
    <result name="success" type="redirectAction">protected/admin/list</result>
    <result name="failed">/login.jsp?login=failed</result>
</action>

在上面的代码中,我有两个动作映射。第一个是当用户输入用户名和密码并单击登录按钮时运行的登录。在这里,您可以看到第二个操作中定义的
/protected/admin/list
。您应该发布
web.xml
,项目结构,没有它就很难给您正确的答案。我更新了我的帖子。够了吗?不,现在你必须发布
LoginFilter
的源代码,或者将其从web配置中删除,然后重新编写问题。我添加了
LoginFilter.doFilter
方法,也谢谢你。但我知道我用不同的方法解决它chain@RasoulTaheri:在我登录应用程序后,你到底在使用什么?什么不起作用。我会把它转发给protected/admin/list操作。但web服务器说没有这条路径。我将此操作放在另一个包中并使用
。它现在运行良好。@RasoulTaheri:这意味着您可能没有设置
struts.enable.SlashesInActionNames
常量。如果不知道自己在做什么,不要使用
结果。对于操作重定向,有
重定向操作
结果类型。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="languages" />

<package name="default" namespace="/" extends="struts-default">

    <default-action-ref name="index" />

    <global-results>
        <result name="error">/error.jsp</result>
    </global-results>

    <global-exception-mappings>
        <exception-mapping result="error" exception="java.lang.Exception"/>
        <exception-mapping result="error" exception="ir.imrasta.esa.bll.exceptions.DataSourceException"/>
        <exception-mapping result="error" exception="ir.imrasta.esa.bll.exceptions.DecryptionException"/>
    </global-exception-mappings>

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

    <action name="login" class="ir.imrasta.esa.ui.action.UserAction" method="login">
        <result name="success">protected/admin/list</result>
        <result name="failed">/login.jsp?login=failed</result>
    </action>

    <action name="/protected/admin/list" class="ir.imrasta.esa.ui.action.ManagerAction" method="list">
        <result name="success">/protected/admin/home.jsp</result>
    </action>

</package>

<!-- Add packages here -->

</struts>  
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{
    HttpServletRequest req=(HttpServletRequest) request;
    HttpSession session=req.getSession();
    User user=(User)session.getAttribute(Constants.SESSION_USER);
    if (user!=null){
        chain.doFilter(request, response);
    }else{
        RequestDispatcher dispatcher=req.getRequestDispatcher("/login.jsp");
        dispatcher.forward(request, response);
    }
}
<action name="login" class="ir.imrasta.esa.ui.action.UserAction" method="login">
    <result name="success" type="redirectAction">protected/admin/list</result>
    <result name="failed">/login.jsp?login=failed</result>
</action>
<constant name="struts.enable.SlashesInActionNames" value="true" />