Класс действий Struts 2 не работает - PullRequest
0 голосов
/ 09 февраля 2012

Я использую Struts2 для разработки веб-приложения.Я включил необходимые jar-файлы для struts2, но когда он собирается вызвать класс действия Struts, он выдает ошибку 404.В консоли нет ошибки, и браузер не показывает расширение .action, которое оно показывает, когда struts.xml вызывает класс действия.Я использую jdk 1.6 и struts 2.0.Я скучаю по банке, которая несет ответственность за все это.

В jsp я просто вызываю функцию из<s:form action = "Mergexmlaction" method = "post"/>

Вот мои Struts.xml и web.xml

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts> 
  <constant name="struts.multipart.maxSize" value="6000000000" /> 

  <package name="default" namespace="/jsp" extends="struts-default">
    <action name="Mergexmlaction" class="com.hm.merge.mergeaction.Mergexmlaction">
      <result name="success" >/jsp/Result.jsp</result>
      <result name="error" >/jsp/Browse_multiplexmlfiles.jsp</result> 
      <interceptor-ref name="fileUpload">
        <param name="maximumSize">600000000</param> 
      </interceptor-ref> 
    </action>
  </package>
</struts>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="xml_file_merging" 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>xml_file_merging</display-name>
  <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>jsp/Browse_multiplexmlfiles.jsp</welcome-file>
    </welcome-file-list>
</web-app>

Ответы [ 3 ]

4 голосов
/ 09 февраля 2012

Есть несколько проблем.

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

1) Я бы рекомендовал против с пространством имен "jsp", это не имеет никакого смысла. Пространства имен должны быть чем-то значимым для приложения и / или пользователя.

  <action name="Mergexmlaction" class="com.hm.merge.mergeaction.Mergexmlaction">

2) Не называйте действие "action", либо будет расширение .action, либо расширение вообще не будет. В любом случае, нет причины дублировать «действие» в первом случае, и нет причины использовать «действие», если нет расширения. Просто "mergexml", "mergeXml" и т. Д.

    <result name="success" >/jsp/Result.jsp</result>

3) Я рекомендую размещать страницы JSP под WEB-INF, чтобы избежать прямого доступа клиента.

    <interceptor-ref name="fileUpload">

4) После того, как вы объявите любые перехватчики, вы должны объявить все перехватчики. В этом действии работает только один перехватчик. Это возможно это нормально, но это почти никогда не правильно.

<welcome-file>jsp/Browse_multiplexmlfiles.jsp</welcome-file>

5) И это главная проблема, в зависимости от того, как вы получаете доступ к приложению. Вы показываете файл приветствия как страницу JSP, которая предположительно использует теги S2. Это не сработает: теги зависят от того, являются ли они полным запросом S2, стеком значений и т. Д.

Весь доступ к приложению S2 должен осуществляться через действие S2, , а не JSP. Если вы посмотрите на визуализированный HTML-код для JSP с прямым доступом, вы не увидите ни пространства имен, ни расширения действия.

1 голос
/ 09 февраля 2012

ошибка 404 - плохая ссылка. означает, что вы просто вызываете ссылку, которая не существует. Проверьте свое отображение в конфигурационном файле Struts и убедитесь, что вы используете правильный URL.

0 голосов
/ 09 февраля 2012

Атрибут namespace элемента пакета является необязательным, и если он отсутствует, предполагается значение по умолчанию "/".Если атрибут пространства имен имеет значение не по умолчанию, пространство имен должно быть добавлено к URI, который вызывает действия в пакете.

Например, URI для вызова действия в пакете с пространством имен по умолчанию:

/ context / actionName

Чтобы вызвать действие в пакете спространство имен не по умолчанию, вам нужен этот URI:

/ context / namespace / actionName

...