Servlet编程API

一、基本的servlet API
JavaEE关于Servlet的API主要有两个包:javax.servlet和javax.servlet.http。前者主要提供了Web容器能够使用的servlet基本类和接口,后者主要包括和HTTP协议相关的servlet类和接口。对servlet的编程,主要是根据需要,继承这些类实现需要的功能。

javax.servlet包和javax.servlet.http包的类和接口主要分以下几类:
1.servlet基本类
javax.servlet.Servlet
javax.servlet.http.HttpServlet
javax.servlet.SingleThreadModel
javax.servlet.GenericServlet
这些是servlet程序需要直接或间接继承的抽象类和接口。SingleThreadModel接口可以保证servlet在同一时间只处理一个客户请求。

2.Web请求和响应类
javax.servlet.ServletRequest
javax.servlet.ServletResponse
javax.servlet.ServletInputStream
javax.servlet.ServletOutputStream
javax.servlet.HttpServletRequest
javax.servlet.HttpServletResponse

3.和Web容器联系
javax.servlet.ServletConfig
ServletConfig接口使Web容器在servlet初始化时(一般是web服务器启动并载入Web应用时)能够和servlet进行联系。Servlet可以通过该接口取得初始变量和servlet名称等。

4.和Web应用联系
javax.servlet.ServletContext
这个接口是Servlet和Web应用进行连接,使用servlet和Web程序在运行时能够传递数据。Servlet之间也可以通过这个接口共享数据。ServletContext是包含在ServletConfig中的,它和ServletConfig的主要不同是:ServletContext有更多方法,主要是在servlet运行时使用,而ServletConfig主要是在servlet启动时从Web容器中得到。

5.和其他Web资源的共同作用
javax.servlet.http.RequestDispatcher
RequestDispather支持servlet和JSP,其他servlet或Web资源之间的调用。这样当servlet需要引入其他servlet、JSP或HTML内容时,可以更灵活地控制它们之间的逻辑关系。

6.错误异常类
javax.servlet.ServletException
javax.servlet.UnavailableException

7.其他附属类
javax.servlet.http.HttpUtils
javax.servlet.http.Cookie
前者提供servlet的一些帮助功能,后者是对应HTTP的Cookie。

二、主要servlet类和接口的使用方法
1.javax.servlet.Servlet接口
这个接口定义了servlet初始化、进行服务和终止服务的基本方法,这个些方法都和servlet的生命周期有关。javax.servlet.Servlet将被HttpServlet和GenericServlet所实现。一般编程者在其中通过继承HttpServlet间接使用了javax.servlet.Servlet的方法,比如init(),service(),destroy()。
2.javax.servlet.GenericServlet类
该类定义了一个通用的servlet类。它的用法和HTTP协议无关,主要用来方便编程者自己开发其他Web协议的servlet程序。GenericServlet实现了上面的Servlet和ServletConfig接口,它提供了包括Servlet生命周期方法的一些常用方法。继承这个类的servlet需要填定其service()方法。它的init()、destroy()方法和javax.servlet.Servlet的同名方法基本一样。另外,它加入了getInitParameter()等方法。
3.javax.servlet.http.HttpServlet类
HttpServlet是最常用的Servlet类,编程者需要继承这个抽象类并填充其有关doXXX方法。另外在编程时注意各个方法的线程关系,避免当多个Web请求到来时,servlet会产生错误。它的service()方法一般不需要被替代,它会调用和用户请求对应的doXXX等方法。在一般servlet中,使用最多的是doGet和doPost方法,没有必要重写doOptions和doTrace方法。
4.javax.servlet.SingleThreadModel接口
Web容器保证实现SingleTheadModel接口的servlet运行在单线程模式下,也就是保证其service()方法不会使用多线程。Web容器有两种方法可以实现这一功能。一种是创建并管理多个servlet实例,每个实例在同一时间单独处理一个请求;另一种是让请求依照顺序被一个servlet处理。
5.javax.servet.ServletConfig接口
ServletConfig接口能够使Web容器在servlet初始化时向servlet传递一些设置信息。设置信息是在servlet之外定义的,如在Web容器中配置描述文件web.xml内指定的初始化变量。在servet进行配置可以带来很大的灵活性。
6.javax.servlet.ServletRequest接口和javax.servlet.ServletResponse接口
这两个接口定义了来自客户端的请求和向客户端发送的响应。Web容器根据客户请求建立ServetRequest对象和ServletResponse对象并作为参数传递给servlet的service()方法。
可以从ServletRequest中获得请求参数(即url后的&var1=value1...)、请求属性(attributes)、和输入流。另外,它还可以得到Web协议信息(如getRemoteAddr(),getRemoteHost(),GetServetName()等)。
当Web容器通过ServletResponse接口向客户传递响应数据时,数据的格式主要可以有二进帛类型和文本类型。如果在servlet中需要发送二进制数据,servlet要用getOutputStream()取得的ServletOutputStream对象;如果需要发送文本数据,要用getWriter()取得PrinterWriter对象。Servlet可以通过setContentType()设置响应数据的字符集(注:此设置应在getWriter方法获得PrinterWriter对象前取得)。
7.javax.servlet.ServletInputStream接口和javax.servlet.ServletOutputStream接口
SetvletInputStream用于从ServletRequest中获取数据输入流;ServletOutputStream用于向ServletResponse中写数据流。
8.javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletReponse接口
这两个接口分别继承自ServletRequest,ServletResponse,它们提供了处理HTTP请求和响应的多种方法。在servlet编程中这两个接口作为参数传递给doGet,doPost等方法。可以从这两个方法中获得和设置HTTP头信息。
9.javax.servlet.http.HttpSession接口
HttpSession提供了会话的管理机制。它可以用来识别一个用户和一系列Web请求的关联关系。同时HttpSession可以用来记载用户的一些特定信息。在Web容器中,常用的实现会话的方式有通过cookie或重写URL等。HttpSession编程接口代表在HTTP客户和Web服务器之间创建的会话。使用这个接口的方法可以查询和管理关于会话的信息。

转载于:https://www.cnblogs.com/shudaizi/archive/2011/08/30/2160079.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初级开发人员在编写单元测试时常犯的错误

自从我编写第一个单元测试以来已经有10年了。 从那时起,我不记得我已经编写了成千上万的单元测试。 老实说,我在源代码和测试代码之间没有任何区别。 对我来说是同一回事。 测试代码是源代码的一部分。 在过去的3-4年中,我与多个开发团队合作…

OpenDaylight开发hello-world项目之开发工具安装

OpenDaylight开发hello-world项目之开发环境搭建 OpenDaylight开发hello-world项目之开发工具安装 OpenDaylight开发hello-world项目之代码框架搭建 在ODL开发之前,要安装好开发环境。ODL使用java语言开发,所以要安装好java。ODL的代码框架是有maven这个…

Google Chrome 扩展程序开发

根据公司的规定,每月八小时,弹性工作制。所以大家平时来的不太准时,如果有事,下班也就早些回去了。所以一个月下来工作时间可能不够,但是公司的考勤日历是这样的: 除了请假和法定节假日外,其他样…

阅读react-redux源码(六) - selectorFactory处理store更新

阅读react-redux源码 - 零阅读react-redux源码 - 一阅读react-redux源码(二) - createConnect、match函数的实现阅读react-redux源码(三) - mapStateToPropsFactories、mapDispatchToPropsFactories和mergePropsFactories阅读react-redux源码(四) - connectAdvanced、wrapWithC…

[Silverlight入门系列]使用MVVM模式(7):ViewModel的INotifyPropertyChanged接口实现

本文说说ViewModel的这个INotifyPropertyChanged接口可以用来做啥? 举例1:我有个TabControl,里面放了很多View,每个由ViewModel控制,我想是想TabSelectionChanged就打开相应的ViewModel,怎么做?…

无状态Spring安全性第1部分:无状态CSRF保护

如今,随着RESTful架构变得越来越标准,可能值得花一些时间重新考虑当前的安全方法。 在这个小系列的博客文章中,我们将探索一些以无状态方式解决与Web相关的安全问题的相对较新的方法。 这第一篇文章是关于保护您的网站免受跨站请求伪造&#…

window.Event参数详解

原文地址:window.Event参数详解作者:cz0090704window.evet 说明 event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等。 event对象只在事件发生的过程中才有效。 event的某些属性只对特定的事件有意义。比如&…

微信群运营之设计运营思路

商家要想运营好微信群,那么首要做的工作就是设计运营思路。如果做事毫无章法思路,那么很有可能会让自己的工作陷入僵局。运营微信群并不简单,需要考虑多方面社群鸭因素。卖什么产品,群管理体系的设立,规则的制定&#…

阅读react-redux源码(七) - 实现一个react-redux

阅读react-redux源码 - 零阅读react-redux源码 - 一阅读react-redux源码(二) - createConnect、match函数的实现阅读react-redux源码(三) - mapStateToPropsFactories、mapDispatchToPropsFactories和mergePropsFactories阅读react-redux源码(四) - connectAdvanced、wrapWithC…

[读书笔记]TCP/IP详解V1读书笔记-4 5

IP地址与以太网地址之间的关系 R P发送一份称作A R P请求的以太网数据帧给以太网上的每个主机。这个过程称作广播,在32 bit的I P地址和采用不同网络技术的硬件地址之间提供动态映射 ----------------------------------------- arp以太网帧的类型字段为x 0 8 0 6&am…

未来是Apache Karaf上的微服务架构

这是Jamie Goodyear的客座博客文章( 博客 , icbts )。 他是Savoir Technologies的开源倡导者,Apache开发人员和计算机系统分析师; 他为全球大型组织设计,批判和支持了体系结构。 他拥有纽芬兰纪念大学的计…

springcloud微服务多节点高性能、高可用、高并发部署

1. 共有三个服务 discovery服务,domain服务,gateway服务。 discovery服务是用来注册其他服务的,作为服务治理用。 domain服务是主业务服务。 gateway服务是所有服务的一个入口,用来做一些服务的判断和过滤用。 2. 有三台机器分别为…

只能是数字、字母、-和_

在文本框的keypress事件调用下面函数。 如 <input disabled"disabled" type"text" iduserNameToEdit οnkeypress"TextValidate()" /> 如果在文本框中按下特殊字符键&#xff0c;则显示警告信息&#xff0c;或者输入框不接受非法输入。 …

代码风格之Prettier简介

多人协作中统一的代码风格有利于项目的发展这是共识&#xff0c;但是采用什么标准来统一代码这选择就相对纷杂。项目刚开始使用了ESLint来规范代码&#xff0c;但是ESLint默认是支持JavaScript&#xff0c;加上配置可以支持TypeScript&#xff0c;而样式的支持则需要再配置Styl…

带有Swagger的Spring Rest API –集成和配置

如今&#xff0c;公开的API终于获得了应有的关注&#xff0c;公司也开始意识到其战略价值。 但是&#xff0c;使用第三方API确实是一项繁琐的工作&#xff0c;尤其是当这些API维护不当&#xff0c;设计不当或缺少任何文档时。 这就是为什么我决定四处寻找可以为集成编程人员和其…

A customized combobox with JQuery

要求实现一个轻量级的在客户端筛选的combobox&#xff0c;支持大数据量&#xff08;超过1000个items&#xff09;&#xff0c;能快速检索内容&#xff0c;并支持数据的设置和活动等基本操作。在这之前尝试过使用Jquery UI的Autocomplete&#xff0c;但是当数据量太大时客户端检…

使用内存回流的方法来实现将image的内容转换为 byte[]

在今天的开发中老大不知道怎么突发奇想&#xff0c;要使用Image的Byte数据。当时使用老几种方式效果均不理想&#xff0c;最后发现其实可以使用内存回流的方式来实现。多的不说老&#xff0c;马上贴上代码&#xff1a;/**//// <summary> /// 将byte[]转换为Image…

TypeScript中的class声明了什么

在初看TypeScript的时候在这里卡住的时间难以估计&#xff0c;并不能很好的理解”换个角度说&#xff0c;我们可以认为类具有 实例部分与 静态部分这两个部分。“这句话。今天再回头看这部分文档&#xff0c;在同事的帮助下突然有了比较通透的理解。 class Greeter {static st…

CentOS 6下搭建Apache+MySQL+PHP+SSL

网上的一些文章都已经比较老了&#xff0c;现在版本高了之后&#xff0c;其实配置是很省力的&#xff08;不考虑什么负载的话&#xff09; 分享全过程&#xff0c;出了文中提到的安装epel rpmfushion 源指令不同外&#xff0c;其他的过程也适用与Centos 5 1.安装CentOS 6 ,可以…

通过设计国际象棋游戏来了解策略模式

今天&#xff0c;我们将借助一个示例来尝试了解策略模式。 我们将考虑的示例是国际象棋游戏。 这里的目的是解释策略模式&#xff0c;而不是构建全面的国际象棋游戏解决方案。 策略模式&#xff1a;策略模式被称为行为模式-用于管理对象之间的算法&#xff0c;关系和职责。 策…