Java Servlet简介
一、了解Servlet的概念
Servlet定义
Servlet是基于Java技术的Web组件,由容器管理并产生动态的内容。Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能。Servlet与客户端通过Servlet容器实现的请求/响应模型进行交互。
注意:Servlet不是从命令行启动的,而是由包含Java虚拟机的Web服务器进行加载
Servlet是按照Servlet规范编写的Java类。
Servlet应用请求/响应模型,扩展了服务器的功能。
Servlet是WEB应用程序中的一个组件。
Servlet是在JSP之前就存在的运行在服务端的一种Java技术,它是用Java语言编写的服务器端程序在JSP技术出现之前,Servlet被广泛地应用来开发动态的Web应用程序.如今在J2EE项目的开发中,Servlet仍然被广泛的使用。
Servlet是一种独立于平台和协议的服务器端的Java技术,可以用来生成动态的Web页面与传统的CGI(公共网关接口)和许多其他类似CGI技术相比,Servlet具有更好的可移植性、更强大的功能,更少的投资,更高的效率,更好的安全性等特点。
二、Servlet技术功能
Servlet通过创建一个框架来扩展服务器的能力,以提供在Web上进行请求和响应的服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给Servlet,并让Servlet建立起服务器返回给客户机的响应当启动Web服务器或
客户机第一次请求服务时,可以自动装入Servlet,之后,Servlet继续运行直到其他客户机发出请求。
Servlet的功能涉及范围很广:
- 创建并返回一个包含基于客户请求性质的动态内容的完整的HTML页面;
- 创建可嵌入到现有HTML页面中的一部分HTML页面(HTML片段);
- 与其他服务器资源(包括数据库和基于Java的应用程序)进行通信;
- 用多个客户机处理连接,接收多个客户机的输入,并将结果传递到多个客户机上,例如,Servlet可以是多参与者的游戏服务器;
- 当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至applet的新连接,并将该连接保持在打开状态;当允许客户机和服务器简单、高效地执行会话的情况下,applet也可以启动客户浏览器和服务器之间的连接,可
- 以通过定制协议进行通信;
- 将订制的处理提供给所有服务器的标准程序。
三、 Servlet技术特点
Servlet技术带给程序员最大的优势是它可以处理客户端传来的HTTP请求,并返回一个响应Servlet是一个Java类,Java语言能够实现的功能,Servlet基本上都可以实现(图形界面除外)。
总的来说,Servlet技术具有以下特点:
1.高效。在服务器上仅有一个Java虚拟机在运行,它的优势在于当多个来自客户端的请求进行访问时,Servlet为每个请求分配一个线程而不是进程。
2.方便。Servlet提供了大量的实用工具例程,例如处理很难完成的HTML表单数据、读取和设置HTTP头、处理Cookie和跟踪会话等。
3.跨平台。Servlet是用Java类编写的,它可以在不同的操作系统平台和不同的应用服务器平台下运行。
4.灵活性和可扩展性。采用Servlet开发的Web应用程序,由于Java类的继承性、构造函数等特点,使得其应用灵活,可随意扩展。
6.共享数据。Servlet之间通过共享数据可以很容易地实现数据库连接池。它能方便地实现管理用户请求,简化Session和获取前一页面信息的操作。而在CGI之间通信则很差。由于每个CGI程序的调用都开始一个新的进程,调用间通
信通常要通过文件进行,因而相当缓慢。同一台服务器上的不同CGI程序之间的通信也相当麻烦。
7.安全。有些CGI版本有明显的安全弱点。即使是使用最新的标准和PERL等语言,系统也没有基本安全框架。而Java定义有完整的安全机制,包括SSL\CA认证、安全政策等规范。
四、 Servlet生命周期
跟客户端的Applet相似,Servlet(这里Servlet的概念又回到了最原始的含义)也遵循严格的生命周期。在每个Servlet实例的生命中有三种类型的事件,这三种事件分别对应于由Servlet引擎所唤醒的三个方法:
1.init()。当Servlet第一次被装载时,Servlet引擎调用这个Servlet的init()方法,只调用一次。如果某个Sevlet需要特殊的初始化需要。那么Servlet编写人员可以重写该方法来执行初始化任务。这是一个可选的方法。如果某个
Servlet不需要初始化,那么默认情况下将调用它父类的init方法。系统保证,在init方法成功完成以前,是不会调用Servlet去处理任何请求的。
2.service()。这是Servlet最重要的方法,是真正处理请求的地方。对于每个请求,Servlet引擎将调用Servlet的service方法,并把Servlet请求对象和Servlet响应对象最为参数传递给它。
3.destroy()。这是相对于init的可选方法,当Servlet即将被卸载时由Servlet引擎来调用,这个方法用来清除并释放在init方法中所分配的资源。
(1) 装载Servlet,这一项操作一般是动态执行的。然而,Servlet通常会提供一个管理的选项,用于在Servlet启动时强制装载和初始化特定的Servlet
(2) Server创建一个Servlet实例
(3) Server调用Servlet的init方法
(4) 一个客户端请求到达Server
(5) Server创建一个请求对象
(6) Server创建一个响应对象
(7) Server激活Servlet的service方法,传递请求和响应对象作为参数
(8) service方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息
(9) service方法使用响应对象的方法。将响应传回Server,最终到达客户端。Service方法可能激活其他方法以处理请求。如doGet,doPost或其他程序员自己开发的方法
(10) 对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此servlet的service方法,将这两个对象作为参数传递给它,如此重复以上的循环,但无需再次调用init方法,Servlet一般只初始化一次
(11) 当Server不再需要Servlet时,比如当Server要关闭时,Server调用Servlet的destroy
五、servlet工作过程
Web服务器在与客户端交互时.Servlet的工作过程是:
- 在客户端对web服务器发出请求
- web服务器接收到请求后将其发送给Servlet
- Servlet容器为此产生一个实例对象并调用ServletAPI中相应的方法来对客户端HTTP请求进行处理,然后将处理的响应结果返回给WEB服务器.
- web服务器将从Servlet实例对象中收到的响应结构发送回客户端.
六 、Servlet与JSP区别
简单的说,SUN首先发展出SERVLET,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML非常不方便。 后来SUN推出了类似于ASP的镶嵌型的
JSP,把JSP TAG镶嵌到HTML语句中,这样,就大大简化和方便了网页的设计和修改。新型的网络语言如ASP,PHP,JSP都是镶嵌型的SCRIPT语言。
- JSP在本质上就是SERVLET,但是两者的创建方式不一样.
- Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观.
- JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.
因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.
- JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。
- JSP编译后是“类servlet”。
- Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP是Java和HTML组合成一个扩展名为.jsp的文件。
- JSP侧重于视图,Servlet主要用于控制逻辑。
七、Servlet代码结构
该Servlet处理的是get请求,如果读者不理解HTTP,可以把它看成是当用户在浏览器地址栏输入URL、单击Web页面中的链接、提交没有指定method的表单时浏览器所发出的请求
Servlet也可以很方便地处理post请求。post请求是提交那些指定了method=“post”的表单时所发出的请求。若要创建一个Servlet,则应使创建的类继承HttpServlet类,并覆盖doGet()、doPost()方法之一或全部。doGet()和doPost
()方法都有两个参数,分别为HttpServletRequest类型和HttpServletResponse类型。
HttpServletRequest提供访问有关请求的信息的方法,例如表单数据、HTTP请求头等。HttpServletResponse除了提供用于指定HTTP应答状态(200,404等)、应答头(Content-Type,Set-Cookie等)的方法之外,最重要的是它提供
了一个用于向客户端发送数据的PrintWriter。
对于简单的Servlet来说,它的大部分工作是通过println()方法生成向客户端发送的页面
注意:doGet()方法和doPost()方法抛出两个异常,因此必须在声明中包含它们。另外还必须导入java.io包(要用到PrintWriter等类)、javax.servlet包(要用到HttpServlet等类)以及javax.servlet.http包要用到(HttpServlet Request类和
HttpServletResponse类)。doGet()和doPost()这两个方法是由service()方法调用的,有时可能需要直接覆盖service()方法,比如Servlet要处理Get和Post两种请求时
如果要开发一个可以处理HTTP请求的Servlet程序,则肯定要继承HttpServlet类,而且在自定义的Servlet类中还要重写HttpServlet类中提供的doGet()方法。Servlet程序本身也是按照请求和应答的方式进行的,所以在doGet()方法
中定义了两个参数,即HttpServletRequest和HttpServletResponse,用来接收和回应用户的请求。
八、 Servlet第一个程序
新建一个工程,注意选择的类型
好一后,一直next,或者直接finish
新建后的工程目录
鼠标放在src上,右建proporty,新建一个servlet,记得是web下的servlet
输入包名和类名
选择生成的一些方法,不般都不用修改,一直next
\
生成后的代码结构
现在我们要来输入个helloworld,在上面代码加上:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("HelloWorld I am Servlet"); }
主目录下必须要有WEB-INF目录,WEB-INF目录下一定有一个符合j2ee标准的web.xml文件,eclipse默认没有生成,myeclipse默认是有生成 的,我们自己新建一个就行了。
选择到它,然后右键,选择proproty
新建一个XML,命名为web.xml
然后打开新建好的web.xml,内容改成如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<!-- 类名 -->
<servlet-name>HelloWorld</servlet-name>
<!-- 所在的包 -->
<servlet-class>com.mucfc.chapter0.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<!-- 访问的网址 -->
<url-pattern>/servlet/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>
接下来就可以运行了:
注意,eclipse中要先配置好tomcat,配置方法网上有。
把要运行的web项目add到右边过去就行,然后finsh,就运行了。注意这里我先把之前tomcat给stop了!然后在浏览器里输入:http://localhost:8080/ServletLeaningChapter0/servlet/HelloWorld
结果:
Java Servlet简介的更多相关文章
- Java Servlet 技术简介
Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...
- 【Java】Java Servlet 技术简介
Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么,它们是如何工作的,如何使用它们来创 ...
- Java Servlet和Java Filter简介
一:简介servlet 1.什么是Servlet? Servlet可以通过多种方式进行描述,具体取决于上下文: (1)Servlet是一种用于创建web应用程序的技术 (2)Servlet是一个API ...
- java Web servlet简介及其生命周期
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容. 我们可 ...
- [原创]java WEB学习笔记04:Servlet 简介及第一个Servlet程序(配置注册servlet,生命周期)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- java 之 servlet简介
Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间 ...
- Java SE 简介 & 环境变量的配置
Java SE 简介 & 环境变量的配置 一.Java 技术的三个方向 Java 技术分为三个方向 javaSE( Java Platform Standard Edition 标准版)用来开 ...
- Java—Servlet技术
1 Servlet 概述 Servlet简介——开发动态web资源的技术Sun公司在API提供了一个servlet接口,如开发一个java程序向浏览器输出数据:1)编写一个java类,实现servl ...
- Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解
Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...
随机推荐
- DotNetty学习笔记
DotNetty项目本身的示例很容易运行起来,但是具体到真实的应用场景,还是需要进一步理解DotNetty的通道处理细节,这样才能够在实际项目应用中处理具体的问题. 简单的场景下会有以下几个问题,第一 ...
- 2016-2017-2 《Java程序设计》第3周学习总结
20155202张旭 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 第四章:认识对象: java两个类型系统:基本类型,类类型. 定义"构造函数& ...
- 20155204 2016-2017-2 《Java程序设计》第10周学习总结
20155204 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 1.计算机网络概述 路由器和交换机组成了核心的计算机网络,计算机只是这个网络上的节点以及控 ...
- 20155220 吴思其 2016-2017《java程序设计》第一周总结
对第一章和第二章的学习 通过了前两章的学习,我了解到了java的由来以及JVM/JRE/JDK三大平台 JDK JDK 是 Java 语言的软件开发工具包. JDK是整个JAVA的核心,包括了Java ...
- (三)虚拟机与Linux新尝试——20155306白皎
(三)虚拟机与Linux新尝试--20155306白皎 一.关于虚拟机的安装 在选择虚拟机的类型和版本时,Ubuntu只有32位,没有64位 解决:通过百度,后来也发现同学们好多遇到了这个问题,因此通 ...
- 20155310 2016-2017-2 《Java程序设计》第九周学习总结
20155310 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC入门 •数据库本身是个独立运行的应用程序 •撰写应用程序是利用通信协议对数据库进行指 ...
- 【转载】3D/2D中的D3DXMatrixPerspectiveFovLH和D3DXMatrixOrthoLH投影函数详解
原文:3D/2D中的D3DXMatrixPerspectiveFovLH和D3DXMatrixOrthoLH投影函数详解 3D中z值会影响屏幕坐标系到世界坐标系之间的转换,2D中Z值不会产生影响(而只 ...
- C# 远程图片下载到本地
下载方法 using System; using System.Net; using System.IO; using System.Text; namespace Common { /// < ...
- Android开发笔记——图片缓存、手势及OOM分析
把图片缓存.手势及OOM三个主题放在一起,是因为在Android应用开发过程中,这三个问题经常是联系在一起的.首先,预览大图需要支持手势缩放,旋转,平移等操作:其次,图片在本地需要进行缓存,避免频繁访 ...
- 「Leetcode」975. Odd Even Jump(Java)
分析 注意到跳跃的方向是一致的,所以我们需要维护一个数接下来跳到哪里去的问题.换句话说,就是对于一个数\(A_i\),比它大的最小值\(A_j\)是谁?或者反过来. 这里有两种方案,一种是单调栈,简单 ...