一、了解网络结构

二、了解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中拷贝即可

4、web.xml

(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目录中。