标签:
三、Servlet的生命周期
一个Java servlet具有一个生命周期,这个生命周期定义了一个Servlet如何被载入并被初始化,如何接收请求并作出对请求的响应,如何被从服务中清除。Servlet的生命周期被javax.servlet.Servlet这个接口所定义。
所有的Java Servlet都会直接地或间接地执行javax.servlet.Servlet接口,这样它才能在一个Servlet引擎中运行。 Servlet引擎是Web 服务器按照Java Servlet API定制的扩展。Servlet引擎提供网络服务,能够理解MIME请求,并提供一 个运行Servlet的容器。
javax.servlet.Servlet接口定义了在Servlet的生命周期中特定时间以及特定顺序被调用的方法。
Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁。
Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
(Web服务器解析完主机名、web应用,紧接着查找资源,即到该web.xml查询。
)执行如下过程:
Init(): 使用反射机制,如果该Servlet的实例不存在,加载、创建实例调用init方法将该实例装载到内存(只调用一次),即进行初始化。
Service(): Web服务器把接收到的Http请求封装给HttpServletRequest对象(各种信息),作为service参数传入,service函数会被调用多次(每访问一次Servlet,service就会被调用一次)
把response(响应给服务器的信息)拆解,形成http响应格式。
destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。
Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。
过程概括如下:
(1)客户端发送请求至服务器端。
(2)服务器将请求信息内容并将其传给Server。
(3)Servlet生成响应内容并将其传给Server。
(4)响应内容动态生成,通常取决于客户端的请求。
(5)服务器将响应返回给客户端。
四、继承GenericServlet
继承GenericServlet与实现Servlet接口的不同就是把init()与destroy()封装在service抽象方法中,即继承GenericServlet可只实现一个方法就好。其它步骤都与实现Servlet接口一样。
添加文件到classes目录下,创建文件 MyGenericServlet.java 代码如下:
package com.focus;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class MyGenericServlet extends GenericServlet
{
public void service(ServletRequest request, ServletResponse
response) throws ServletException, IOException
{
response.getWriter().println("hello world !!!!!");
}
}
配置一下Servlet
<servlet>
<servlet-name>MyGenericServlet</servlet-name>
<display-name>MyGenericServlet</display-name>
<servlet-class>com.focus.MyGenericServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyGenericServlet</servlet-name>
<url-pattern>/Generic</url-pattern>
</servlet-mapping>
在浏览器输入:
效果如下:
五、继承HttpServle
添加文件到classes目录下,创建文件 MyHttpServlet.java 代码如下:
package com.focus;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class MyHttpServlet extends HttpServlet
{
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
response.setCharacterEncoding("gbk");
response.getWriter().println("欢迎 "+request.getParameter("username")+" 光临本网站");
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,IOException
{
response.getWriter().println("i am doGet");
}
}
配置一下Servlet
<servlet>
<servlet-name>MyHttpServlet</servlet-name>
<display-name>MyHttpServlet</display-name>
<servlet-class>com.focus.MyHttpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyHttpServlet</servlet-name>
<url-pattern>/MyHttpServlet</url-pattern>
</servlet-mapping>
在ServletTest目录下创建一个 go.html 代码如下:
<html>
<head>
<title>登录页面</title>
</head>
<body>
<form action="/ServletTest/MyHttpServlet" method="post">
姓 名:<input type="text" name="username" /><br/>
密 码:<input type="password" name="userpass" /><br/>
<input type="submit" value="提交" />
</form>
</body>
</html>
在浏览器输入:
效果如下:
证明HttpServlet默认调用的是doGet
在浏览器输入:
效果如下:
按提交按钮,跳转页面
Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet详解、Servlet的生命周期(2)
标签:
原文地址:http://blog.csdn.net/foces_18/article/details/51133568