一、JavaEE开发快速入门
1. 什么是JavaEE
- JavaEE(Java Enterprise Edition),Java企业版,是一个用于企业级web开发(不需要使用控制台)平台。最早由Sun公司定制并发布,后由Oracle负责维护。
- JavaEE平台规范了在开发企业级web应用中的技术标准。
- 在JavaEE平台共包含了13个技术规范(随着JavaEE版本的变化所包含的技术点的数量会有增多)。它们分别是:JDBC、JNDI、EJB、RMI、Servlet、JSP、XML、JMS、Java IDL、JPA、JTA、JavaMail和JAF。
2. JavaEE的版本
年份 | JavaEE版本 | 对JDK的支持 | Servlet版本 | JSP版本 |
---|---|---|---|---|
1999年12月 | 1.2 | 1.1 and later | 2.2 | 1.1 |
2001年9月 | 1.3 | 1.3 and later | 2.3 | 1.2 |
2003年11月 | 1.4 | 1.4 and later | 2.4 | 2 |
2006年5月 | 5 | 5 and later | 2.5 | 2.1 |
2009年10月 | 6 | 6 and later | 3 | 2.2 |
2013年6月 | 7 | 7 and later | 3.1 | 2.3 |
2017年8月 | 8 | 8 and later | 4 | 2.3 |
说明:Servlet2.5及以前是使用web.xml的配置方式,3.0及以后可以使用注解的方式进行配置。
3. 案例演示
1.导入SQL脚本(注意,是在test数据库执行如下SQL,后面代码连接的是test数据库,如果大家要使用的话,记得修改数据库的配置!)
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
CREATE DATABASE test;
use test;
DROP TABLE IF EXISTS `constellation`;
CREATE TABLE `constellation` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '星座名',
`summary` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '总结',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `constellation` VALUES (1, '水瓶座', '水瓶座的人很聪明,他们最大的特点是创新,追求独一无二的生活,个人主义色彩很浓重的星座。他们对人友善又注重隐私。水瓶座绝对算得上是”友谊之星“,他喜欢结交每一类朋友,但是确很难与他们交心,那需要很长的时间。他们对自己的家人就显得冷淡和疏远很多了。');
INSERT INTO `constellation` VALUES (2, '双鱼座', '双鱼座是十二宫最后一个星座,他集合了所有星座的优缺点于一身,同时受水象星座的情绪化影响,使他们原来复杂的性格又添加了更复杂的一笔。双鱼座的人最大的优点是有一颗善良的心,他们愿意帮助别人,甚至是牺牲自己。');
INSERT INTO `constellation` VALUES (3, '白羊座', '白羊座有一种让人看见就觉得开心的感觉,因为总是看起来都是那么地热情、阳光、乐观、坚强,对朋友也慷慨大方,性格直来直往,就是有点小脾气。白羊男有大男人主义的性格,而白羊女就是女汉子的形象。');
INSERT INTO `constellation` VALUES (4, '金牛座', '金牛座很保守,喜欢稳定,一旦有什么变动就会觉得心里不踏实,性格也比较慢热,但你是理财高手,对于投资理财都有着独特的见解。金牛男的性格有点儿自我,而金牛女就喜欢投资自己,想要过得更好。');
INSERT INTO `constellation` VALUES (5, '双子座', '双子座喜欢追求新鲜感,有点儿小聪明,就是耐心不够,往往做事都是三分钟热度,难以坚持,但是你的可爱性格会让很多人都喜欢跟你做朋友。双子男表面很花心,其实深情,而双子女就喜欢求新和求变。');
INSERT INTO `constellation` VALUES (6, '巨蟹座', '巨蟹座的情绪容易敏感,也缺乏安全感,容易对一件事情上心,做事情有坚持到底的毅力,为人重情重义,对朋友、家人都特别忠实,巨蟹男是一等一的好男人,顾家爱家人,巨蟹女充满母性光环,非常有爱心。');
INSERT INTO `constellation` VALUES (7, '狮子座', '狮子座有着宏伟的理想,总想靠自己的努力成为人上人,你向往高高在上的优越感,也期待被仰慕被崇拜的感觉,有点儿自信有点儿自大。狮子男的大男人气息很重,爱面子,狮子女热情阳光,对朋友讲义气。');
INSERT INTO `constellation` VALUES (8, '处女座', '处女座虽然常常被黑,但你还是依然坚持追求自己的完美主义,因为在你看来,生活不能将就,追求的完美更不能将就,有目标才有进步,当然也需要鼓励。处女男的毅力很强,能坚持,处女女的求知欲很强。');
INSERT INTO `constellation` VALUES (9, '天秤座', '天秤座常常追求平等、和谐,擅于察言观色,交际能力很强,因此真心朋友不少,因为你也足够真诚,但是最大的缺点就是面对选择总是犹豫不决。天秤男容易在乎自己而忽略别人,天秤女就喜欢被陪伴的感觉。');
INSERT INTO `constellation` VALUES (10, '天蝎座', '天蝎座精力旺盛、占有欲极强,对于生活很有目标,不达到目的誓不罢休,复仇心理重,记仇会让自己不顾一切报复曾经伤害过你的人。天蝎男自我主义色彩很强烈,天蝎女的自我保护意识很强,不容易接近。');
INSERT INTO `constellation` VALUES (11, '射手座', '射手座崇尚自由,勇敢、果断、独立,身上有一股勇往直前的劲儿,不管有多困难,只要想,就能做,你的毅力和自信是难以击倒的。射手男酷爱自由,讨厌被束缚,射手女性格简单直接,不耍心计,可是任性。');
INSERT INTO `constellation` VALUES (12, '摩羯座', '摩羯座是十二星座中最有耐心,为事最小心、也是最善良的星座。他们做事脚踏实地,也比较固执,不达目的是不会放手的。他们的忍耐力也是出奇的强大,同时也非常勤奋。他们心中总是背负着很多的责任感,但往往又很没有安全感,不会完全地相信别人。');
2.将项目案例demo1放到Tomcat服务器的webapps目录中
3.启动Tomcat服务器
4.打开浏览器,在地址栏输入:http://ip地址:8080/demo1访问即可。ip地址写的是Tomcat服务器所在的电脑的ip地址。
5.效果如下
6.可以互相访问对方电脑上的这个项目案例
比如:张三电脑的ip地址是192.168.45.200,他将项目部署到Tomcat服务器中,并且启动了Tomcat服务器。那么李四就可以在浏览器地址栏输入http://192.168.45.200:8080/demo1去访问张三电脑上的项目!
4. 结论
上面的简单案例,就是通过我们JavaEE阶段所学知识就可以很快的做出来!通过观察效果与代码,JavaEE案例与JavaSE的案例对比,可以发现:
- JavaEE案例要使用到浏览器、服务器(Tomcat)、数据库。
- JavaEE案例程序不是通过main方法来运行,而是要放在服务器(Tomcat)来运行。
- JavaEE案例要使用到Servlet和jsp两个技术,而且多了一个web.xml文件做配置。
- JavaEE案例是将结果给打印到了浏览器上,而不是控制台上!
- JavaEE案例可以让更多的人去访问它、使用它!
5. web知识系统整合
二、HTTP协议
1. 引入
浏览器与服务器之间发送数据的时候,是要有格式的,是双方约定好的格式。这样双方才能认识对方发送的数据!
这个格式我们称之为协议(在互联网中主机与主机之间进行访问沟通都需要使用特定的协议),这里我们访问的是Tomcat,想访问Tomcat,就必须知道http协议!
2. HTTP协议介绍
2.1 什么是超文本
超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。超文本更是一种用户界面范式,用以显示文本及与文本之间相关的内容。
2.2 什么是HTTP协议
-
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写, HTTP是万维网(WWW:World Wide Web)的数据通信的基础。
-
HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
-
HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件, 图片文件, 查询结果等)。
-
回顾:网络分层模型各个层的作用。
层 作用 举例说明 物理层 负责光电信号的传输 以太网线、同轴电缆 数据链路层 负责设备之间数据帧的传送和识别 网卡设备驱动、帧同步、冲突检测、CRC 网络层 负责地址管理和路由选择 IP标识主机、路由表规划传输路线 传输层 负责两台主机之间的数据传输 传输控制协议(TCP) 应用层 负责应用程序间沟通 Http、SMTP、FTP、Telnet、网络编程主要针对应用层 -
回顾:TCP与UDP的区别?
TCP协议 UDP协议 面向连接 非面向连接 点到点的通信 可以广播发送 高可靠性:三次握手、四次挥手 传输不可靠、可能丢失 占用系统资源多、效率低 非常简单的协议、开销小 生活案例:打电话 生活案例:发送短信
3. HTTP协议特点
- 支持客户端/服务器模式
- 简单快速
- 灵活(传输的数据类型多样)
- 短连接
短链接是指每次请求响应完成后,连接会自动断开。从http1.1开始,我们使用的是长连接,长连接是每次请求响应完成后,连接会保持一小段的存活时间,供之后的请求使用。长连接要比短连接的效率高! - 单向性
服务端永远是被动的等待客户端(浏览器)的请求。 - 无状态
无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,用户体验度也不好。为了解决HTTP协议无状态,于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。
4. HTTP协议版本发展
目前我们用的还是HTTP1.1版本的!!!
5. HTTP协议中的URL、URI
5.1 URL介绍
URL(Uniform Resource Location统一资源定位符),可以帮助我们唯一定位互联网上的某一个资源,相当于是互联网资源的身份证号。URL由五个元素组成:
- 传送协议
- 域名或者IP地址
- 端口号(以数字方式表示,若为HTTP的默认值“:80”可省略)
- 请求资源路径
- 传递数据(在URL中传递数据是以key=value的结构进行数据绑定,以“?”字符为起点,每个参数以“&”隔开通常以UTF8的URL编码,避开字符冲突的问题)
- 举例:http://127.0.0.1:8080/demo1/HelloServlet?name=尚学堂&birthday=1992-05-09
- http:// 是协议
- 127.0.0.1是ip地址,也可以是域名
- 8080 是端口号
- /demo1/HelloServlet 是请求资源路径,也就是URI
- name=尚学堂&birthday=1992-05-09 是请求传递的参数
5.2 URI介绍
URI:(Uniform Resource Identifier),统一资源标识符,是一个用于标识某一互联网资源名称的字符串。
URI是一个特别抽象的概念,URL包含了URI。
在Java中,当获取请求URI时,常是/demo1/HelloServlet。
6. HTTP协议的请求(掌握)
6.1 概述
http协议就是用来规范请求与响应的数据格式的。
Request 消息分为3部分:
-
第一部分叫Request line 请求行
- 请求方式
- uri
- 协议及版本号
-
第二部分叫Request header 请求头
- key:value
-
第三部分是Request body 请求体
*** get请求没有请求体,将数据通过url直接传递**
*** post有请求体,将数据通过请求体传递**
Request header和Request body之间有个空行。
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
以上述演示案例为例来查看请求信息。
http://localhost:8080/demo1/HelloServlet?name=尚学堂&birthday=1992-05-09
6.2 请求行
请求行中含有:请求的方式、URI、协议/版本。
6.3 请求头
请求头用于说明是谁或什么在发送请求、请求源于何处,或者客户端的喜好及能力。服务器可以根据请求头部给出的客户端信息,试着为客户端提供更好的响应。
请求头中信息的格式为key:value。
- Host
客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号。 - Connection
连接方式。如果值是close则表示基于短连接方式,如果该值是keep-alive,网络连接就是持久的,在一定时间范围内不会关闭,使得对同一个服务器的请求可继续在该连接上完成。 - Upgrade-Insecure-Requests
服务端是否支持https加密协议。 - Cache-Control
指定请求和响应遵循的缓存机制。 - User-Agent
浏览器表明自己的身份(是哪种浏览器)。例如Chrome浏览器:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36。 - Accept
告诉WEB服务器自己接受什么介质类型,/ 表示任何类型,type/* 表示该类型下的所有子类型。 - Accept-Encoding
浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)。 - Accept-Language
浏览器申明自己接收的语言。语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等。 - Accept-Charset
浏览器告诉服务器自己能接收的字符集。 - Referer
浏览器向WEB 服务器表明自己是从哪个网页URL获得点击当前请求中的网址/URL。 - Refresh
表示浏览器应该在多少时间之后刷新文档,以秒计时。 - Cookie
可向服务端传递数据一种模型。
6.4 请求体
客户端传递给服务器的数据。比如:表单使用post方式提交的数据、上传文件数据等。
6.5 请求方式
- GET
向指定的资源发出“显示”请求。
GET请求中会将请求中传递的数据包含在URL中并在浏览器的地址栏中显示。
GET请求传递数据时要求数据必须是ASCII字符。
GET请求可以被浏览器缓存。 - POST
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。
数据被包含在请求体中。
POST请求传递数据时,数据可以是ASCII字符也可以是字节型数据,默认为字节型。
POST请求默认情况下不会被浏览器所缓存。 - HEAD
向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头度中的元信息。 - PUT
向指定资源位置上传其最新内容。 - DELETE
请求服务器删除Request-URI所标识的资源。 - TRACE
回显服务器收到的请求,主要用于测试或诊断。 - OPTIONS
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。 - CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
6.6 GET和POST的区别(重要,面试常问)
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
- GET请求只能进行url编码,而POST支持多种编码方式。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的,而POST则没有。
- 对参数的数据类型GET只接受ASCII字符,POST既可是字符也可是字节。
- GET相比POST来说不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET参数通过URL传递,POST放在Request body中。
7. HTTP协议的响应(掌握)
Response消息也由三部分组成:
- 第一部分叫Response line
- 第二部分叫Response header
- 第三部分叫Response body。
7.1 响应行
和请求消息相比,响应消息多了一个“响应状态码”,它以“清晰明确”的语言告诉客户端本次请求的处理结果。
HTTP状态码分类,共分为5种类型:

常见状态码及含义
* **200 - 请求成功,已经正常处理完毕**
* 301 - 请求永久重定向,转移到其它URL
* 302 - 请求临时重定向
* 304 - 请求被重定向到客户端本地缓存
* **400 - 客户端请求存在语法错误(客户端传递的数据类型不是后端想要的类型)**
* 401 - 客户端请求没有经过授权
* **403 - 客户端的请求被服务器拒绝,一般为客户端没有访问权限**
* **404 - 资源未找到,客户端请求的URL在服务端不存在**
* **405 – 请求方式不支持**
* **500 - 服务端出现异常**
7.2 响应头
响应头用于告知浏览器当前响应中的详细信息,浏览器通过获取响应头中的信息可以知道应该如何处理响应结果。响应头中信息的格式为key:value。
-
Date
响应的Date使用的是GMT时间格式,表示响应消息送达时间。 -
Content-Encoding
文档的编码(Encode)方式。用gzip压缩文档能够显著地减少HTML文档的响应时间。 -
Content-Length
表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。 -
Content-Type
表示响应的文档属于什么MIME类型。 -
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
MIME作用:HTTP协议所产生的响应中正文部分可以是任意格式的数据,那么如何保证接收方能看得懂发送方发送的正文数据呢?HTTP协议采用MIME协议来规范正文的数据格式。
在服务端我们可以设置响应头中Content-Type的值来指定响应类型。 -
MIME类型对应列表
Type Meaning application/postscript PostScript file application/vnd.lotus-notes Lotus Notes file application/vnd.ms-excel Excel spreadsheet application/vnd.ms-powerpoint PowerPoint presentation application/x-gzip Gzip archive application/x-java-archive JAR file application/x-java-serialized-object Serialized Java object application/x-java-vm Java bytecode (.class) file application/zip Zip archive audio/basic Sound file in .au or .snd format audio/midi MIDI sound file audio/x-aiff AIFF sound file audio/x-wav Microsoft Windows sound file image/gif GIF image image/jpeg JPEG image image/png PNG image image/tiff TIFF image image/x-xbitmap X Windows bitmap image text/css HTML cascading style sheet text/html HTML document text/plain Plain text text/xml XML video/mpeg MPEG video clip video/quicktime QuickTime video clip application/msword Microsoft Word document application/octet-stream Unrecognized or binary data application/pdf Acrobat (.pdf) file application/json json
7.3 响应体
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。
<h5>亲爱的尚学堂你好,你的生日是:1992-05-09, 所属的星座是:金牛座</h5>金牛座很保守,喜欢稳定,一旦有什么变动就会觉得心里不踏实,性格也比较慢热,但你是理财高手,对于投资理财都有着独特的见解。金牛男的性格有点儿自我,而金牛女就喜欢投资自己,想要过得更好。<br><br><a href='index.jsp'>继续查询</a>
三、服务器介绍
1. 服务器简介
- 硬件服务器的构成与一般的PC比较相似,但是服务器在稳定性、安全性、性能等方面都要求更高,因为CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。
- 软件服务器(英文名称Server),也称伺服器。指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。
2. 服务器分类
四、Tomcat容器的使用
1. Tomcat的初步使用(掌握)
1.1 Tomcat目录结构与介绍
- bin:用来存放Tomcat服务器的可执行程序,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命令)。
- conf:用来存放Tomcat服务器的配置文件
- lib:用来存放Tomcat服务器的jar包
- logs:用来存放Tomcat服务器运行时输出的日志信息
- temp:用来存放Tomcat服务器运行时产生的临时数据
- webapps:用来存放Tomcat服务器部署的工程
- work:是Tomcat工作时的目录,用来存放Tomcat运行时jsp翻译为Servlet的源码和编译后的文件
1.3 Tomcat启动与关闭
Tomcat的启动与关闭需要执行bin目录中的命令脚本。
注意: 如果启动时闪退,是因为JDK的环境变量配置不规范,需要重新配置。
Tomcat启动
-
方式一
运行startup.bat文件。
-
方式二
catlina.bat start
其中catlina.bat是命令文件,start是启动Tomcat参数。
Tomcat关闭
-
方式一
运行shutdown.bat文件。
-
方式二
catlina.bat stop
其中catlina.bat是命令文件,stop是关闭Tomcat参数。
-
方式三
直接关闭掉控制台窗口。
访问Tomcat
- 访问Tomcat的URL格式:http://ip:port
- 访问本机Tomcat的URL格式:http://localhost:8080
2. Tomcat的常见配置(掌握)
2.1 Tomcat配置文件介绍
Tomcat 的配置文件由4个xml组成,分别是 context.xml、web.xml、server.xml、tomcat-users.xml。每个文件都有自己的功能与配置方法。
context.xml
context.xml 是 Tomcat 公用的环境配置。 Tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器 。
web.xml
Web应用程序描述文件,都是关于是Web应用程序的配置文件。所有Web应用的 web.xml 文件的父文件。
server.xml
是 tomcat 服务器的核心配置文件,server.xml的每一个元素都对应了 tomcat中的一个组件(pojo对象),通过对xml中元素的配置,实现对 tomcat中的各个组件和端口的配置。
tomcat-users.xml
配置访问Tomcat的用户以及角色的配置文件。
2.2 解决控制台乱码
控制台产生乱码的原因是在Tomcat在输出日志中使用的是UTF-8编码,而我们中文的Windows操作系统使用的是GBK编码。由于编码格式不统一,所以出现了乱码。
解决方式:修改conf目录中的logging.properties文件重新指定的编码方式。如果还是不行,那么 就删除该行即可:
java.util.logging.ConsoleHandler.encoding = GBK
2.3 修改Tomcat监听端口
Tomcat默认监听端口为8080。可通过修改server.xml文件来改变Tomcat监听端口。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
2.4 配置Tomcat并发数
Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。
这个并发能力还与应用的逻辑密切相关,如果逻辑很复杂需要大量的计算,那并发能力势必会下降。如果每个请求都含有很多的数据库操作,那么对于数据库的性能也是非常高的。 对于单台数据库服务器来说,允许客户端的连接数量是有限制的。并发能力问题涉及整个系统架构和业务逻辑、系统环境不同、Tomcat版本不同、JDK版本不同、以及修改的设定参数不同。并发量的差异还是满大的。并发数设置参数有如下几个:
-
最大并发数: maxThreads=“1000”
-
初始化时创建的线程数: minSpareThreads=“100”
-
一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程:maxSpareThreads=“500”
-
指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理: acceptCount=“700”
配置实例:
<Connector port="8080" protocol="HTTP/1.1" minSpareThreads="100" maxSpareThreads="500" maxThreads="1000" acceptCount="700" connectionTimeout="20000" redirectPort="8443" />
3. Tomcat版本说明
Tomcat版本 | JDK版本 | Servlet版本 | JSP版本 | EL版本 |
---|---|---|---|---|
9.0.x | 8 and later | 4 | 2.3 | 3 |
8.5.x | 7 and later | 3.1 | 2.3 | 3 |
8.0.x | 7 and later | 3.1 | 2.3 | 3 |
7.0.x | 6 and later | 3 | 2.2 | 2.2 |
6.0.x | 5 and later | 2.5 | 2.1 | 2.1 |
4. Tomcat中配置虚拟主机(Host)
4.1 Host组件
虚拟主机(英语:virtual hosting),又称虚拟服务器, Host组件位于Engine(执行引擎)中用于接收请求并进行相应处理的虚拟主机。
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
name:虚拟主机的名称,Tomcat通过在请求URL中的域名与name中的值匹配,用于查找能够处理该请求的虚拟主机。如果未找到则交给在Engine中defaultHost指定的主机处理;
appBase:此Host的webapps目录,即指定存放web应用程序的目录的路径;
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy(部署);默认为true;
unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true;
4.2 需求
创建项目名为test, 在项目中创建index.html页面。
将index.html资源部署到D盘的bjsxt目录中。
通过www.bjsxt.com:8080/test/index.html访问虚拟主机,并访问index.html。
4.3 创建页面
创建index.html页面。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>BJSXT</title>
</head>
<body>
Welcome to Bjsxt
</body>
</html>
4.4 修改server.xml, 新添加Host配置
<Host name="www.bjsxt.com" appBase="d:/bjsxt" unpackWARs="true" autoDeploy="true">
</Host>
4.5 修改windows的Host文件
修改Windows系统中的Host文件做域名与IP的绑定。
Host文件位置 C:\Windows\System32\drivers\etc
修改内容:
127.0.0.1 www.bjsxt.com
注意:如果不能修改或不能保存该文件,请设置一下权限。右击该文件,点击属性,然后:
4.6 启动服务器,访问资源测试结果
注意:
- 一定要先启动服务器,再访问
- tomcat的默认配置, 自动寻找指定路径下的index.html
4.7 添加Context
- Context是Host的子组件,代表指定一个Web应用,它运行在某个指定的虚拟主机(Host)上;每个Web应用都是一个WAR文件,或文件的目录。
<Host name="www.bjsxt.com" appBase="d:/bjsxt"
unpackWARs="true" autoDeploy="true">
<!-- 配置了Context, 可以自动到D:\bjsxt\test中寻找访问的资源 -->
<Context path="/" docBase="D:\bjsxt\test" />
</Host>
五、Servlet引入(理解)
1. 问题
目前,我们知道浏览器发送请求给服务器,服务器接收到请求后进行解析,然后找对应的代码处理该请求。
这里的代码是我们提前写好放在服务器中的,那这个代码我们能随便写吗?比如方法的名称、参数以及类应该具备什么特点等。
答案肯定是不能的。因为我们随便写的代码,服务器肯定是找不到的。
2. 解决
服务器已经是存在的,就是Tomcat服务器。它支持Servlet规范。而要想让它能找到我们写的处理请求的代码,那我们自己的代码就应该也遵守Servlet规范!
3. Servlet的概念
- Servlet是Server Applet的简称,称为服务端小程序,是JavaEE平台下的技术标准,基于Java语言编写的服务端程序。 Web 容器或应用服务器实现了Servlet标准所以Servlet需要运行在Web容器或应用服务器中。Servlet主要功能在于能够在服务器中执行并生成数据。
- Servlet指的是一个接口规范,具体的体现为接口及其接口的实现类。该接口的名字就是Servlet
- Servlet是JavaWeb开发的三大组件之一(另外两个是过滤器filter与监听器listener)
Servlet在应用程序中的位置
六、部署后的Servlet Web工程目录结构
八、Tomcat运行过程
- 用户访问localhost:8080/test/helloword,请求被发送到Tomcat,被监听8080端口并处理 HTTP/1.1 协议的Connector获得。
- Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。
- Engine获得请求localhost/test/helloword,匹配所有的虚拟主机Host。
- Engine匹配到名为localhost的Host虚拟主机来处理/test/helloword请求(即使匹配不到会请求交给默认Host处理)。
- 匹配到的Context获得请求/helloword。
- 构造HttpServletRequest对象和HttpServletResponse对象.执行业务逻辑、数据存储等程序。
- Context把执行完之后的结果通过HttpServletResponse对象返回给Host。
- Host把HttpServletResponse返回给Engine。
- Engine把HttpServletResponse对象返回Connector。
- Connector把HttpServletResponse对象返回给客户Browser。
-pattern的值就可以了!!
[外链图片转存中…(img-xGuztHPM-1696685900812)]
浏览器没有识别到我们写的h标签,是因为我们没有设置响应的数据类型(后面会介绍),设置为html/text即可。
七、部署后的Servlet Web工程目录结构
八、Tomcat运行过程
- 用户访问localhost:8080/test/helloword,请求被发送到Tomcat,被监听8080端口并处理 HTTP/1.1 协议的Connector获得。
- Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。
- Engine获得请求localhost/test/helloword,匹配所有的虚拟主机Host。
- Engine匹配到名为localhost的Host虚拟主机来处理/test/helloword请求(即使匹配不到会请求交给默认Host处理)。
- 匹配到的Context获得请求/helloword。
- 构造HttpServletRequest对象和HttpServletResponse对象.执行业务逻辑、数据存储等程序。
- Context把执行完之后的结果通过HttpServletResponse对象返回给Host。
- Host把HttpServletResponse返回给Engine。
- Engine把HttpServletResponse对象返回Connector。
- Connector把HttpServletResponse对象返回给客户Browser。