0

ログインページとログインアクションがあります。ユーザーがログインすると、アクションは「成功」の結果を返します。そしてそれは別のアクションに行かなければなりません。しかし、次のエラーが表示されます。

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>  

<result name="success">/protected/admin/list</result>上記のコードを参照してください。jspページで変更すると正常に動作します。

2013/07/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);
    }
}
4

2 に答える 2

0

あなたが参照しているアクション クラスも struts.xml にマッピングする必要があることを確認してください。

于 2013-07-20T10:45:46.110 に答える
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.enable.SlashesInActionNamesアクション名にスラッシュを使用できるようにするには、ファイルで定数を true に設定する必要がありstruts.xmlます。

<constant name="struts.enable.SlashesInActionNames" value="true" />
于 2013-07-20T13:41:34.227 に答える