一、了解网络结构
二、了解JavaEE各种服务器
Tomcat是Apache 软件基金会的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 8 支持最新的Servlet 3.1 和JSP 2.3 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
现在Tomcat 9也越来越稳定,很多新环境新产品,也开始使用Tomcat 9作为生产环境服务器。
Tomcat版本技术对照表 | |||||
版本(更新) | 6.x | 7.x | 8.0.x | 8.5.x | 9.x |
规范及JDK | |||||
JDK | ≧5.0 | ≧6.0 | ≧7.0 | ≧7.0 | ≧8.0 |
Servlet | 2.5 | 3.0 | 3.1 | 3.1 | 4.0 |
JSP | 2.1 | 2.2 | 2.3 | 2.3 | 2.3 |
EL | 2.1 | 2.2 | 3.0 | 3.0 | 3.0 |
WebSocket | N/A | 1.1 | 1.1 | 1.1 | 1.1 |
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
Jetty版本技术对照表 | |||||
版本(更新) | 7.x | 8.x | 9.2.x | 9.3.x | 9.4.x |
规范及JDK | |||||
JDK | ≧5.0 | ≧6.0 | ≧7.0 | ≧8.0 | ≧8.0 |
Servlet | 2.5 | 3.0 | 3.1 | 3.1 | 3.1 |
JSP | 2.1 | 2.2 | 2.3 | 2.3 | 2.3 |
Protocols | HTTP/1.1 RFC2616, WebSocket RFC 6455, SPDY v3 | HTTP/1.1 RFC2616, WebSocket RFC 6455, SPDY v3 | HTTP/1.1 RFC2616, javax.websocket, SPDY v3 | HTTP/1.1 (RFC 7230), HTTP/2 (RFC 7540), WebSocket (RFC 6455,JSR 356), FastCGI | HTTP/1.1(RFC 7230), HTTP/2(RFC 7540), WebSocket (RFC 6455,JSR 356), FastCGI |
Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。
Resin 主要分 普通版和PRO版,到目前也就3.x、4.x 两个大版本,最新的是2017-12-07发布的4.0.55,支持的JavaEE6标准。
普通版:GPLv3
PRO版:收费
WebLogic是美国Oracle公司出品的一个Application Server,确切的说是一个基于JavaEE架构的中间件,是并购BEA得来。
WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
最新版:12cR2
WebSphere 是 IBM 的软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。WebSphere 提供了可靠、灵活和健壮的软件。
WebSphere Application Server 是该设施的基础,其他所有产品都在它之上运行。WebSphere Process Server 基于 WebSphere Application Server 和 WebSphere Enterprise Service Bus,它为面向服务的体系结构 (SOA) 的模块化应用程序提供了基础,并支持应用业务规则,以驱动支持业务流程的应用程序。高性能环境还使用 WebSphere Extended Deployment 作为其基础设施的一部分。其他 WebSphere 产品提供了广泛的其他服务。
WildFly是一个基于JavaEE的开放源代码的应用服务器。 以前直接叫JBoss,听说后来为了企业版与开源版区分,就将开源JBoss命名为WildFly,代码遵循LGPL许可,可以在任何商业应用中免费使用。WildFly是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但WildFly核心服务不包括支持servlet/JSP的WEB容器,以前默认内置Tomcat,现在内置Undertow。
GlassFish 是一款强健的商业兼容应用服务器,达到产品级质量,可免费用于开发、部署和重新分发。
开发者可以免费获得源代码,还可以对代码进行更改。
GlassFish目前版本分为:3.x/4.x/5.x
3.x:JavaEE6
4.x:JavaEE7
5.x:JavaEE8(2017年8月JavaEE8最终规范24票通过)
三、Tomcat结构与基本使用
/bin:存放用于启动及关闭的文件,以及其他一些脚本。其中,UNIX 系统专用的 *.sh 文件在功能上等同于 Windows 系统专用的 *.bat 文件。
因为 Win32 的命令行缺乏某些功能,所以又额外地加入了一些文件。
/conf:配置文件及相关的 DTD。其中最重要的文件是 server.xml,这是容器的主配置文件。
/logs:日志文件的默认目录。
/webapps:存放 Web 应用的相关文件。
/bin/startup.bat:Windows系统中此批处理用来启动Tomcat服务。
/bin/shutdown.bat:Windows系统中此批处理用来关闭Tomcat服务。
在浏览器直接输入:http://localhost:8080/ 即可看到Tomcat页面,如下图:
注:此页面访问的是 /webapps/ROOT/ 文件下的内容。很多生产环境都非常需要以下特性:在无需关闭或重启整个容器的情况下,部署新的 Web 应用或者取消对现有应用的部署。或者,即便在 Tomcat 服务器配置文件中没有指定 reloadable 的情况下,也可以请求重新加载现有应用。
Tomcat 中的 Web 应用 Manager 就是来解决这些问题的,它默认安装在上下文路径:/manager 中,支持在线各种功能,但是Tomcat默认是关闭这个功能,需要手动添加用户。
添加用户,只需要在/conf/tomcat-users.xml文件的<tomcat-users>标签内写入如下内容:
<role rolename="manager-gui"/>
<user username="admin" password="a" roles="standard,manager-gui" />
访问Manager App如下图:
Tomcat Context虚拟路径
在生产环境中,我们通常会将所有资源文件放在一个盘或文件夹中统一管理,统一访问,在Tomcat中我们可以这样设置:
1、在/conf/server.xml中的Host节点添加如下内容:
<Context docBase="D:/resource" path="/res" reloadable="true" />
path:是映射的虚拟路径,即如上访问路径为:http://localhost:8080/res/
docBase:是静态资源存放的真实物理路径
reloadable:指文件更新时,是否重新加载,一般为true即可
2、实例:比如在 D:/resource 目录下有图片 logo.png,
那么可以通过地址 http://localhost:8080/res/logo.png 直接访问;
四、掌握EclipseJEE中JavaWeb项目的新建与结构
1、设置Tomcat服务器
禁止:目录包含中文、空格
2、设置 Web Browser
开发中我们一般使用Google浏览器、火狐浏览器、360浏览器等;
大家需要先安装后,将Eclipse设置自动启动对应的浏览器,如下图:
3、创建JavaWeb项目
右键 → New → Other → Web → Dynamic Web Project → 写上项目名称 → Next → Next
注:
这里我们不去勾中 Generate web.xml,直接Finish;
因为由于网络原因,勾选后创建项目可能特别慢,我们从Tomcat的examples中拷贝即可
(1) 我们将 web.xml 中 web-app 标签内 除 <welcome-file-list>标签外的所有内容删除;
(2) 其中 metadata-complete 参数含义如下:
a、设为true:则容器在部署时将只依赖部署描述文件,忽略所有的注解(同时也会跳过 web-fragment.xml 的扫描,亦即禁用可插性支持,具体请看后文关于 可插性支持的讲解);
b、设为false:则表示启用注解支持(和可插性支持);默认为false,项目中一般不设置;
5、Eclipse中的JavaWeb项目结构
6、JavaWeb项目标准结构
(1)前面我们熟悉了Eclipse为我们开发方便,构建的JavaWeb项目结构,这个结构是基于JavaWeb项目标准结构的,做了一些扩展。
(2)当我们将项目打包后,会发现目录结构如下:
注:其中我们编写的Java文件编译后,被放在WEB-INF下的classes目录中。
也就是src目录下的所有内容,都被放在classes目录中。