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
当然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/ 中,下面为一个运行示范图:
样式和图片等都可以正常访问。
有时候可能需要使用路径信息等,再看一个示范吧:
/** * 演示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
相关推荐
在本压缩包中,你可能找到了一系列用于支持 Spring MVC 开发的 jar 包。这些 jar 包包含了 Spring MVC 运行所必需的核心库和其他依赖,下面将详细解释这些知识点。 1. **Spring MVC 框架核心组件** - `spring-web...
1. **引入依赖**:在项目的`pom.xml`文件中添加Struts2、Spring、MyBatis以及它们各自依赖的jar包。 2. **配置Struts2**:编写`struts.xml`文件,定义Action及其对应的处理方法。 3. **配置Spring**:创建`...
4. **JDBC Driver**: 如果应用需要访问数据库,需要相应的 JDBC 驱动,如 `mysql-connector-java.jar`,以便进行数据交互。 5. **Hibernate 或 MyBatis**: 这些是 ORM(对象关系映射)框架,简化了数据库操作。如果...
以上这些jar包组合在一起,为开发Spring MVC应用提供了完整的基础环境,涵盖了从数据访问到业务逻辑处理,再到视图呈现的整个流程。在实际开发中,通常会使用构建工具(如Maven或Gradle)来自动化管理和下载这些依赖...
5. **Servlet和JSP**: 如servlet-api、jsp-api,因为SSH基于Servlet和JSP标准,所以需要这两个API的jar包。 6. **其他辅助库**: log4j、slf4j、commons-lang3、commons-logging等,用于日志记录和通用工具函数;C3P...
在IT行业中,转换技术在各种应用场景中发挥着关键作用,比如网页内容的持久化和打印。...通过合理利用pd4ml.jar、ss_css2.jar和fonts.jar,我们可以实现高质量的JSP到PDF的转换,确保内容的保真度和可访问性。
1.spring boot 不支持jsp打jar包,jsp只能打war包. 方法: <packaging>war <groupId>org.springframework.boot <artifactId>spring-boot-maven-plugin 2.tomcat版本不能太新,太新容易不...
在JSP(Java Server Pages)开发中,`jstl.jar` 和 `standard.jar` 是两个非常关键的库文件,它们对于实现动态网页内容呈现和处理有着重要作用。这两个jar文件主要用于引入JSTL(JavaServer Pages Standard Tag ...
### 打WAR包命令详解 #### 基本概念 - **WAR文件**:一种特定于Java Web应用程序的压缩格式,类似于JAR(Java ARchive)文件,但专门用于Web应用。 - **打包**:将Web应用中的所有文件组织并压缩到一个WAR文件中,...
描述中提到的一个常见问题是,当你尝试将Spring Boot应用打包成jar并运行时,JSP页面可能无法正常访问。开发者已经通过一个小的示例(即压缩包中的“demo”)来演示这个问题,并指出在Spring Boot的1.4.2版本中这个...
WEB-INF目录的作用主要有两个方面:存放页面控制器(Servlet)和JSP页面以及存放Java库文件(包括第三方的jar包)。 WEB-INF目录下包含了Web应用程序的核心内容,包括类文件(.class文件)、JSP文件、XML配置文件等...
在开发过程中,当项目需要频繁更新和优化时,传统的部署方式——将项目打包成war包,放入Tomcat的webapps目录下并重启服务,会显得效率低下且繁琐。为了解决这个问题,我们可以利用Tomcat和Maven的热部署配置来实现...
JSP在线销售管理系统,简易java(easyjf)框架开源订销管理系统(测试版),服务器环境,tomcat5.0,主要实现的功能有订单录入、打印,销售汇总、原料管理、客户管理、生产配料计算、报表打英汇总、系统数据管理及维护等...
5. **分发文件**: 通常被打包成JAR文件,用于在不同项目间共享和部署标签库。 6. **JSP页面中的标签库声明**: 在JSP页面中,通过`<%@ taglib %>`指令引入标签库,然后可以在页面的任何地方使用定义的标签。 **2. ...
3用eclipse打包想到或ant打成jar包 在jboss控制台可以看到部署成功 在jmx-console-》jboss-》service=JNDIView -》Operation-》list 可以看到Global JNDI Namespace HelloWorldBean (class: org.jnp.interfaces....
- **JDBC驱动路径**:在`CLASSPATH`中加入数据库驱动文件的路径,如`C:\bea\weblogic81\server\lib\ojdbc14.jar`。 此外,还需注意调整JVM的堆大小,确保报表处理过程中的内存需求得到满足。 #### 3. 实现报表展示...
方法四: 使用命令运行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 ...
2. 把应用程序及所用到的所有资源打成一个或多个 jar 包 3. 如果你的应用程序不会用到任何运行这个应用程序的机器的本地资源,那么,你的应用程序就可以部署了。 4. 如果你的应用程序用到了运行这个应用程序的机器的...
问题的由来 前不久做了一个通过JSP生成PDF报表的小项目...大家通过访问http://sourceforge.net/project/showfiles.php?group_id=15255&release_id=167948下载最新版本的类库,下载完成之后会得到一个.jar包,把这个包