Servlet 学习笔记

Servlet详解
本文详细介绍了Servlet的基本概念,包括HTML表单的GET和POST机制、Servlet的工作原理及其生命周期管理。此外还探讨了会话管理和最佳实践等内容。

Servlet

1.HTML表单/GET和POST机制

如果没有表单,HTML是“只读的”,不能实现与用户的交互。

表单是具有文本输入字段和区域、按钮、复选框、下拉菜单、滚动列表等的图形用户界面,它使WEB站点可以获取用户的信息。

当将表单提交给服务器时,发送给服务器的请求以名称——值对应的形式将请求的资源、方法和参数传递,所请求的资源在HTML表单的Action属性中指定,表示将表单提交给服务器是执行的操作,一般action的属性设置为调用服务器端程序的URL。

在HTML表单中,请求蚕食是使用input字段指定的。请求方法是form中的method属性指定,使用get或post。

ØGet

使用get方法发送的请求没有任何Body内容,被当作Header的一部分,任何表单数据都作为统一资源定位符(URL)中的查询字符串传递给服务器。

缺点:

1.用户输入的信息会追加到URL中,并有浏览器以纯文本的方式显示,当提交表单后会在下一页的URL中看到用户的信息,不安全。

2.作为URL的一部分传递的数据量是有限的,大量信息无法作为Get请求的一部分发送。

ØPost

Post方法将表单中的数据在请求的Body中进行传递。

2.Servlet简介

Servlet是用java编写的服务器端程序,它驻留在WEB服务器中,并在其中执行,从而扩展了Web服务器传递动态内容的功能。

用Servlet实现WEB服务的简单流程:

当客户机发送请求时,该请求被转发给WEB服务器。WEB服务器确定该请求针对的Servlet,调用该Servlet,并掉用其doGet()/doPost()方法在与响应对象关联的流中生成动态Web内容,并将其发送到客户端。

编写Servlet时要直接或间接实现Servlet接口。

Web容器是支持ServletAPI并提供了驻留并执行Servlet的运行时环境。Web容器负责实例化、初始化、调用服务方法以及从服务中消除Servlet,即管理Servlet的生命周期。

Web容器是Web服务器与Servlet之间的通信桥梁。Web容器负责构建HttpServletRequest和HttpservletResponse对象。

3.Servlet生命周期

Servlet的状态:

Ø不存在状态

Ø已实例化状态

Ø已初始化状态

Ø准备接受请求状态

Ø已销毁状态

Servlet的装入和实例化

在Web容器启动(如果对某个Servlet设定‘LoadonStartup’时则在容器启动时实例化)或第一个请求到达Servlet时可以实例化Servlet。

Servlet初始化

在实例化Servlet后,Web容器会调用Servlet的init()方法初始化。

Servlet的请求处理

Servlet初始化后会调用service方法提供服务。

Servlet的销毁

通过调用destroy()方法释放Servlet的资源。

Servlet的类层次结构

Servlet<—GenericServlet<—HttpServlet

所有Servlet直接或间接实现Servlet接口,

该接口定义容器用于管理Servlet生命周期的init()、service()、destroy()方法。

Publicvoidinit(ServletConfigcfg);

Publicvoidservice(ServletRequestreq,ServletResponseresp);

Publicvoiddestroy();

HttpServletResponse接口有两个方法用于将错误消息发送给客户机。他们是:

PublicabstractvoidsendError(intstatuscode);

PublicabstractvoidsendError(intstatuscode,Stringmsg);这两个方法接受的第一个参数是状态码。

1.范围100-199(1xx)->用于实验应用程序的临时状态码。

2.范围200-299(2xx)->表示请求已被成功理解和接受。

3.范围300-399(3xx)->表示重定向

4.范围400-499(4xx)->表示客户机端错误

5.范围500-599(5xx)->表示服务器端错误

HTTP重定向:将一组指令包含在HTTP响应的Header中,浏览器使用这组指令向新的URL发出新的请求。HTTP执行重定向的两个重要的Header是HTTP状态码和位置Header,当浏览器在相应中找到状态码301(永久移动)和302(临时移动)时,它立即查找位置Header。位置Header包含客户机必须重定向至的新URL。

(注意:当客户发出请求,服务器端执行重定向后,到用户接到服务为止,实际交互了两次,客户不知道重定向的发生,浏览器接受到第一次返回信息,依据返回的信息自动发送新地址的请求)

sendRedirect()只能在资源已临时移动时才可用于重定向。

重定向技术forward与sendRedirect的区别

forward

sendRedirect

在Web容器中运行

要求往返客户机

将您限制到子能重定向至同一个Web应用程序中的资源。

允许你重定向至任何URL。

优先使用forward,无法完成任务时在使用sendRedirect。

4.会话管理

为什么需要会话管理?

当客户机对服务器作出一系列请求时,Http不能帮助服务器确定这些请求是否来自同一客户机,因为服务器不能记住任何有关客户机的相关信息。

会话——是指在特定的阶段中来自同一个客户的一系列HTTP请求。(如果客户机保持空闲超过指定的阶段,则会话过期,然后客户被迫启动一个新会话)

会话跟踪——用程序将特定的请求与会话关联的过程。

会话管理——会话跟踪和状态管理。

会话超时——(如果用户不注销,Web容器无法确定会话何时结束,将永远保存这些信息,这样很消耗内存,所以需要会话时效管理)来自参与会话的客户机的两个连续请求之间的最大允许空闲时间。

常用的会话管理技术:

ØCookie——是Web服务器发送给客户机的一段文本信息,它存储在客户机的硬盘上,对于后继的请求,客户机将文本信息发回同一服务器。

Ø隐藏字段(只能在客户提交表单是使用,不能适用超链接)

ØURL重写(不能对静态的HTML页面执行URL重写,无法用于HTML表单,只能用于超链接,不要求浏览器支持,是浏览器不支持Cookie是的替代技术)

Ø相对URL(缺点:应用程序只能使用相当URL的要求,导致设计制约;包含会话信息的请求URL时很难进行调用。应用程序不得不解析每个URL以抽取SeesionID和请求的资源,将导致性能负担)

Ø安全套接字层(SSL)会话(使用HTTPS协议时,会建立一个SSL会话)

5.Servlet的最佳做法

Ø避免出现实例变量(web容器的缺省机制是将Servlet装入多线程环境中,只创建一个Servlet实例,并且用户请求由多个线程来处理,不能让用户随便修改实例变量)

Ø在destroy()方法中释放资源

Ø尽可能高速缓存数据1、浏览器高速缓存2、使用HttpSession和ServletContext对象

Ø部署期间禁用Servlet自动重新装入(多数Web容器具有动态装入Servlet的能力。这意味着无论何时更改Servlet内容都不需要重启服务器,可以通过容器的配置文件中自动重新装入功能来实现;这在开发时很有用,但发布时应关闭自动重新装入)

Ø不要在Servlet中实现SingleThreadModel

Ø配置线程池大小(缺省情况的下,容器为每个请求创建一个线程,但创建和销毁线程的代价很高,这可以通过使用线程池来避免)

Ø定期清空Servlet生成的响应(使用flush()定期清空数据,而不是一次清空全部数据)

Ø在响应Header中设置内容长度(根据数据的大小,客户机通过多个连接获得数据;浏览器创建了同时多个连接来获取数据,因此数据检索会很快。浏览器从响应Header中制定的内容长度中获取关于数据大小的信息。如果内容长度在响应Header中正确设置,则浏览器将创建所需数目的连接并更快的检索页面,内容长度可通过HttpServletResponse接口的setContentLenth()方法设置)

<!--EndFragment-->
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值