Spring mvc Apache Tiles+;SpringMVC在jar文件中提供JSP

Spring mvc Apache Tiles+;SpringMVC在jar文件中提供JSP,spring-mvc,apache-tiles,web-fragment,Spring Mvc,Apache Tiles,Web Fragment,目的 设计web项目的“附加组件” 网络项目 我有一个打包为WAR的项目,它使用SpringMVC4.1.6和ApacheTiles 3.0.5作为UI框架。这是应用程序上下文的一个示例: <bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" id="tilesConfigurer"> <property name="definitions"> <l

目的
设计web项目的“附加组件”

网络项目
我有一个打包为WAR的项目,它使用SpringMVC4.1.6和ApacheTiles 3.0.5作为UI框架。这是应用程序上下文的一个示例:

<bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" id="tilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/foo/bar/layouts.xml</value>
            <value>classpath:/META-INF/ext/**/views.xml</value><!-- For add-ons -->
        </list>
    </property>
</bean>

/WEB-INF/foo/bar/layouts.xml
类路径:/META-INF/ext/**/views.xml
JAR
我有另一个罐子,它是“附加组件”。这个jar将需要包含一些jsp文件。一般的想法是,如果我从/WEB-INF/lib目录中删除这个jar,那么当我重新启动WEB服务器时,所有相关的特性都将被删除。同样,当我将jar放入lib目录时,所有相关特性都将可用。示例磁贴定义(views.xml):



1.可以在tiles定义中定义驻留在JAR文件中的jsp文件吗?

2.使用/不使用web fragment可以实现这一点吗?

不知何故,我设法找到了解决方案

  • 在jar中创建一个实现ServletContainerInitializer的类。重写方法并添加servlet映射,如下所示:

    @Override
    public void onStartup(final Set<Class<?>> clazzes, final ServletContext servletContext) throws ServletException {
        final ServletRegistration servletRegistration = servletContext.addServlet("name-of-servlet-declared-in-web.xml", DispatcherServlet.class);
        servletRegistration.addMapping("/name-of-tiles-definition");
    }
    
    @覆盖
    
    启动时公共无效(最终设置不知何故,我设法找到了解决方案

  • 创建一个在jar.Override方法中实现ServletContainerInitializer的类,并添加servlet映射,如下所示:

    @Override
    public void onStartup(final Set<Class<?>> clazzes, final ServletContext servletContext) throws ServletException {
        final ServletRegistration servletRegistration = servletContext.addServlet("name-of-servlet-declared-in-web.xml", DispatcherServlet.class);
        servletRegistration.addMapping("/name-of-tiles-definition");
    }
    
    @覆盖
    
    public void onStartup(最终设置)#3的文件类型是什么?这对tiles版本2有效吗?只是一个空文本文件,IIRC。不确定这是否适用于版本2.GL。#3的文件类型是什么?这对tiles版本2有效吗?只是一个空文本文件,IIRC。不确定这是否适用于版本2.GL。
    <tiles-definitions>
        <definition extends="main" name="name-of-tiles-definition">
            <put-attribute name="body" value="/path-to-resource/jsp-name.jspx" />
        </definition>
    </tiles-definitions>