java 之 servlet简介
Servlet 是什么?
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:
- 性能明显更好。
- Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
- Servlet 是独立于平台的,因为它们是用 Java 编写的。
- 服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
- Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。
Servlet 架构
下图显示了 Servlet 在 Web 应用程序中的位置。
Servlet 任务
Servlet 执行以下主要任务:
- 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
- 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
- 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
- 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
- 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。
Servlet 生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
- Servlet 通过调用 init () 方法进行初始化。
- Servlet 调用 service() 方法来处理客户端的请求。
- Servlet 通过调用 destroy() 方法终止(结束)。
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
现在让我们详细讨论生命周期的方法。
init() 方法
init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,就像 Applet 的 init 方法一样。
Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是您也可以指定 Servlet 在服务器第一次启动时被加载。
当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。
init 方法的定义如下:
public void init() throws ServletException {// 初始化代码... }
service() 方法
service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
下面是该方法的特征:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{ }
service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,您不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。
doGet() 和 doPost() 方法是每次服务请求中最常用的方法。下面是这两种方法的特征。
doGet() 方法
GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理。
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {// Servlet 代码 }
doPost() 方法
POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。
public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {// Servlet 代码 }
destroy() 方法
destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。destroy 方法定义如下所示:
public void destroy() { // 终止化代码...}
架构图
下图显示了一个典型的 Servlet 生命周期方案。
- 第一个到达服务器的 HTTP 请求被委派到 Servlet 容器。
- Servlet 容器在调用 service() 方法之前加载 Servlet。
- 然后 Servlet 容器处理由多个线程产生的多个请求,每个线程执行一个单一的 Servlet 实例的 service() 方法。
创建servlet的三种方式
- 实现servlet接口 implements Servlet
- 继承GenericServlet 类 extends GenericServlet
- 继承HttpServlet 方法 extends HttpServlet
Servlet 部署
默认情况下,Servlet 应用程序位于路径 <Tomcat-installation-directory>/webapps/ROOT 下,且类文件放在 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes 中。
如果您有一个完全合格的类名称 com.myorg.MyServlet,那么这个 Servlet 类必须位于 WEB-INF/classes/com/myorg/MyServlet.class 中。
现在,让我们把 HelloWorld.class 复制到 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes 中,并在位于 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/ 的 web.xml 文件中创建以下条目:
<web-app> <servlet><servlet-name>HelloWorld</servlet-name><servlet-class>HelloWorld</servlet-class></servlet><servlet-mapping><servlet-name>HelloWorld</servlet-name><url-pattern>/HelloWorld</url-pattern></servlet-mapping> </web-app>
servlet 浏览器访问路径配置有个小问题:
1、java 类里的注解 —— @WebServlet("/HelloServlet") 对应浏览器路径:
http://localhost:8080/TomcatTest/HelloServlet
2、配置文件(web.xml)里对应的浏览器访问路径:
http://localhost:8080/TomcatTest/TomcatTest/HelloServlet
这两种配一个就好了,不然路径重名的话反而会让tomcat启动不了。
例如这样就启动不了:
修改 web.xml :
<url-pattern>/HelloServlet</url-pattern>
修改后,web.xml 和 java 类的注解,对应路径都是:
http://localhost:8080/TomcatTest/HelloServlet
导致
命名的 servlet[HelloServlet]和 [com.runoob.test.HelloServlet] 都被映射到 URL 模式 [/ HelloServlet] 这是不允许的。
解决方法
将注解去掉或者保留注解进入web.xml将映射删除既可以。
转载于:https://www.cnblogs.com/zero-vic/p/10198050.html
java 之 servlet简介相关推荐
- Servlet简介与Servlet和HttpServlet运行的流程
2019独角兽企业重金招聘Python工程师标准>>> 1.Servlet [1] Servlet简介 > Server + let > 意为:运行在服务器端的小程序. ...
- 初学Java Web——Servlet(一)
1. Servlet 1.1 静态网页和动态网页 如果浏览器在不同时刻访问Web服务器所获得的页面内容(源文件)可以发生变化,那么这个页面就称之为动态网页.我们参考以下代码: <html> ...
- java毕业设计——基于java+jsp+Servlet的B2C网上拍卖系统设计与实现(毕业论文+程序源码)——网上拍卖系统
基于java+jsp+Servlet的B2C网上拍卖系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+jsp+Servlet的B2C网上拍卖系统设计与实现,文章末尾附有本毕业设 ...
- java开发工具包 jdk_什么是JDK? Java开发工具包简介
java开发工具包 jdk Java开发工具包(JDK)与JVM(Java虚拟机)和JRE(Java运行时环境)一起是Java编程中使用的三个核心技术软件包之一. 重要的是要区分这三种技术,并了解它们 ...
- Servlet简介及其运行原理
Servlet简介及其运行原理: 1.Servlet是什么? Java Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或者其他HTTP客户端的请求和HTTP上 ...
- java开源工具简介(2)
java开源工具简介(2) OpenCms [Java开源 CMS系统] OpenCms是一个J2EE的产品,它是用Java写成的.它和Tomcat捆绑在一起.但是也能够使用ATG Dynamo.We ...
- java框架 - Servlet基础框架
一,servlet定义 Servlet(Server Applet)是Java Servlet的简称,称为服务器端小程序.小服务程序或服务连接器,是一种使用 Java 语言来开发动态网站的技术(用Ja ...
- 双表查询java代码_什么是JDBC?Java数据库连接性简介
JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集.JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批 ...
- java 设计模式_快速上手Java设计模式之简介
阅读本文约需要5分钟 大家好,我是你们的导师,经常看我朋友圈的同学应该知道,我每天会在微信上给大家免费提供以下服务! 1.长期为你提供最优质的学习资源! 2.给你解决技术问题! 3.每天在朋友圈里分享 ...
最新文章
- LL1分析构造法_数学建模算法--最优赋权法(含代码)
- 列举ospf的5种报文类型_这5种“专升本”你都知道吗?那个含金量更高呢?报考如何选择?...
- 用于正则表达式的 Regex.Matches静态方法的几种用法
- php ssc 源码_吃透这篇,你也能搭建出一个高并发和高性能的系统
- 打印出系统所有即未被assign到business transaction和IBASE component的product ID列表
- Android中图片大小和屏幕密度的关系讲解
- 【路径规划】基于matlab A_star算法多机器人路径规划【含Matlab源码 1251期】
- 十五秒破解“还原卡”
- 使用谷歌云盘和colab训练自己的数据集(yolov5格式)
- 安卓psp模拟器哪个好_更完美!安卓PSP模拟器PPSSPP 0.9.9发布
- 去掉word中页眉上方的一条线
- 关于Spring Bean的生命周期
- jungle scout插件版 v5.7.1官方版
- 音视频格式大全:stream type
- 计算机网络知识点————交换机
- 圣杯布局-三种实现方式,css经典布局
- 软技能-代码外的生存指南PDF下载
- linux xunsou_IT外包 网络综合布线 机房建设整改 弱电集成安防-_295
- SpringBoot集成shiro框架
- C++勾股定理及拓展解题
热门文章
- cs有的服务器弹道被修改了怎么办,【Counter-Strike】 服务器弹道设置。。。
- 小米鸿蒙最新信息,小米新机将搭载鸿蒙系统?还得等鸿蒙进一步的消息!
- 【POJ2259】Team Queue(队列,模拟)
- c语言char float混合类型运算,求int long char double float 在混合运算中的自动转换规则 win 32位系统。...
- JAVA集合Collection与泛型<T>→List、ArrayList、LinkedList、→Set、HashSet、hashCode()→Map、HashMap、→Properties
- python图片识别训练汽车_python实现图片识别汽车功能
- JavaScript浏览器对象模型
- Python入门--流程控制语句continue
- eplices如何导入外部代码_搜索引擎的蜘蛛是如何爬的
- wxpython制作表格界面_Python wxPython库使用wx.ListBox创建列表框示例