Servlet说明
Servlet是用Java编写的Server端程序,它与协议和平台无关。Servlet运行于基于Java的Web服务器中。Servlet可以动态地扩展Server的能力,并采用请求/响应模式提供Web服务。
优点
1、功能强大。Servlet采用Java语言编写,它可以调用Java API中的对象及方法。此外,Servlet对象对Web应用进行了封装,提供了Servlet对Web应用的编程接口,还可以对HTTP请求进行相应的处理,如提交数据、会话跟踪、读取和设置HTTP头信息。由于Servlet既拥有Java提供的API,而且还可以调用Servlet封装的Servlet API编程接口,因此,它在业务功能方面十分的强大。
2、安全性高。Servlet使用了Java的安全框架,同时Servlet容器还可以为Servlet提供额外的功能,它的安全性是非常高的。
3、可移植性。Java语言是跨平台的,所谓跨平台是不依赖于操作系统,它可以运行到多个系统平台中,如目前常用的操作系统Windows、Linux和UNIX等,由于Servlet使用Java语言编写,所以Servlet继承了Java语言的优点,程序一次编码,多平台运行,拥有超强的可移植性。
缺点
1、每写一个servlet在web.xml中都要做相应的配置,导致web.xml内容过于繁多,不利于团队分组开发。解决方案为注解开发
2、在servlet中,doGet方法和doPost方法有HttpServletRequest和HttpServletResponse参数。在单元测试中必须初始化这两个参数。servlet具有容器依赖性,必须在tomcat服务器中运行,不利于单元测试
3、客户端提交参数到服务器,一律按String字符串类型接收,后期需要进行转换。
4、Servlet是一个早期的不完善的产品,代码编写复杂.
5、在生成动态网页时不支持所及即所得的开发
Servlet三生命周期
init(ServletConfig) 在Servlet对象实例化后立即执行的方法,执行且只执行一次
service(ServletRequest,ServletResponse)用于处理客户端请求,单实例多线程的方式
常驻内存
destroy() 对象销毁之前执行,执行且只执行一次
Servlet和JSP区别
JSP 究其本质就是Servlet
Servlet是包含html标签的 Java 类
JSP是包含 Java 代码的html网页
客户跟踪
实现客户端跟踪有4种常见的方法:隐藏域、URL重写、客户端跟踪cookie、服务器跟踪session
Session
session用于绑定用户在当前应用种实现跨页面数据传递
HttpSession是Java平台对session机制的实现规范,因为它仅仅是个接口,具体到每个web应用服务器的提供商,除了对规范支持之外,仍然会有一些规范里没有规定的细微差异
HttpSession类它提供了setAttribute()和getAttribute()方法存储和检索对象,提供了一个会话ID关键字,一个参与会话行为的客户端在同一会话的请求中存储和返回它。servlet引擎查找适当的会话对象,并使之对当前请求可用。HttpServletRequest 接口提供了方法来获取HttpSession实例。
HttpServletRequest对象提供的方法:
public HttpSession getSession() :该方法取得请求所在的会话。相当于request.getSession(true)
public HttpSession getSession(Boolean create):返回当前请求的会话。如果当前请求不属于任何会话,而且create参数为true,则创建一个会话,否则false表示返回null。此后所有来自同一个的请求都属于这个会话,通过它的getSession返回的是当前会话
使用session传递数据的方法
public void setAttribute(String name,Object value) 将value对象以name名称绑定到会话
public object getAttribute(String name) 取得name的属性值,如果属性不存在则返回null
public void removeAttribute(String name) 从会话中删除name属性,如果不存在不会执行,也不会抛出错误
public Enumeration getAttributeNames() 返回和会话有关的枚举值
session的实现原理
session依赖Cookie。
当客户端第一次访问服务器时,服务器会为客户端创建一个session对象,然后把session对象放到session池中,在响应时把sessionId通过Cookie响应给客户端。注意,只有在第一次访问时,服务器才会创建session,给客户端响应sessionId。
当客户端再次访问服务器时,会在请求中带着sessionId给服务器,服务器通过sessionId到session池中找到session对象,这就可以完成会话跟踪了。也就是说,服务器端保存的是session对象,而客户端只有sessionId。每次访问都需要通过客户端的sessionId来匹配服务器端的session对象!这样用户在session中保存的数据就可以再次被使用了。
sessionId是服务器通过Cookie发送给客户端浏览器的,这个Cookie的maxAge为-1,即只在浏览器内存中存在。如果关闭所有浏览器窗口,那么这个Cookie就会消失了