Servlet 3.0笔记之包含在JAR文件中可直接访问的资源文件特性(资源绑定)
这次标题够长的,在Servlet3协议规范中,包含在JAR文件/META-INFO/resources/路径下的资源可以直接访问了。这么说一说,可能感觉不到到底有什么好处,以往的JSP或者HTML页面只能存在站点的目录下,或者在WEB-INF目录下(只是不能直接访问)。
规范说,${jar}/META-INF/resources/被视为根目录,假设home.jsp被放在${jar}/META-INF/resources/home.jsp,用户可以直接通过 http://域名/home.jsp 访问了。
呈现一个常见的代码片段:
/** * 简单示范 * @author yongboy * @date 2011-1-16 * @version 1.0 */ @WebServlet("/jarHome") public class HelloJarServlet extends HttpServlet { private static final long serialVersionUID = 6177346686921106540L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("date", new Date()); request.getRequestDispatcher("/jarpage/jarhome.jsp").forward(request, response); } }
而jarhome.jsp文件路径则位于 ${jar}/META-INF/resources/jarpage/jarhome.jsp
![](http://lh3.ggpht.com/_iP4ZGnOhL6U/TSFKLsRbU0I/AAAAAAAAAxY/UIR1lgITBjM/%5BUNSET%5D.png?imgmax=800)
当然jarhome.jsp文件则没有什么特别之处:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="css/style.css" type="text/css" /> <title>Welcome to jar home</title> </head> <body> <img alt="j2ee" src="img/j2ee.png" /><br/> <br/> now date : <%=((java.util.Date)request.getAttribute("date")).toString()%> </body> </html>
jarhome.jsp文件所引用css/style.css和img/j2ee.png等文件分别位于 ${jar}/META-INF/resources/css/style.css和${jar}/META-INF/resources/img/j2ee.png目录下。
把生成的jar文件存放在 WEB-INF/lib/ 中,下面为一个运行示范图:
![](http://lh3.ggpht.com/_iP4ZGnOhL6U/TSFKLsRbU0I/AAAAAAAAAxY/UIR1lgITBjM/%5BUNSET%5D.png?imgmax=800)
样式和图片等都可以正常访问。
有时候可能需要使用路径信息等,再看一个示范吧:
/** * 演示jarDemo * * @author yongboy * @date 2011-1-16 * @version 1.0 */ @WebServlet("/jarDemo") public class DemoWebINFPagesServlet extends HttpServlet { private static final long serialVersionUID = -1040850432869481349L; private static final Log log = LogFactory .getLog(DemoWebINFPagesServlet.class); @SuppressWarnings("deprecation") @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { log.info("the /jarDemo is accessed now!"); log.info("getRealPath : " + request.getRealPath("/")); log.info("ServletContext : getRealPath : " + getServletContext().getRealPath("/")); log.info("getPathTranslated : " + request.getPathTranslated()); log.info("get jar's resource:"); InputStream is = getServletContext().getResourceAsStream( "/jarfile/demo.txt"); log.info("the JAR/META-INF/resources/jarfile/demo.txt's content is :\n" + IOUtils.toString(is)); request.getRequestDispatcher("/WEB-INF/pages/notaccess.jsp"); } }
输入命令行信息为:
[framework] 2011-01-03 11:45:16,664 - com.learn.servlet3.jardync.DemoWebINFPagesServlet -798292 [http-8080-exec-6] INFO com.learn.servlet3.jardync.DemoWebINFPagesServlet - the /jarDemo is accessed now!
[framework] 2011-01-03 11:45:16,664 - com.learn.servlet3.jardync.DemoWebINFPagesServlet -798292 [http-8080-exec-6] INFO com.learn.servlet3.jardync.DemoWebINFPagesServlet - getRealPath : /home/yongboy/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/d/
[framework] 2011-01-03 11:45:16,664 - com.learn.servlet3.jardync.DemoWebINFPagesServlet -798292 [http-8080-exec-6] INFO com.learn.servlet3.jardync.DemoWebINFPagesServlet - ServletContext : getRealPath : /home/yongboy/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/d/
[framework] 2011-01-03 11:45:16,665 - com.learn.servlet3.jardync.DemoWebINFPagesServlet -798293 [http-8080-exec-6] INFO com.learn.servlet3.jardync.DemoWebINFPagesServlet - getPathTranslated : null
[framework] 2011-01-03 11:45:16,665 - com.learn.servlet3.jardync.DemoWebINFPagesServlet -798293 [http-8080-exec-6] INFO com.learn.servlet3.jardync.DemoWebINFPagesServlet - get jar's resource:
[framework] 2011-01-03 11:45:16,665 - com.learn.servlet3.jardync.DemoWebINFPagesServlet -798293 [http-8080-exec-6] INFO com.learn.servlet3.jardync.DemoWebINFPagesServlet - the ${JAR}/META-INF/resources/jarfile/demo.txt's content is :
haha,the demo.s's content!
haha,haha,haha!
可以看到getRealPath("/")得到的是项目的根路径(可以参照JAR解压后的路径)。而request.getPathTranslated则因为是包含在jar文件中(规范中说包含在远程主机、数据库、JAR存档文件中,getPathTranslated都会返回null),则返回null。
包含在jar中的资源文件,一样可以使用getResourceAsStream获取到。
再来看看jar文件META-INF/resources目录下文件结构:
- css/style.css
- img/j2ee.png
- jarfile/demo.txt
- jarpage/jarhome.jsp
- jsp/h.jsp
- jsp/helloWorld.jsp
很显然,就是一个小型站点目录结构。
每一个模块,建立一个WEB站点应用,使用ANT脚本自动打包成jar文件,拷贝到真正站点WEB-INF/lib下。
假设一个JAR文件包含一个具体的模块,那么模块的部署与装载将是十分方便的。
原文:http://www.blogjava.net/yongboy/archive/2011/01/03/346208.html
相关推荐
1.spring boot 不支持jsp打jar包,jsp只能打war包. 方法: <packaging>war <groupId>org.springframework.boot <artifactId>spring-boot-maven-plugin 2.tomcat版本不能太新,太新容易不...
JSP在线销售管理系统,简易java(easyjf)框架开源订销管理系统(测试版),服务器环境,tomcat5.0,主要实现的功能有订单录入、打印,销售汇总、原料管理、客户管理、生产配料计算、报表打英汇总、系统数据管理及维护等...
3用eclipse打包想到或ant打成jar包 在jboss控制台可以看到部署成功 在jmx-console-》jboss-》service=JNDIView -》Operation-》list 可以看到Global JNDI Namespace HelloWorldBean (class: org.jnp.interfaces....
方法四: 使用命令运行jar或war,因为也是一个传统JavaWeb项目,前后端不分离,打成jar会无法访问静态资源,所以只能打成war,把WEN-INF下面的东西也打包好) java -jar xxx.war 具体可以自行百度搜索Spring Boot项目的...
-- 将源码打包成JAR包 --> <groupId>org.apache.maven.plugins <artifactId>maven-source-plugin <attach>true <phase>compile <goal>jar ...
问题的由来 前不久做了一个通过JSP生成PDF报表的小项目...大家通过访问http://sourceforge.net/project/showfiles.php?group_id=15255&release_id=167948下载最新版本的类库,下载完成之后会得到一个.jar包,把这个包
使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,...
快逸报表使用 在网上找个很多资料,也按着资料去尝试了多次,最终都...--webutil.jar,快逸报表自身带的jar是不能用的,本人所用版本这个jar包为3.6kb,替换成一个网上找打一个新的4.05kb大小的webutil.jar后,问题解决了.
使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到...
使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到...
使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到...
使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不...
ROOT\WEB-INF\lib\MyServlet.jar(如果你的servlet的.class打成了.jar文件,则放在 lib下面) ROOT\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文件放在这个 里面) 然后在浏览器中输入...
使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,...
4 20 2将类压缩成JAR文件 4 20 3更新 查看JAR文件 习题 第5章字符串 5 1字符串 5 2字符串的常用方法 5 3字符串与基本数据的相互转化 5 4对象的字符串表示 5 5StringTokenizer类 5 6字符串与字符 字节数组 5 7...
好了,不说废话了,现在我向你介绍JAVA的数据库访问技术----JDBC数据库访问技术(你可千万不要搞成ODBC了哟!)。 JDBC技术事实上是一种能通过JAVA语言访问任何结构化数据库的应用程序接口(API)(Sun这样说的,我...
使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不...
使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不...
一个jsp文件(fee.jsp),使用jpivot的标签(jp:mondrianQuery),写入多维查询表达式。 2.1. 数据库连接 直接用jdbc 在应用服务器中定义数据源 例子在tomcat中定义了数据源feeDS 2.2. 各种维度类型 一般...