1手动编译servlet工程:

要编译servlet,则类路径classpath中必须包括Servlet API 的相关类,如果使用的web容器是Tomcat,则这些类通常封装在在tomcat的lib目录中servlet-api.jar。上面的编译出的.class文件会出现在build的classes目录中,并有对应的包层级。(上一篇随笔已讨论过,如果系统classpath设置第三方jar包路径了,编译时就不需手动加上包路径)

Eclipse这种IDE会自动完成类路径设置,并完成编译等事宜。

2 如何引入tomcat的lib下jar包,如常用的tomcat-api.jar

项目右键Build path --Add Library选择 Server runtime ,next后点击Apache Tomcat .OK

操作完成后,工程Libries下就有了Apache Tomcat库

3 对于sqljdbc4.jar包所放位置问题

(1)普通的Java Project:

右键构建路径添加扩展包,找到sqljdbc4.jar所在位置。结果如下图。

(2)动态网站

放在WEB-INF/lib下.

注意:复制包到WEB-INF/lib下,会发现Libraries下的Web App Libraries就有了相应jar包。

说明:web-inf下的lib目录:主要存放我们web程序下需实现某个功能所需要的jar包。.WEB-INF 是WEB容器路径,也就是说,当把应用部署到网络上去的时候。程序会到WEB-INF\LIB 下去找相应的包。 jar包:ar包就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性了,这些jar包一般都会放在lib目录下的。 如:文件上传功能需要使用到commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar。连接Oracle数据库需要使用到ojdbc14.jar

不同工程jar所放位置不同分析原因:

通俗的讲是和classLoader有关,对于纯java项目,它不存在WEB-INF目录,所以在引入jar包的时候一般都是通过buildpath直接引入,例如我要引入sqljdbc4.jar,那么先定义一个user library,然后通过build path引入。

纯java项目使用的本地自己的JRE,那么classLoader在加载jar和class时候是分开的,对于我们自己编写的class,会在APP_HOME/bin下。导入的jar包或者user library的配置信息会出现在APP_HOME/.classpath文件中,ClassLoader会很智能去加载这些classes和jar。

.classpath文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<classpath>

<classpathentry kind="src" path="src"/>

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>

<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/lei"/>

<classpathentry kind="output" path="bin"/>

</classpath>

而对于java web项目,就不一样了,虽然eclipse的workspace中仍然有.classpath文件,你导入的了自己定义的user library,也会出现在.classpath中,但就是不去加载。这到底是为什么呢???

对于java web项目,它最终不是通过本地的JRE去运行,而是部署到web 服务器,如Tomcat、Weblogic、WebSphere等,这些服务器都实现了自身的类加载器。

以Tomcat典型结果为例,它的目录结构分别对应四个不同的类加载器,关系如下:

common --- CommonClassLoader

server --- CatalinaClassLoader

shared --- SharedClassLoader

webapps --- WebappClassLoader

我们的 web 应用都是部署到 webapps 目录下,而WebappClassLoader加载器专门负责加载 webapps 下所有web项目的 WEB-INF 下的类库和类文件。而我们通过 user library 引入的 jar 包自然不会被 WebappClassLoader 加载器加载,所以才会出现 ClassNotFoundException 。

比如tomcat应用服务器,它有其自己的类加载器,根据J2EE的规范去%web-project%/WEB-INF/lib的规范去找相应的lib,这就是为什么我们发布的WEB应用要符合那个格式

另有说法:eclipse工程下的library是用来编译里面的src中java文件的 实际发布到tomcat时,仅仅只复制了WEB-INF/lib里面的jar包,所以出现eclipse可以正常编译但tomcat运行是找不到类,

总结:如果是编译java代码用到的jar可以作为library引用,如果是框架非java代码部分用到的jar就必须放在WEB-INF/lib

3. 使用标注(@WebServlet("/Servlet3"))来定义Servlet是Java EE 6中 Servlet 3.0之后才有的功能,先前的版本必须通过web.xml定义相关Servlet信息。在Servlet3.0中,也可以使用web.xml来定义servlet,会覆盖掉标注。

<servlet>

<servlet-name>Serv</servlet-name>

<servlet-class>com.lei.Servlet3</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Serv</servlet-name>

<url-pattern>/myservlet1</url-pattern>

</servlet-mapping>

注意: <servlet-name>可以为任意名字。

注意:建工程的时候,自动生成的web.xml在哪WEB-INF下

二 . BAE

实验算是成功,外网可以访问到了。后期可以学学连mysql,BAE支持这个数据库。

问题:1 目前只能是新建个版本,svn check out下来 ,按默认的目录把相应文件放进去,这相当于是BAE帮我们维护的文件组织形式。

Src放的是源码即.java文件,里面是BAE默认的包结构,可以整个替换src目录。

Svn commit后,会提交到BAE,BAE后台会帮我们编译(支持JAVA,就是说明有JAVA编译器)有错误在云平台也可以查看。至于编译后的目录我们无法查看

(即看不到编译后的.class文件)。不像在本地编译好后,我们可以查看发布到tomcat的包结构。

WEB-INF目录进去,classes放的是编译好的.class文件。

(本地的tomcat的webapps中放置的是部署到Tomcat的编译过的组织结构)

BAE帮助文档中说

所用的web容器是jetty,当用户通过SVN更新项目代码后,执行环境自动将编译为标准的WAR包后发布。

不同容器维护的工程结构不同,所以不能直接上传由eclipse导出的war包。不支持,所以无法访问。

注意,目前BAE不支持servlet标注定义servlet的url。只能通过web.xml来配置。所以eclipse生成的标记通过svn上传时可以删掉,不删也没影响,但是必须在xml中配置好。

三 SAE目前没成功

servlet相关 jar包位置 BAE上部署web应用的更多相关文章

  1. 网站日志流量分析采集(LuaJIT系统环境部署-node03,相关jar包自己手动上传)

    注:/usr/local/src 是源码包路径,可以自己更改 服务器中安装依赖 yum -y install gcc perl pcre-devel openssl openssl-devel 上传 ...

  2. Spring4相关jar包介绍(转)

    Spring4相关jar包介绍 spring-core.jar(必须):这个jar 文件包含Spring 框架基本的核心工具类.Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当 ...

  3. Spring3.2.2中相关Jar包的作用

    今天在看Spring的源码的时候不知道从什么地方开启应该合适,因为不太清楚实现类所在的具体Jar包,就从网上找了些,可是网上有的说的是不清不楚,甚至是有些错误的,所以就把相关Jar包的大致作用给整理了 ...

  4. 关于在BAE上部署ThinkPHP框架的问题

    现在有点小兴奋,因为在在BAE上部署ThinkPHP框架的问题快折腾一天了,午觉都没睡,不过没白整总算有点结果.不扯淡了,直入正题吧. 之前熟悉ThinkPHP框架,想在BAE上用ThinkPHP做点 ...

  5. Java 解析epub格式电子书,helloWorld程序,附带源程序和相关jar包

    秀才坤坤出品 一.epub格式电子书 相关材料和源码均在链接中可以下载:http://pan.baidu.com/s/1bnm8YXT 包括 1.JAVA项目工程test_epub,里面包括了jar包 ...

  6. 定义任务打印gradle下载的jar包位置

    //定义任务打印gradle下载的jar包位置task showMyCache { configurations.compile.each { println it }}

  7. BAE上部署Ghost 0.5.1注意事项

    BAE上部署Ghost可参考基本安装上述安装使用的是ghost0.4.7版本 在ghost 0.5 中为了解决测试时事件侦听器过多引发的警告,在注册single事件时,将代码由原先的 process. ...

  8. IDEA里如何多种方式打jar包,然后上传到集群

    关于IDEA里如何多种方式打jar包,然后上传到集群的问题? 前期准备,就是在,IDEA里,maven来创建项目.这里不多赘述. 1)用maven项目来打包,我推荐这个. (强烈推荐,简单又快速) S ...

  9. 在BAE上部署Pomelo

    BAE升级到3.0后顿时感觉好用了很多,俨然云主机的感觉. 底下我将分享我在BAE上部署Pomelo的过程. 首先需要拥有一个BAE的执行单元.没有的可以自行百度并部署. 接着svn得出代码到本地.此 ...

随机推荐

  1. HttpClient后台post 请求webapi

    1.请求方法 /// <summary> /// httpClient 请求接口 /// </summary> /// <param name="url&quo ...

  2. 干货分享 超炫丽的HTML5/jQuery应用及代码

    今天我们要来分享一些HTML5干货,对于前段开发者来说,这些HTML5应用和jQuery插件将会让你的项目更加生动和炫丽,至少在UI设计方面,或多或少会带给你一点设计灵感,赶紧收藏和分享吧.另外这些H ...

  3. u3d外部资源 打包与加载的问题

    被坑了一下午,调bug,u3d外部加载资源一会可以,一会不行,始终找不到问题,最后快下班的时候,重新试了一下,原来是资源打包之前的文件名,和之后的加载资源名必须一样 [MenuItem("C ...

  4. QQ彩票任意订阅内容导致骚扰用户

    数据包: POST /my/index.php?mod=securityinfo&op=AjaxUpdateTipsSet HTTP/1.1 Host: 888.sports.qq.com C ...

  5. 页面加载中jquery逐渐消失效果实现

    为了获得更好的用户体验,现在大多数网页都会在页面中加一个加载中效果,这里实现一个加载中逐渐消失的效果,以至于看上去不那么生硬. html: <div id="loading" ...

  6. 在AD的环境下,更改计算机名导致TFS,无法连接解决办法

    D:\vs2015>tf workspaces /collection:http://10.1.0.104:8080/tfs/dahua.adrms /updateComputerName:WI ...

  7. 申请LINE 帐号的所有方法

    如果你打算用LINE 交朋友或是做行销,你就必须先要拥有一个甚至许多个LINE 帐号.在本篇文章中,将分享给你目前申请LINE 帐号的所有可能方法. 目前LINE 公司允许大家使用以下二种身分申请LI ...

  8. golang 内存分析/动态追踪

    如果你的go程序是用http包启动的web服务器,你想查看自己的web服务器的状态.这个时候就可以选择net/http/pprof.你只需要引入包_"net/http/pprof" ...

  9. SQLServer2008/2005 生成数据字典语句

    SELECT 表名 then d.name else '' end, 表说明 then isnull(f.value,'') else '' end, 字段序号=a.colorder, 字段名=a.n ...

  10. CentOS 6.3下搭建Web服务器

    准备前的工作: 1.修改selinux配置文件(/etc/sysconfig/selinux) 关闭防火墙 (1)把SELINUX=enforcing注释掉 (2)并添加SELINUX=disable ...