2013-07-20 5 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/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); 
    } 
} 
+0

Вы должны опубликовать структуру проекта «web.xml», без затруднения дать правильный ответ. –

+0

Я обновляю свой пост. это достаточно? –

+0

Нет, теперь вы должны опубликовать исходный код для 'LoginFilter' или удалить его из веб-конфигурации и переформулировать вопрос. –

ответ

0

См даже класс действия, которые вы имеете в виде слишком также необходимо, чтобы быть сопоставлено в struts.xml, причина, вы получаете 404 в том, что класс действия, которое вы найти не имеющую никакого отображения найденного в распорках

+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.enable.SlashesInActionNames константу в true в файле struts.xml.

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

благодарит вас. но знаю, что я решаю его с помощью дефрантного способа использовать цепочку –

+0

@RasoulTaheri: Что именно вы используете и что не работает? –

+0

после входа в приложение. я буду пересылать действие protected/admin/list. но веб-сервер говорит, что этого пути нет. Я помещаю это действие в другой пакет и использую ''. теперь он работает хорошо. –

Смежные вопросы