`
120153216
  • 浏览: 59994 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

jsp打成jar包访问

    博客分类:
  • jsp
 
阅读更多

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 boot + jar打包部署tomcat 404错误问题

    1.spring boot 不支持jsp打jar包,jsp只能打war包. 方法: &lt;packaging&gt;war &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-maven-plugin 2.tomcat版本不能太新,太新容易不...

    JSP在线销售管理系统.rar

    JSP在线销售管理系统,简易java(easyjf)框架开源订销管理系统(测试版),服务器环境,tomcat5.0,主要实现的功能有订单录入、打印,销售汇总、原料管理、客户管理、生产配料计算、报表打英汇总、系统数据管理及维护等...

    EJB HelloWorld

    3用eclipse打包想到或ant打成jar包 在jboss控制台可以看到部署成功 在jmx-console-》jboss-》service=JNDIView -》Operation-》list 可以看到Global JNDI Namespace HelloWorldBean (class: org.jnp.interfaces....

    springboot+mybatis+shiro的电商书城系统.zip

    方法四: 使用命令运行jar或war,因为也是一个传统JavaWeb项目,前后端不分离,打成jar会无法访问静态资源,所以只能打成war,把WEN-INF下面的东西也打包好) java -jar xxx.war 具体可以自行百度搜索Spring Boot项目的...

    maven的优缺点 项目

    -- 将源码打包成JAR包 --&gt; &lt;groupId&gt;org.apache.maven.plugins &lt;artifactId&gt;maven-source-plugin &lt;attach&gt;true &lt;phase&gt;compile &lt;goal&gt;jar ...

    利用iText在JSP中生成PDF报表

    问题的由来 前不久做了一个通过JSP生成PDF报表的小项目...大家通过访问http://sourceforge.net/project/showfiles.php?group_id=15255&release_id=167948下载最新版本的类库,下载完成之后会得到一个.jar包,把这个包

    java源码包---java 源码 大量 实例

    使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu  Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,...

    快逸报表在J2EE部署中最简实例

    快逸报表使用 在网上找个很多资料,也按着资料去尝试了多次,最终都...--webutil.jar,快逸报表自身带的jar是不能用的,本人所用版本这个jar包为3.6kb,替换成一个网上找打一个新的4.05kb大小的webutil.jar后,问题解决了.

    java源码包2

    使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu  Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到...

    java源码包3

    使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu  Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到...

    java源码包4

    使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu  Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到...

    JAVA上百实例源码以及开源项目源代码

    使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不...

    tomcat环境变量配置

    ROOT\WEB-INF\lib\MyServlet.jar(如果你的servlet的.class打成了.jar文件,则放在 lib下面) ROOT\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文件放在这个 里面) 然后在浏览器中输入...

    JAVA上百实例源码以及开源项目

    使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu  Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,...

    Java2实用教程.rar

    4 20 2将类压缩成JAR文件 4 20 3更新 查看JAR文件 习题 第5章字符串 5 1字符串 5 2字符串的常用方法 5 3字符串与基本数据的相互转化 5 4对象的字符串表示 5 5StringTokenizer类 5 6字符串与字符 字节数组 5 7...

    java程序是怎么操作数据库的,可以以常用据库为例,求详细解答,最好能举例。

    好了,不说废话了,现在我向你介绍JAVA的数据库访问技术----JDBC数据库访问技术(你可千万不要搞成ODBC了哟!)。 JDBC技术事实上是一种能通过JAVA语言访问任何结构化数据库的应用程序接口(API)(Sun这样说的,我...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不...

    jpivot学习总结.doc

    一个jsp文件(fee.jsp),使用jpivot的标签(jp:mondrianQuery),写入多维查询表达式。 2.1. 数据库连接  直接用jdbc  在应用服务器中定义数据源 例子在tomcat中定义了数据源feeDS 2.2. 各种维度类型  一般...

Global site tag (gtag.js) - Google Analytics