JFinal的Web项目从ClassPath加载静态资源文件
2017-08-21 00:00
507 查看
目的
对于不同项目中共用的资源文件,例如CSS,JS,图片等静态资源文件,可以将基打包在Jar包中,加载的时候从Jar中进行加载,方便不同项目的统一引用。
WebJars就是基于这个目的做的。例如Jquery就已经打成了Jar的形式。
文件存放方式
将资源文件放置在项目的 src/main/resources中的WebJars目录下,如下所示:
将该项目打包成Jar之后,在其它的项目就可以引用了
引用原理
添加如下Handler的实现
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import com.jfinal.handler.Handler;
import com.jfinal.log.Log;
/**
* 判断资源文件是否需要从Jar中进行加载
*
* @filename WebJarsHandler.java
* @author ggeagle
* @datetime 2017年8月15日 下午1:26:06
*/
public class WebJarsHandler extends Handler {
/**
* 日志记录
*/
private Log log = Log.getLog(Handler.class);
@Override
public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
if (target.contains("/WebJars/")) {
String path = "WebJars/" + StringUtils.substringAfter(target, "/WebJars/");
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(path);
OutputStream outputStream = null;
try {
if (inputStream != null) {
outputStream = response.getOutputStream();
IOUtils.copy(inputStream, response.getOutputStream());
}
} catch (IOException e) {
log.error("cant get static resource : " + path + " from jar", e);
} finally {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(outputStream);
}
isHandled[0] = true;
} else {
this.next.handle(target, request, response, isHandled);
}
}
}
Config配置
@Override
public void configHandler(Handlers me) {
me.add(new ContextPathHandler("ctx"));
me.add(new WebJarsHandler());
}
WEB页面配置
<link rel="stylesheet" href="#(ctx)/WebJars/pintuer/pintuer.css">
这样就能自动的从Jar中进行加载,避免了文件拷贝带来的不一致问题,可以统一升级了。
有了BUG也不怕怕了。
对于不同项目中共用的资源文件,例如CSS,JS,图片等静态资源文件,可以将基打包在Jar包中,加载的时候从Jar中进行加载,方便不同项目的统一引用。
WebJars就是基于这个目的做的。例如Jquery就已经打成了Jar的形式。
文件存放方式
将资源文件放置在项目的 src/main/resources中的WebJars目录下,如下所示:
将该项目打包成Jar之后,在其它的项目就可以引用了
引用原理
添加如下Handler的实现
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import com.jfinal.handler.Handler;
import com.jfinal.log.Log;
/**
* 判断资源文件是否需要从Jar中进行加载
*
* @filename WebJarsHandler.java
* @author ggeagle
* @datetime 2017年8月15日 下午1:26:06
*/
public class WebJarsHandler extends Handler {
/**
* 日志记录
*/
private Log log = Log.getLog(Handler.class);
@Override
public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
if (target.contains("/WebJars/")) {
String path = "WebJars/" + StringUtils.substringAfter(target, "/WebJars/");
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(path);
OutputStream outputStream = null;
try {
if (inputStream != null) {
outputStream = response.getOutputStream();
IOUtils.copy(inputStream, response.getOutputStream());
}
} catch (IOException e) {
log.error("cant get static resource : " + path + " from jar", e);
} finally {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(outputStream);
}
isHandled[0] = true;
} else {
this.next.handle(target, request, response, isHandled);
}
}
}
Config配置
@Override
public void configHandler(Handlers me) {
me.add(new ContextPathHandler("ctx"));
me.add(new WebJarsHandler());
}
WEB页面配置
<link rel="stylesheet" href="#(ctx)/WebJars/pintuer/pintuer.css">
这样就能自动的从Jar中进行加载,避免了文件拷贝带来的不一致问题,可以统一升级了。
有了BUG也不怕怕了。
相关文章推荐
- Java Web项目加载properties资源文件
- javaWeb-web项目中加载资源文件路径的两种方式
- Eclipse Tomcat部署项目没有加载新加的静态资源文件
- webpack配置项目加载静态资源
- 启动Springboot项目在浏览器中加载不了静态资源文件
- 一个java web项目classpath配置文件加载类
- Spring框架的WEB项目访问不到静态资源文件
- web项目中servlet利用servletContext对象读取资源文件
- spring-boot 加载本地静态资源文件路径配置
- java web项目启动加载properties属性文件
- Web资源文件的加载
- web项目打包后在代码中获取资源文件
- spring boot 加载本地静态资源文件路径配置
- WEB项目tomcat容器下 java访问自定义的资源文件xml
- Java之—— JAVA Web项目中DLL/SO文件动态加载方法
- Java之——Web项目中DLL文件动态加载方法
- WEB项目web.xml文件中classpath: 跟classpath*:使用的区别
- 用maven搭建springmvc项目时,jsp页面无法加载js或者css等静态资源
- WEB项目web.xml文件中classpath: 跟classpath*:使用的区别
- JAVA WEB项目加载dll文件失败,no xxx in java.library.path