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()方法设置)
Servlet详解
本文详细介绍了Servlet的基本概念,包括HTML表单的GET和POST机制、Servlet的工作原理及其生命周期管理。此外还探讨了会话管理和最佳实践等内容。
4355

被折叠的 条评论
为什么被折叠?



