要进行Java Web开发,肯定需要一款比较好的IDE,我这里使用的Eclipse neon。
一、新建Dynamic Web Project
(一)使用Eclipse新建
如果下载的不是Eclipse 的Java EE IDE版本,那是不能直接创建Dynamic Web Project的,需要手动安装Web插件,安装过程见我的另一篇文章:
Eclipse 安装插件开发Java EE:http://blog.csdn.net/yc_wj/article/details/69223160
新建Dynamic Web Project 还需要把 Tomcat 整合到Eclipse中,这样便于我们使用。整合方式见:
Eclipse 配置Tomcat,更改web项目默认部署路径:http://blog.csdn.net/yc_wj/article/details/69229340
在配置Tomcat时,如果发现 Eclipse的 Windows --> Preferences --> Server下没有Tomcat选项,那就需要安装JST Server Adapters Extensons插件,直接进市场搜索即可。
上面的工作完成了,就可以开始开发Web项目了。
1、选择 File --> New --> Dynamic Web Project 即可新建一个Java Web项目,如果 New 子菜单下没有 Dynamic Web Project 选项,那就点击最下方的 Other... 选项
在弹出来的窗口中搜索 Dynamic,就会出现 Dynamic Web Project 选项,如下图:
2、选择Dynamic Web Project 后,会弹出窗口让你填写项目相关信息
1是项目名称,2是项目文件所在路径,默认是Eclipse的工作空间。3是使用的服务器,前面如果配置好了服务器,这里会自动填好,如果没有配置,也可以点击后面的New RunTime按钮进行配置。
3、填写好相关信息后,点击下方 Next> 按钮(不要直接敲回车键,因为敲回车默认敲在 Finish 按钮上了,会直接结束导致一些配置不全,虽然后面可以修改,但还是Next,这样配置比较直观易懂),弹出如下窗口:
这里要记得修改Defalut output folder,这个是源文件的默认编译后输出的位置,也就是.class文件的位置。如果不修改,就会放在 ProjectName/build/classes 目录下。但在Web应用中,这些 .class 文件应该放在 ProjectName/WebContent/WEB-INF/classes 目录下,这样服务器才能找到并加载运行。所以要将 build/classes 修改为 WebContent/WEB-INF/classes,然后点 击Next>,弹出如下窗口。
1是 Context root(项目根目录)默认就是项目名,2是 Content directory(项目内容目录)存放Web资源的目录,不同工具默认值不同,Eclipse是WebContent,不用修改。3一定要勾选上(表示创建通用的 web.xml 文件,这个文件是部署描述符,服务器运行项目必不可少的),虽然后面可以手动创建,但建议还是在这里勾选。
4、点击 Finish 后就可以在 Project Explorer 下看到创建的Web项目,如下图:
Eclipse 创建的Web项目目录如上,会自动生成四个目录:
Deployment Descriptor:TestEclipse 这个是关于项目的部署描述信息,也就是 web.xml 中的信息,不过这里分类列出来了。
Java Resources 这个目录下的 src 目录是用来存放Java 源文件的,例如 java类。而 Libraries 目录是个逻辑性的目录,表示项目引用的各种 JAR 包。
JavaScript Resources 存放的就是 JavaScript 资源
WebContent 这个目录是必要的,可以单独打包这个目录到部署到服务器就可以运行了,WebContent/WEB-INF目录存Web相关信息,可以看到 web.xml 文件就子在这个目录下,而 lib 目录则是存放项目所需 JAR 包的物理目录(就是说必须手动复制JAR到这个目录),其实这个 WebContent 目录下还有一个 classes 目录,不过在这个视图中看不到,需要在 Navigator 视图中查看。
怎么打开 Navigator 视图呢?
Window --> Show View 下就可以找到这个视图,需要打开其它视图也都在这个里面找就行了。
可以去项目存放的物理路径下查看,会发现只有src目录和WebContent目录,这也说明了其它目录实际上是逻辑上的目录,为了管理方便。
进过上面4步就可以成功的建立一个Dynamic Web Project了。
一般不用管 Deployment Descriptor:TestEclipse 和JavaScript Resources 这两个。但要好好了解下另外两个的作用,毕竟你开发Web项目,不能连结构都搞不清嘛。
(二)不适用Eclipse新建Web项目
直接在 Tomcat 服务器的 WebApps 目录下,新建一个项目Test,然后在 Test 目录下新建 WebContent,在 WebContent 目录下新建 WEB-INF,在WEB-INF目录下,新建一个lib文件和一个web.xml文件。
然后就好了,,,从这个过程也能看出,对于一个Java Web目录,最重要的就是 WebContent目录,然后WEB-INF目录,然后 lib 目录和 web.xml 文件。
关于Tomcat 服务器的各目录,也应该要好好了解,可参考博客:http://blog.csdn.net/jdjdndhj/article/details/52694202
Tomcat Server.xml配置文件解析:http://blog.csdn.net/itmagic_jack/article/details/6290239
Tomcat Web.xml配置文件解析:http://blog.csdn.net/itmagic_jack/article/details/6293042
二、使用WebContent目录
第一步中已经搭建起了Java Web项目所需要的目录结构,但这还只是个空架子。接下来就像里面添内容
很多资料上都是直接将 JSP文件放在 WebContent 目录下,但如果有很多JSP文件怎么办了,会显得目录很杂乱不好管理,又因为现在的 JSP文件都是作为视图层的,所以应该新建一个 View 目录存放JSP文件,即使是初学者也应该这样做,才能更好的学习MVC开发模式,这样只不过在访问时需要多加一层路径。
然后,项目总会有很多静态资源的,比如页面的CSS样式文件、JS文件、图片等。所以还应该在 WebContent 目录下新建一个 Public 目录,然后在 Public 目录下新建CSS、JS、Images等目录,分类存放各种资源,这样能更好的管理自己的项目。
这里就不介绍 JSP 要怎么编写了,你也可以直接建一个 html 页面作为测试。
三、部署项目到服务器并访问 (设置虚拟目录)
Eclipse 配置Tomcat,更改web项目默认部署路径:http://blog.csdn.net/yc_wj/article/details/69229340
在上面链接的文章中,已经提到来了怎么部署项目到服务器。所以这里就只说一下怎么设置 Tomcat 服务器的虚拟目录,网上有好几种方式,我这里只说一种最常用的。
PS:初学者还是应该尝试一下所有的部署方式,体会下不同,只有自己动手才能真正的理解和学习。
虚拟目录不同于原始的Tomcat运行方式,原始的方式是把项目拷贝到 webapps 下,然后启动 tomcat,就可以访问 webapps 下的项目。我们使用eclipse配置tomcat,实际上的原理也是这种方式。
但这种方式的弊端在于,webapps 下的项目不是最新的动态,一旦我们修改了eclipse工作目录下的项目,并不能立刻的反应到 tomcat/webapps 下。所以我们不得不编译项目后,清除 webapps 下的缓存,甚至要移除项目,然后再放进去。这样来回折腾,大大降低了工作效率。我们只要改动一个小地方,就要重复的进行一次上面的工作。而且初学的时候,很容易建立很多个项目作为测试,如果都直接部署在 webapps 下,就会导致服务器启动耗时很长,因为服务器会要读取所有项目的配置信息。
而且直接部署到服务器的话,相当于把项目从工作空间,物理的复制到了服务器的webapps目录下或者是你指定的其它物理位置,总之就相当于有两份相同的同时存在了。
总感觉这样很不爽,所以就有了通过虚拟目录的方法来部署项目了。
虚拟目录的作用是把 Web 的发布目录直接定位到 eclipse 工作目录下,实现实时更新,实时使用,也就不会有复制的过程了。下面介绍的方法不用修改Tomcat的server.xml
在 Tomcat 8.5\conf\Catalina\localhost 下新建一个和项目名相同的 projectName.xml 文件,文件内容如下
<Context docBase="F:\workspace\TestEclipse\WebContent" path="/TestEclipse"
workDir="F:\workspace\TestEclipse\WorKDir" reloadable="true" debug="0"/>
docBase:项目文件夹的web-inf文件夹的上一层目录
path:URL的入口地址,访问地址
wordDir:项目中将jsp转换成Java文件存放的地方
出现警告 [SetContextPropertiesRule]{Context} Setting property 'debug' to '0' did not find a matching property.
表示内容中 debug 属性被支持了,只要去除就可以了。
对于上面这个设置以后,启动服务器后,切记不要在项目上右键选择 Run As --> Run on Server(这样就会被Eclipse部署到服务器上去了)这样运行程序,而是启动服务器后,直接在浏览器输入地址去访问项目。(可以在Eclipse中启动服务器,也可以直接在外部启动服务器不过这样Eclipse中的Server就不知道)。
例如:http://localhost:8080/TestEclipse/View/test.jsp 这样就访问到了项目根目录下的 WebContent 目录下的 View 目录下的 JSP 页面。
设置虚拟目录后,每新建一个项目都要写一个对应的简单的配置文件放到 Tomcat8.5\conf\Catalian\localhost 下(基本是复制,只要修改项目名就可以了)。如果有多个项目很明显的影响了服务器启动的时间后,只需要简单的将不需要的使用的配置文件从目录下移除就可以了,需要时添加进去就行了。
Tomcat访问配置文件顺序:
每当我们访问一个项目的时候,tomcat 首先是到 Tomcat/conf/Catalina/localhost 目录下去察看有没有存在主目录或虚拟目录的xml文件,
如果有xml文件,就按xml里的路径进行访问,如果没有xml文件,就到 server.xml 文件里去察看是否配置 context 标签,
如果配置了 context 标签,则在 Tomcat/conf/Catalina/localhost 目录下生成一个对应的 xml 文件,以便于下次直接验证而不再访问 server.xml,
与此同时打开 context 里指定的路径,如果 server.xml 里没有配置 context 标签,则返回访问错误页面。
运行Web项目提示找不到类:
当我们的Web项目,需要使用到Java类时,要注意是否能被正确的编译到 WEB-INF/classes 目录下。
如果运行 web项目时,src下的 java类无法自动编译到 WEB-INF/classes 目录下
解决方法:
在菜单栏选择 project,勾选 Build Automaticly 菜单项。
运行后如果还不可以,Project -> Clean.. 选择第二项Clean projects selected below, 选择OK。(清除以前的编译信息,并重新编译)
如果 WEB-INF 下没有生成 classes 目录,那可能是默认编译文件目录设置错误了,需要手动设置
project->properties->java build path->source->src,将 Default output folder 设置为[项目名] /WebRoot/WEB-INF/classes ,点击OK。
(这也就是我们前面说到的,如果新建Dynamic Web Project 的第二步如果没有设置Default output folder,后面怎么修改)
如果以上3步依然无法解决问题,首先请检查项目是否报错,以及引用的jar包是否路径都正确。
jar路径不对的话,project->properties->java build path->Libraries,将jar路径不正确的引用remove了,然后Add Extenal JARs,重新添加jar包。
由于eclipse的编译是基于时间戳的判断机制的。
因此当你按build all的时候有些eclipse认为时间戳没有改变的类不会被编译。可以先clean下
,