4

Spring MVC 3.2.2 を使用して Java で Web アプリケーションを開発しています。jar ファイル内から jsp ページをロードする際に問題が発生しています。

次の構造を持つ Sring MVC Web アプリケーション:

|-META-INF
|-WEB-INF
    |-spring
    |    |- app-config.xml
    |-classes
    |-lib
    |   |-external.jar
    |       |-WEB-INF
    |       |   |-views
    |       |       |-external.jsp
    |       |-classes
    |            |-controller-for-external.class
    |-views
        |-... jsp

app-config.xml での構成

    <context:annotation-config />
<context:component-scan base-package="com" />

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView"></property>
    <property name="prefix" value="/WEB-INF/views/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>
<mvc:resources mapping="/views/**" location="classpath:/WEB-INF/views/" />
<mvc:annotation-driven />

external.jsp のコントローラー

   @Controller
    public class ExternalController {
protected final Log logger = LogFactory.getLog(getClass());

@RequestMapping(value="/external.htm")
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    Map<String, Object> myModel = new HashMap<String, Object>();
    myModel.put("msg", "External page loaded");
    return new ModelAndView("external", "model", myModel);
}

}

web.xml ファイル

    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

<display-name>Springapp</display-name>
<servlet>
    <servlet-name>springapp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/app-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/app-config.xml</param-value>
</context-param>

<servlet-mapping>
    <servlet-name>springapp</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>

external.jsp ページを表示しようとすると、Spring はそれを検索してエラー HTTP 404 を表示したくない - /springapp/WEB-INF/views/external.jsp

4

4 に答える 4

19

これは、Servlet 3.0 を使用している場合に実行できます。ただし、JSP をパッケージ化した方法では機能しません。特定の方法でリソースを JAR ファイルにパッケージ化する必要があります。

  • すべての JSP をMETA-INF/resourcesJAR のディレクトリに配置します。
  • web-fragment.xmlにファイルを含めますMETA-INF。これは典型的なものに似ていますがweb.xml、いくつかの違いがあります。詳細については、こちらを参照してください。ここで見つけた例もあります。これはオプションです。
  • JAR をWEB-INF/libWAR に入れます。

これで、アプリのコンテキスト内でこれらの JSP を参照できるようになります。基本的META-INF/resourcesに、webapp のドキュメント ルートにマップされます。詳しくはこちらをご覧ください。これは JSP に限定されないことに注意してください。画像、JavaScript、さらには CSS をそこに入れることができます。

于 2013-07-09T20:27:44.160 に答える
1

構造は私のために働く

jar モジュール (jar) ここに画像の説明を入力

メイン Web アプリ モジュール (戦争) ここに画像の説明を入力

そして ViewResolver config (私は Thymeleaf を使用しています):

@Bean
public ServletContextTemplateResolver templateResolver() {
    ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
    resolver.setPrefix("/WEB-INF/template/");
    resolver.setSuffix(".html");
    resolver.setTemplateMode("HTML5");
    resolver.setOrder(1);
    return resolver;
}
于 2015-12-01T10:26:57.210 に答える