Servlet入门

发布时间:2019-04-24 22:00:50发布者:Mr.Zhang阅读(433)

 

一、servlet工作原理

Servlet的一生受容器的严格控制,容器会创建或销毁servlet对象;

为servlet创建或分配一个线程,并调用servlet的service()方法,

创建请求和响应对象,把请求和响应对象的引用作为参数传递给servlet。

 

Servelt由Servlet容器来管理,当客户请求到来时,容器创建一个ServletRequest对象,封装请求数据,同时创建一个ServletResponse对象,封装相应数据。这两个对象将被容器作为service()方法的参数传递给(转向给doXXX方法处理)Servlet,Servlet利用ServletRequest对象获取客户端发来的请求数据,利用ServletResponse对象发送相应数据。

1、servlet家族

 

 

参照servlet的api

2、生命周期:

 

 

(1)init 出生阶段:在下列情形下Servlet容器装载Servlet:

A:  Servlet容器启动时自动装载某些Servlet

B:  在Servlet容器启动后,客户端首次向Servlet发出请求

C:  Servlet的类文件被更新后,重新装载Servlet

 

注:Servlet容器是否在启动时自动装载Servlet,是由web.xml中为Servlet设置的<load-on-startup>属性决定的(默认是第一调用时初始化)

1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。

 

2)它的值必须是一个整数,表示servlet应该被载入的顺序

 

2)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;

 

3)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。

 

4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。

 

5)当值相同时,容器就会自己选择顺序来加载。

 

所以,<load-on-startup>x</load-on-startup>,中x的取值1,2,3,4,5代表的是优先级,而非启动延迟时间。

 

(3)service()调用

它是Servlet的核心,每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。

(4)destroy() 死亡

 仅执行一次,在服务器端停止且卸载Servlet时执行该方法

 

 

Servlet 生命周期定义了 Servlet 从创建到毁灭的整个过程,总共分为四个步骤。

 

调用 init() 方法初始化

调用 service() 方法来处理客户端的请求

调用 destroy() 方法释放资源,标记自身为可回收

被垃圾回收器回收

 

 

二、HttpServlet的作用

1、处理请求、返回响应

HttpServletRequest:

接口封装了客户请求信息,如客户请求方式、参数、客户使用的协议、以及发出请求的远程主机信息等

 

HttpServletResponse:为Servlet提供了返回响应结果的方法

 

2、转发和重定向

实现重定向

使用HttpServletResponse对象的sendRedirect()方法实现

public sendRedirect(String arg0)

实现转发

获取RequestDispatcher实例

dispatcher=request.getRequestDispatcher("servlet2");

调用forward方法

dispatcher.forward(request, response);

 

转发和重定向的区别

转发是继续传递、处理同一个请求,在服务器端进行

重定向在客户端运行,会产生新请求

因为浏览器需要发出一个新请求 ,所以重定向的速度慢于转发

 

总结:

在实际开发中转发与重定向的选择如下

优先选择转发,因为转发效率更高

在同一Web应用程序的两个请求间传递数据时,在转发与重定向之间,只能通过转发实现

如果需要跳转到其它服务器上的资源,则必须使用重定向

 

 

三:ServletContext(扩展)

是整个Web应用共同的环境,可以保存一些公用的信息。

环境里的每个成员都可以获得环境信息

 

获取方式:

ServletContext context=getServletContext();

String home=context.getInitParameter(“pandaHome”);

System.out.println(home); 

 

两个重要方法:setAttribute()和getAttribute()

 

void   setAttribute(String  name,Object  obj):  设置整个应用范围内的属性值

Object   getAttribute(String name): 获得整个应用范围内的属性值

 





本文转自博客园,原文地址:https://www.cnblogs.com/spring96117/p/10763056.html