servlet 相关内容 续一

Servlet 相关内容  续一

 

Serlvet生命周期:

 

Servlet运行在Servlet容器中,其生命周期由容器管理。Servlet的生命周期通过

javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示。

 

包含了四个阶段:

 

1、加载和实例化
   Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器检测到

需要这个Servlet来响应到一个请求时,创建Servlet实例。当Servlet容器启动后,它

必须要知道所需的Servlet类在什么位置,Servlet容器可以从本地文件系统、远程文件

系统或者其他的网络服务中通过类加载器加载Servlet类,成功加载后,容器创建

Servlet的实例。因为容器是通过Java的反射API来创建Servlet实例,调用的是Servlet

的默认构造函数,也就是不带参数的构造函数,所以我们在编写Servlet类的时候,不

应该提供带参数的构造函数。

 

2、初始化

   在Servlet实例化之后,容器必须调用Servlet的init()方法初始化这个对象。对于

一个Servlet实例,init()方法只能调用一次。在初始化期间,Servlet实例可以使用容

器为它准备的ServletConfig对象从Web应用程序的配置信息(web.xml)中获取初始化参

数信息。如果初始化失败(数据库连接失败、没有找到初始化参数)将抛出异常。

 

3、请求处理   
   Servlet容器调用Servlet的service()方法对请求进行处理。要注意的是,在

service()方法调用之前,init()方法必须成功执行。

 

4、服务终止

   当容器检测到一个Servlet实例应该从服务中被移出的时候,容器就会调用实例的

destroy()方法,以便让该实例可以释放它所使用的资源,保存数据到持久设备中。如

果再次需要这个Servlet请求,Servlet容器会创建一个新的Servlet实例。


注:如果需要让Servlet容器在启动时自动加载servlet,可以在web.xml文件中配置

<load-on-startup>元素。


Servlet上下文:

运行在Java虚拟机中的每一个Web应用程序都有一个与之相关的Servlet上下文。Java

Servlet API 提供了一个ServletConext接口用来表示上下文。在这个接口中定义了一

组方法,Servlet可以使用这些方法与它的Servlet容器进行通信。

ServletContext对象是Web服务器中的一个已知路径的根。例如:一个Web程序:

TServlt,Servlet上下文被定位于http://localhost:8080/TServlet。以/TServlet请

求路径(称为上下文路径)开始的所有请求被发送到与此ServletContext关联的Web应

用程序。

 

 

ServletContext接口:

 

 

一个ServletContext对象表示了一个Web应用程序的上下文。Servlet容器在Servlet初

始化期间,向其传递ServletContext对象,也可以通过ServletContext对象的

getServletContext()方法来得到ServletContext对象。也可以通过GenericServlet类

的getServletContext()方法得到ServletContext对象,不过GenericServlet类的

getServletContext()也是调用ServletConfig对象的getServletContext方法来得到这

个对象的。

 

 

ServletContext接口定义了下面的这些方法,Servlet容器提供了这个接口的实现。

 

·public java.lang.Object getAttribute(java.lang.String.name)

 

·public java.util.Enumeration getAttributeNames()

 

·public void removeAttribute(java.lang.String.name)

 

·public void setAttribute(java.lang.String.name,java.lang.Object object)

 

用于读取、移出和设置共享属性,任何一个Servlet都可以设置某个属性,而同一个Web

应用程序的另一个Servlet可以读取这个属性,不管这些Servlet是否为同一个客户进行

服务。

 

·public ServletContext getContext(java.lang.String uripath)

 

该方法返回服务器上与指定的URL相对应的ServletContext对象。给出的uripath参数必

须以斜扛(/)开始,被解释为相对于服务器文档根的路径。处于安全方法的考虑,如果

调用该方法访问的一个受限制的ServletContext对象,那么该方法将返回null。

 

·public java.lang.String getInitParameter(java.lang.String name)

 

·public java.util.Enumeration getInitParameterNames()

 

可以为Servlet上下文定义初始化参数,这些参数被整个Web应用程序所使用。可以部署

描述符(web.xml)中使用<context-param>元素定义上下文的初始化参数,上面两个方法

用于方法这些参数。

 

·public int getMajorVersion()

 

·public int getMinorVersion()

 

上面两种方法用于返回Servlet容器支持的Java Servlet API的主版本和此版本号。

 

·public java.lang.String getMimeType(java.lang.String file)

 

 该方法返回指定文件的MIME类型,如果未知,返回null。

 

·public RequestDispatcher getRequestDispatcher(java.lang.String path)

 

 该方法返回一个RequestDispatcher对象,作为给定路径上的资源的封装。可以使用

RequestDispatcher对象将一个请求转发(forward)给其他资源进行处理,或者在响应

中包含资源。要注意的是,传入的参数path必须以斜扛(/)开始,被解释为相对于当

前上下文根(context root)的路径。

 

·public RequestDispatcher getNameDispatcher(java.lang.String name)

 

 该方法与getRequestDispatcher()方法类似。不同之处在于,该方法接受一个在部署

描述符中以<servlet-name>元素给出的Servlet(jsp)的名字作为参数。

 

·public java.lang.String getRealPath(java.lang.String path)

 

 在一个Web应用程序中,资源用相对于上下文路径的路径来引用,这个方法就可以返

回资源在服务器文件系统上的真实路径(文件的绝对路径)。返回的真实路径的格式应

该适合于运行这个Servlet容器的计算机和操作系统。

 

·public java.net.URL getResource(java.lang.String path)throws

java.net.MalformedURLException

该方法返回被映射到指定路径上的资源的URL。

 

·public java.io.InputStream getResourceAsStream(java.lang.String path)

 

 与getResource方法类似,不同之处在于,该方法返回资源的输入流对象。另外,使用

getResourceAsStream方法,元信息(如内容长度和内容类型)将丢失,而使用

getResource()方法,元信息是可用的.

 

·public java.util.Set getResourcePaths(java.lang.String path)

该方法返回资源的路径列表,参数path必须以斜扛开始,指定用于匹配资源的部分路径

 

·public java.lang.String getServerInfo()

该方法返回运行Servlet的容器的名称和版本。

 

·public java.lang.String getServletContextName()

该方法返回在部署描述符中是<display-name>元素指定的对应于当前ServletContext

的web应用程序的名称。

 

·public void log(java.lang.String msg)

 

·public void log(java.lang.String message,java.lang.Throwable throwable)

ServletContext接口提供了上面两个记录日志的方法,第一个方法用于记录一般的日

志,第二个方法用于记录指定异常的栈跟踪信息。

 

 

 

 

实例: 页面访问统计。

 

servlet中的代码:

public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		ServletContext context = this.getServletContext();
		Integer count = (Integer) context.getAttribute("counter");
		if (count == null)
		{
			count = new Integer(1);
		}
		else
		{
			count = new Integer(count.intValue()+1);
		}
		resp.setContentType("text/html;charset=gb2312");
		PrintWriter out = resp.getWriter();
		
		out.println("<html><head><title>");
		out.println("counter");
		out.println("</title></head><body>");
		String st = "页面访问量为:"+count;
		out.println(st);
		out.println("</body></html>");
		context.setAttribute("counter", count);
		out.close();
	}

 

在web.xml文件中配置即可。

你可能感兴趣的:(java,Web,应用服务器,servlet,网络应用)