Servlet基础:容器
一、容器概述
Servlet是一种运行在服务器上的小插件,Servlet最常见的用途是扩展Web服务器的功能,Servlet具有以下的特点:
- 提供了可被服务器动态加载并执行的程序代码,为来自客户端的请求提供相应的服务。
- Servlet完全使用Java语言编写,因此要求运行Servlet的服务器必须支持Java语言
- Servlet完全在服务器端运行,因此他的运行不依赖于浏览器。
Tomcat作为运行Servlet的容器,其基本的功能是负责接收和解析来自客户端的请求,同时把客户端的请求传递给相应的Servlet,并把Servlet的相应结果返回给客户。
如果Web服务器应用得到一个指向某Servlet的请求,此时,服务器不是把这个请求交给Servlet本身,而是交给部署该Servlet的容器。由容器向Servelt提供Http请求和响应,而且要由容器调用Servlet的方法,如doGet()或doPost()。流程如下图所示:
二、容器提供什么
如前文所述,要由容器用来管理和运行Servlet,这是为什么呢?容器到底带给我们什么呢?如下所示,是容器提供给我们的,也是使用容器的原因:
- 通讯支持:利用容器提供的方法,可以轻松的让servlet与web服务器对话,无需自己建立ServerSocket、监听端口、创建流等。容器知道自己与Web服务器之间的协议。
- 生命周期的管理:控制着Servlet的生与死。
- 多线程支持:容器会自动的为其接收的每个Servlet请求创建一个新的Java线程。
- 声明方式实现安全:利用容器,可以使用XML部署描述文件来配置和修改安全性,而不必将其硬编码写入到Servlet(或其他)类代码中。
- JSP支持:将JSP翻译成Java。
总而言之,有了容器,我们可以更专注于自己的业务逻辑,而不必考虑为请求监听、线程管理、安全性及网络通讯编写代码。
下图为容器处理请求的过程:
Servlet示例代码:
/*** 创建一个简单的Servlet类*/
public class Ch1Servlet extends HttpServlet {/*** get请求* @param request 容器创建的请求* @param response 容器创建的响应。 Servlet从此处获取到容器创建的请求和响应。* @throws IOException*/public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {PrintWriter out = response.getWriter();Date today = new Date();//获取到客户请求之后,响应一个HTML页面给客户out.println("<html>\n" +"<!-- 简单的Html页面 -->\n" +"<head>\n" +" <title>A Login Page</title>\n" +"</head>" +"<body>\n" +"<h1 align=\"center\"> wangy login page</h1>\n" +"<br>" + today+"</body>\n" +"\n" +"</html>");}}
三、 Servlet的三个名字
容器如何找到某个需要的Servlet呢?作为客户端请求的一部分,URL会以某种方式映射到服务器上的一个特定的servlet。我们需要配置这种映射,这牵扯到Servlet的三个名字:
1)客户知道的URL名(公共URL名):
Servley有一个公共的URL名,这是客户所知道的名字,这个名字写在HTML中,当用户点击一个指向该servlet的链接时,就可以把这个公共URL名放在HTTP请求中,发送给服务器。公共URL只是一个虚构的名字,完全为客户提供的。
2)部署人员知道的秘密内部名:
部署人员可以造一个名字,这个名字只有他自己知道,这个名字也是虚拟的,只用于部署Servlet。
3)实际的文件名:
开发人员的servlet类有一个完全限定名,其中包括类名和包名。servlet类文件有一个实际的路径和文件名。这取决于其在服务器上的文件位置。
下面是将URL映射到servle
t的部署文件(web.xml)示例:
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><!-- 部署描述文件 -->
<web-app><display-name>Archetype Created Web Application</display-name><!-- servlet部署 --><servlet><servlet-name>Chapter1 servlet</servlet-name> <!-- servlet 部署时的内部名 --><servlet-class>com.wyf.servlet.Ch1.Ch1Servlet</servlet-class> <!-- servlet实际文件名 --></servlet><!-- 将servlet与url映射 --><servlet-mapping><servlet-name>Chapter1 servlet</servlet-name><url-pattern>/Servl</url-pattern> <!-- servlet 客户使用的URL名--></servlet-mapping></web-app>
Servlet基础:容器相关推荐
- Servlet基础:接口、类、请求响应、配置、会话追踪、上下文、协作、异常
10.1 Servlet介绍 Servlet技术是Sun公司提供的一种实现动态网页的解决方案,它是基于Java编程语言的Web服务器端编程技术,主要用于在Web服务器端获得客户端的访问请求信息和动 ...
- JSP/Servlet基础语法
相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...
- Servlet基础(三) Servlet的多线程同步问题
Servlet基础(三) Servlet的多线程同步问题 Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率. 由于Servlet/JSP默认是以多线程模式执行的, ...
- Servlet基础(一) Servlet基础和关键的API介绍
转载:http://www.cnblogs.com/mengdd/p/3202550.html Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解 Servlet基础(一) S ...
- servlet基础_Servlet基础
servlet基础 通过本教程,我将尝试使您更接近Java Servlet模型. 在检查servlet规范中定义的类之前,我将解释在开始开发Web应用程序之前需要了解的基本知识. 了解Java Ser ...
- 动态网站开发讲课笔记04:Servlet基础
文章目录 零.本节学习目标 一.Servlet基础 (一)Servlet概述 1.Servlet是什么 2.Servlet容器 3.Servlet应用程序的体系结构 (二)Servlet的特点 1.功 ...
- Servlet 基础
Servlet 基础 简述 什么是Servlet? Servlet是用Java语言编写应用到Web服务器端的扩展技术,他先于JSP产生,可以方便地对Web应用中的HTTP请求进行处理.在JavaWeb ...
- Servlet 基础练习题
Servlet 基础练习题 Servlet 基础 一.单选题 二.多选题 三.判断题 四.填空题 Servlet 基础 点击蓝色字体跳转到Servlet的百度百科,了解更多的Servlet Servl ...
- java框架 - Servlet基础框架
一,servlet定义 Servlet(Server Applet)是Java Servlet的简称,称为服务器端小程序.小服务程序或服务连接器,是一种使用 Java 语言来开发动态网站的技术(用Ja ...
- 第三章 Java Servlet基础
第三章 Java Servlet基础 3.6.2 转发 1.获得RequestDispatcher对象 2.RequestDispatcher对象调用forward()方法实现转发 请求转发工作原理 ...
最新文章
- WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类
- Kubernetes + CRI + Kata + Firecracker
- LaTeX写作技术规范
- openresty开发系列1--网关API架构及选型
- bzoj 4921: [Lydsy六月月赛]互质序列
- 浅析几种常见算法(转载)
- 评测征集 | 2021全国知识图谱与语义计算大会
- SpringBoot配置ELK环境
- 力扣题目——566. 重塑矩阵
- 成功之道——永远的知识
- Kafka负载均衡策略
- 项目计划书——书写模板
- 草根IT江湖路之三:希望,在坚持之中
- Spring Boot 动态添加/删除定时任务
- linux系统不能用投影仪,Linux连接投影仪(ubuntu)失败或显示不正常--未测试
- STM32F411 Discovery学习笔记(二)点亮你的第一个LED
- 2020-08 前端技术汇总
- LibreCAD环境配置
- 基于ZigBee和STM32的智能家居控制系统的设计与实现(三)
- Nignx 网关 和 GateWay网关