准备-servlet 是什么?
Tomact 外传
- https://zhuanlan.zhihu.com/p/54121733
- 内容简介
- 我们为什么需要服务器?
- 3个容易混淆的小概念
- 什么是动态资源?
- Tomcat架构
- 对JavaWeb(6):浅谈JSP的补充
- 动手实现”Tomcat”(视频,比较简陋,就是socket编程,大家自己看)
我们为什么需要服务器?
最本质的作用:
- 将资源对外暴露
- 配合各种传输协议进行响应输出
3个概念
- IP:电子设备(计算机)在网络中的唯一标识,一个IP对应一台实体电脑
- 端口:应用程序在计算机中的唯一标识,一个端口只能被唯一程序占用
- 传输协议:数据传输规则
域名!=IP; 一个IP可以对应多个域名。也就是说一台实体服务器(大铁柜),理论上可以有多个域名(虚拟主机)。实体服务器和网站是两个概念。IP只是对应实体服务器,而域名对应具体的网站
为什么网站用域名标识,方便人类记忆
**
3个容易混淆的概念
- 软件概念的服务器和硬件概念的服务器
软件概念上,只要是一台硬件配置正常、装有操作系统、插着电能上网,并且安装特定软件的电脑,都可以称为服务器。比如你要学习数据库了,于是你装了MySQL服务端,那么此时你的电脑就是一个MySQL服务器。然后你又装了SVN服务端,那么此时你的电脑既是MySQL服务器,又是SVN服务器。Tomcat服务器同理
硬件概念上,服务器本质上也是一台电脑,只不过配置高的同时长相丑了点,基本就是一个冰冷的大铁柜。我们的笔记本电脑既能看片又能玩游戏,而它们基本上专机专用
- Web服务器?Web容器?
其实,Tomcat服务器 = Web服务器 + Servlet/JSP容器(Web容器)
Web服务器的作用是接收客户端的请求,给客户端作出响应。但是很明显,服务器不止静态资源呀,所以客户端发起请求后,如果是动态资源,Web服务器不可能直接把它响应回去(比如JSP),因为浏览器只认识静态资源。所以对于JavaWeb程序而言,还需要JSP/Servlet容器,JSP/Servlet容器的基本功能是把动态资源转换成静态资源。我们JavaWeb工程师需要使用Web服务器和JSP/Servlet容器,而通常这两者会集于一身,比如Tomcat
什么是容器:
- Web应用程序需要部署到Web容器中才能运行,两者都必须符合J2EE规范。Web容器是一种服务程序,给处于其中的应用程序组件提供环境,使其直接跟容器中的环境变量交互,不必关注其它系统问题。主要由应用服务器来实现,如Tomcat。
- Web应用程序规范如下:
- 目录结构:Web应用程序的所有文件都包含在一个文件夹中,该文件夹包含WEB-INF子文件夹和META-INF子文件夹,WEB-INF文件夹包含classes文件夹和lib文件夹以及web.xml文件。
- jar文件:放在WEB-INF/lib文件夹中。
- web.xml文件:整个web应用程序的描述文件,里面定义了Servlet,过滤器,监听器等信息。
- 其它资源文件:(HTML,CSS,JavaScript,JSP,图片等)放在与WEB-INF同一级目录下。(WEB-INF文件夹对于客户端是不可见的)
Tomcat是一个支持Servlet和JSP技术的容器。Tomcat自己就只实现了这两种。Tomcat目录结构:
- /bin:包含启动和关闭Tomcat的文件,如startup.bat,shutdown.bat
- /conf:包含不同的配置文件,如server.xml,web.xml
- /lib:包含Tomcat 运行时所需要的jar文件
- /logs:包含Tomcat 运行时所产生的日志文件
- /temp:包含Tomcat 运行时所产生的临时文件
- /webapps:包含Web应用程序示例及自己开发的Web应用程序
- /work:包含由JSP生成的Servlet
Servlet和JSP两者分工协作,Servlet侧重于解决业务逻辑问题,JSP则侧重于解决页面显示问题。Servlet与JSP一起为Web应用开发带来了巨大的贡献,后来出现的众多Java Web应用开发框架都是基于这两种技术的,更确切的说,都是基于Servlet技术的
总结:Servlet容器的主要任务是管理Servlet的生命周期,而Web容器主要任务是管理Web应用程序
**
访问百度的完整过程
一般开发的WEB应用和服务器的关系-抽象比喻
什么是动态资源?
Tomcat 架构
结合Tomcat的一个配置文件(Server.xml)
和 Web.xml 看这2张图
简略解释一下xml里的配置:**
- Server.xml文件中的配置结构和Tomcat的架构是一一对应的。根目录是
,代表服务器, 下面有且仅有1个 ,代表服务。 下有两个 ,代表连接(需要的话可以再加)。
其实这个Connector就是我们在上面讨论百度服务器时画过的端口。大家可以看到Tomcat默认配置了两个端口,一个是HTTP/1.1协议的,一个是AJP/1.3协议(我也不知道是啥)。前者专门处理HTTP请求。- 当我们在浏览器输入”http://localhost:8080/demo/index.html"时,浏览器是以**HTTP协议**发送的,当这个请求到了服务器后,会被识别为HTTP类型,于是服务器就找来专门处理HTTP的Connector,它的默认端口正是上门Server.xml配置的8080。
- 与Connector平级的还有个
(Tomcat引擎),也就是说 有两个孩子,小儿子是 ,大儿子是 。Connector的作用说穿了就是监听端口,如果用户访问地址是“localhost:8080/xx/xx”,那就由监听8080端口的Connector负责,如果是”https://www.baidu.com“,那么就是443端口处理。其实Connector也不处理实际业务,它只是个孩子。但它会负责把客人(请求)带到哥哥Engine那,然后Engine会处理。 下面有个Host,代表主机。
sum: connector 负责连接,一个connector 对应一种协议; 连接之后,交由 engine 处理; engine 下面可以有多个 host , 默认只有一个 Localhost , 用来处理请求
- 对JavaWeb(6):浅谈JSP的补充:
有两个Servlet很重要,但是在“浅谈JSP”中没有提到
- DefaultServlet:该出手时就出手.
上面案例中,我新建一个动态web工程,只是写了一个HTML,没有编写Servlet,甚至一句Java代码都没写。但是启动Tomcat后我却可以通过浏览器访问到刚才编写的haha.html。这是为何?
对于像Tomcat这样的Servlet容器来说,任何一个请求的背后肯定有个Servlet在默默处理.
查看Web.xml.不错,我们每个动态web工程都有个web.xml,而conf里的这个,是它们的“老爹”。它里面的配置,如果动态web工程没有覆盖,就会被“继承”下来。我们会发现,conf/web.xml里配置了一个DefaultServlet:
sum:DefaultServlet的作用:最低级匹配,当没有对应的Servlet处理当前请求时,才轮到它处理。要么找到并响应请求的资源,要么给出404页面
- JspServlet:JSP的卸妆师傅
我们都知道JSP是“化了浓妆”的Servlet,但是好不容易伪装成了一个JSP,是谁帮它卸妆的呢?另外,大家仔细想想,一般来说JavaWeb阶段我们访问资源有三种“形式
localhost:8080/demo/AServlet:很明显,我们手动写了一个AServlet处理它
localhost:8080/demo/haha.html:虽然我们没写,但是Tomcat自己准备了DefaultServlet
localhost:8080/demo/index.jsp:我擦,谁来处理?
对呀,细思恐极,这*.jsp的资源,谁来处理?其实就是JspServlet。它的作用简而言之就是:
- 首先,根据请求路径找到JSP
- 然后,将它“翻译成”Servlet
最后总结一下Tomcat处理请求的几种方式:
- 动手实现”Tomcat”
JavaWeb中的main() 去哪了?
参考资料:
1.传智播客崔希凡JavaWeb day8
2.传智播客12年云计算班JavaWeb(梁桐) day4
3.黑马12期JavaWeb(刘悦东) day06
4.尚硅谷JavaWeb(佟刚)
5.tomcat中对静态资源的访问也会用servlet来处理吗?
2019-1-6
6.https://zhuanlan.zhihu.com/p/54121733