关于Servlet一直不太明白,找了蛮多资料,摘抄如下,加深理解。
从功能的角度描述:
Servlet是一种运行在支持Java语言的服务器上的组件,用于实现多种网络服务功能,为网络客户提供安全可靠、易于移植的动态网页。Servlet容器用于处理客户端的请求,并将处理结果返回给客户端。简而言之,Servlet是为了实现Java语言的网络功能而存在的。
运行过程:
在Servlet容器中,当客户请求到来时,Servlet容器获取请求,然后调用某个Servlet,并把Servlet的执行结果返回给客户。而Tomcat就是一个典型的Servlet容器。
当客户请求某个资源时,Servlet容器使用ServletRequest对象把客户的请求信息封装起来,然后调用Servlet生命周期中的一些方法,完成客户端的请求任务。容器将Servlet执行的结果封装在ServletResponse对象中,一次返回给客户端,完成一次服务过程。
Servlet生命周期:
加载和实例化:当启动Servlet容器时,容器首先到发布目录的WEB-INF下查找一个配置文件(称为描述符文件)web.xml。这个配置文件有相关的Servlet的配置信息,主要是定义Servlet和对已定义的Servlet的映射。Servlet容器为每个配置自动装入选项的Servlet创建一个实例,而没有设置自动装入选项的Servlet,只有在第一次请求时容器才为其创建实例。
初始化:当Servlet被实例化之后,Servlet容器调用每个Servlet的init()方法来为实例初始化。其中作为init()方法参数的ServletConfig类中定义了初始Servlet需要的所有参数。
服务:Servlet被初始化之后,处于能响应请求的就绪状态。当客户端的请求到来时,服务器创建一个请求对象和响应对象。每个Servlet的请求都会产生一个ServletRequest对象,Servlet给客户端的响应由一个ServletReponse对象来完成。这两个对象以参数的形式传给service()方法。在service()内,对客户端的请求方法进行判断,如果是以GET方法提交的,则调用doGET()方法处理请求,如果是以POST方法提交的,则调用doPOST()方法处理请求。
销毁:当Servlet容器不需要某个Servlet实例时,容器会调用该Servlet的destroy()方法,在这个方法内,Servlet会释放掉所有在init()方法内申请的资源,如数据库连接等。
所属包:
Javax.servlet和Javax.servlet.http包为编写Servlet提供了借口和类。
其他:由浏览器内嵌的JVM执行的Java类叫Applet,由Web服务端的JVM执行的Java类叫Servlet程序。
简单概念:
Servlet是sun公司提供的一门用于开发动态web资源的技术;
Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
1、编写一个Java类,实现servlet接口;
2、把开发好的Java类部署到web服务器中。
通常也可以把实现了servlet接口的java程序,称之为Servlet。
运行过程:
Servlet技术的核心是Servlet,是所有Servlet类必须直接或间接需要实现的接口;
Servlet程序由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
1、Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
2、装载并创建该Servlet的一个实例对象。
3、调用Servlet实例对象的init()方法。
4、创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
5、WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
session(会话)
形象描述:
session也就是会话,我们在网上购物时,为了选购商品可能需要在不同的页面之间进行访问,在浏览的过程中不断的将商品添加到购物车中。所以,Servlet容器接收到客户请求之后,需要判断是哪个用户发出的请求,需要实现将商品添加到购物车中。为了跟踪用户的操作状态,Servlet容器使用了一个HttpSession对象实现这个功能,称为会话机制。
实现方式:
主要有两种实现方式:Cookie和URL重定向。
当一个会话开始时,Servlet容器为每个客户创建一个HttpSession对象,在HttpSession对象中可以存放客户状态信息(如购物车)。为了识别同一个Session对象,Servlet容器为每个Session分配一个唯一标识,称为SessionID。在客户端向服务器发送请求时,Servlet容器将生成的SessionID保存在客户端的Cookie中,如果客户端关闭了Cookie,则可以通过URL重定向保存这个SessionID。
会话创建:
在Servlet中通过request对象获得HttpSession对象:
HttpSession session = request.getSession(Boolean value);
HttpSession session = request.getSession();
会话使用:
使用setAttribute()和getAttribute()方法在HttpSession对象中设置和获取数据。
结束会话的生命周期:
1、客户端关闭浏览器;
2、调用HttpSession对象的invalidate()方法结束HttpSession对象的生命周期;
3、两次访问服务器的时间间隔大于session定义的最大非活动时间间隔。