1

我想加快开发周期:通过消除此类文件类型的构建部署阶段来读/写代码、构建、部署、测试:

  • CSS (.css)
  • JavaScript (.js)
  • 图片(.png、.jpg、.gif)

因为 CSS/JS/img 是静态文件(不需要构建阶段),我希望 JBoss 可以扫描文件时间戳更改以更新静态文件缓存。

我在web.xml中有这样的代码:

<servlet>
    <servlet-name>resources</servlet-name>
    <servlet-class>org.springframework.web.servlet.ResourceServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>resources</servlet-name>
    <url-pattern>/js/**</url-pattern>
    <url-pattern>/css/**</url-pattern>
    <url-pattern>/images/**</url-pattern>
</servlet-mapping>

所以我需要把它改成能提供 CSS/JS/imgs 完整路径的东西,比如~/devel/$proj/src/main/webapp. 另外我认为静态内容可能由 JBoss 本身而不是 Spring 提供。

总结:如何使用 JBoss AS 7 配置 Java EE 项目以从选定的(在我的情况下为开发)目录提供静态文件,而其他文件像往常一样通过 .war 文件部署(我部署mvn -DskipTests=true package jboss-as:deploy)?

4

1 回答 1

1

花了4个小时后,我让它工作了!但不是一般情况,因为基于新 Spring 3.x 系列的解决方案。

对于一般案例解决方案,您必须实现自己的 servlet,例如著名的博客文章:http ://balusc.blogspot.com/2009/02/fileservlet-supporting-resume-and.html

我不喜欢编写代码,但喜欢配置已经预构建的组件!

所以首先我将所有 URL 的请求处理程序更改为org.springframework.web.servlet.DispatcherServlet

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

在我有之前:

<url-pattern>*.htm</url-pattern>
<url-pattern>*.xml</url-pattern>

因此*.js,由默认容器(JBoss)servlet 管理*.css*.png文件和任何选项进一步无效......

接下来我使用 Spring 3.0 的特性<mvc:resources>( xmlns:mvc="http://www.springframework.org/schema/mvc") 和file:资源类型:

<mvc:resources mapping="/css/**" location="file:/home/user/devel/proj/src/main/webapp/css/"/>
<mvc:resources mapping="/images/**" location="file:/home/user/devel/proj/src/main/webapp/images/"/>
<mvc:resources mapping="/js/**" location="file:/home/user/devel/proj/src/main/webapp/js/"/>

每当我在浏览器中保存.js.css归档和刷新网页时,我都会获得新内容!

因此,将静态内容部署时间从 2 分钟减少到 1 秒!!!

更新切换到 Tomcat 7 后,我配置上下文/opt/apache-tomcat-7.0.40/conf/Catalina/localhost/CTXNAME.xml

<Context docBase="/home/user/devel/proj-dev/src/main/webapp"
         reloadable="true">
    <Resources className="org.apache.naming.resources.VirtualDirContext"
               extraResourcePaths="/WEB-INF/classes=/home/user/devel/proj-dev/target/classes,/WEB-INF/lib=/home/user/devel/proj-dev/target/proj/WEB-INF/lib"/>
    <Loader className="org.apache.catalina.loader.VirtualWebappLoader"
            virtualClasspath="/home/user/devel/proj-dev/target/classes;/home/user/devel/proj-dev/target/proj/WEB-INF/lib"/>
    <JarScanner scanAllDirectories="true"/>
</Context>

根据:

现在 JS/CSS/JSP 文件F5在浏览器中更新。为了使用新的.class调用mvn compile。引导调用mvn package

于 2013-03-14T15:36:40.793 回答