而jarhome.jsp文件路径则位于 ${jar}/META-INF/resources/jarpage/jarhome.jsp
当然jarhome.jsp文件则没有什么特别之处:
pageEncoding="UTF-8"%>
Welcome to jar homenow date :
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文件包含一个具体的模块,那么模块的部署与装载将是十分方便的。