2013-07-20 46 views
0

我有一個登錄頁面和一個登錄操作。當用戶登錄操作返回「成功」結果。並且它必須轉到另一個行動。但我得到以下錯誤:struts2結果所請求的資源不可用

HTTP Status 404 - /ESA/protected/admin/list
description The requested resource is not available.

這是我的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> 

看到<result name="success">/protected/admin/list</result>在上面的代碼。如果我改變它與一個JSP頁面,它工作正常。

更新2013年7月20日:

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

<display-name>Educational System Application</display-name> 

<filter> 
    <filter-name>loginFilter</filter-name> 
    <filter-class>ir.imrasta.esa.ui.filter.LoginFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>loginFilter</filter-name> 
    <url-pattern>/protected/*</url-pattern> 
</filter-mapping> 

<filter> 
    <filter-name>struts2</filter-name> 
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 

的struts.xml:

<?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> 

loginFilter:

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); 
    } 
} 
+0

你應該發佈'web.xml',項目結構,而不難給你正確的答案。 –

+0

我更新了我的帖子。這夠了嗎? –

+0

不,現在您必須發佈'LoginFilter'的源代碼或將其從Web配置中移除並重新提出問題。 –

回答

0

查看即使您所指的動作類也需要在struts.xml中映射,您得到的404的原因是您正在查找的動作類未在struts中找到任何映射

+0

在上面的代碼中,我有2個動作映射。首先是當用戶輸入用戶名和密碼並單擊登錄按鈕時運行的登錄。在這裏你可以看到在第二個動作中定義的/protected/admin/list'。 –

0

爲了重定向到另一個操作,您需要使用redirectAction結果類型。

<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> 

並且在操作中斜槓默認情況下不允許使用名稱。要允許在動作名稱中使用斜槓,您需要在struts.xml文件中將struts.enable.SlashesInActionNames設置爲true。

<constant name="struts.enable.SlashesInActionNames" value="true" /> 
+0

謝謝。但在知道我解決它與不同的方式我使用鏈 –

+0

@RasoulTaheri:你到底是什麼,什麼是不工作? –

+0

我登錄後的應用程序。我會轉發給受保護的/管理員/列表操作。但網絡服務器說沒有這條路。我把這個動作放在另一個包中,並使用''。它現在很好用。 –