java - 使用 Spring MVC 在 jar 文件中显示 jsp 页面

标签 java spring spring-mvc jsp war

我正在使用 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

   @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

最佳答案

如果您使用的是 Servlet 3.0,则可以执行此操作。但是,它不适用于您打包 JSP 的方式。您必须以特定方式将资源打包到 JAR 文件中:

  • 将所有 JSP 放在 JAR 的 META-INF/resources 目录中。
  • META-INF 中包含一个 web-fragment.xml 文件。这与典型的 web.xml 类似,但有一些不同。参见 here一些细节。还有一个我找到的例子here .这是可选的。
  • 将您的 JAR 放入 WAR 的 WEB-INF/lib 中。

现在您应该能够在应用的上下文中引用这些 JSP。基本上 META-INF/resources 被映射到您的 webapp 的文档根目录。看this更多细节。请记住,这不仅限于 JSP。您可以在其中放置图像、JavaScript 甚至 CSS。

关于java - 使用 Spring MVC 在 jar 文件中显示 jsp 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17554572/

相关文章:

java - 更新依赖项中的版本时更新模块版本(多模块 maven )

java - Spring SpEL 有限制吗?

java - 关闭 Spring MVC 数据绑定(bind)器

java - Spring Security 多个 url 规则集不能一起工作

java - 多线程循环赛

java - 如何使用 Play Framework 和 videojs 流式传输视频?

spring - Spring MVC 中映射 Ajax 请求 : getting error 405 method not allowed

java - 无法在 Spring Controller 中接收对象

java - 在分块然后合并 jar 文件时遇到问题

spring - @Autowired 是否只引用一个对象?