ITPub博客

首页 > 应用开发 > Java > 在JAR包中内嵌页面资源

在JAR包中内嵌页面资源

原创 Java 作者:壹頁書 时间:2014-01-02 23:09:02 0 删除 编辑
有时候使用JAVA写一些功能,封装为一个JAR包,提供给项目使用,这些项目最终发布为WAR包。
但是有的时候,我提供的功能需要少许的页面,如JSP,JS,HTML和图片等。
但是又不能侵入到项目的代码。
当然,使用Servlet3.0可以实现在JAR中内嵌视图资源的功能。
但是如果不使用Servlet3.0,可以写一个过滤器实现这个功能。


过滤器拦截URL中以"/Web/virtual/"开头的请求,并将JAR包中resource下的同名资源返回。
代码如下:

  1. import java.io.IOException;
  2. import java.io.InputStream;

  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. import javax.servlet.annotation.WebFilter;
  10. import javax.servlet.http.HttpServletRequest;

  11. import org.apache.commons.io.IOUtils;

  12. /**
  13.  * Servlet Filter implementation class ResourceFilter
  14.  */
  15. @WebFilter(urlPatterns = "*")
  16. public class ResourceFilter implements Filter {

  17.     @Override
  18.     public void destroy() {
  19.     }

  20.     @Override
  21.     public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
  22.         HttpServletRequest request = (HttpServletRequest) arg0;
  23.         String url = request.getRequestURI();
  24.         if (url.startsWith("/Web/virtual/")) {
  25.             InputStream in = this.getClass().getClassLoader().getResourceAsStream("/resource/" + url.substring("/Web/virtual/".length()));
  26.             try {
  27.                 IOUtils.copy(in, arg1.getOutputStream());
  28.             } finally {
  29.                 IOUtils.closeQuietly(in);
  30.             }
  31.         } else {
  32.             arg2.doFilter(arg0, arg1);
  33.         }
  34.     }

  35.     @Override
  36.     public void init(FilterConfig arg0) throws ServletException {
  37.     }

  38. }
resource中的index.html代码如下

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8.     <img src="pic.jpg" width="200px" height="150px" />
  9. </body>
  10. </html>

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1066649/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339971