HttpServlet 作为一个抽象类用来创建用户自己的HTTP
Servlet.HttpServlet类扩展了GennericServlet类,HttpServlet类的子类必须至少重写以下方法中的一个
doGet()和doPost().HttpServlet类提供doGet()方法来处理GET请求。并提供doPost()方法来处理Post请求。
->doGet():由服务器调用来处理客户端发出的GET请求。通过GenericServlet类的service()方法来调用此方法。重写GET
方法还支持HTTP
HEAD请求,该请求返回没有主体只有标题字段的响应。提交响应之前,servlet容器要编写标题。这是因为在HTTP中必须在发送响应主体之前发送标
题。GET方法必须是安全的,如果客户端请求更改存储的数据,则必须使用其他的HTTP方法,如果请求的格式不正确,则doGet()方法会返回HTTP
“请求错误”的消息。doGet()方法的语法为:
public void doGet(HttpServletRequest reqeust,HttpServletResponse response)throws ServletException,IOException
其中 ,request是存储客户端请求的HttpServletRequest对象。response是包含服务器对客户端作出响应的HttpServletResponse对象。
->doPost():由服务器调用以允许Servlet处理客户端发出的POST请求。通过GenericServlet类的service()方法来
调用此方法。HTTP
POST方法用于通过Internate发送大量数据。提交响应之前,Servlet容器要编写标题。这是因为在HTTP中必须在发送实际响应之前发送标
题。如果HTTP POST请求的格式不正确,则doPost()方法会返回HTTP"请求错误"消息。doPost()方法语法为:
public void doPost(HttpServletRequest request,HttpServetResponse response)throws ServletException,IOException
其中,request是存储客户端请求的HttpServletRequest 对象;response 是包含服务器对客户端作出响应的HttpServletResponse对象。
Servlet的生命周期
Servlet的生命周期由Servlet容器控制,该容器创建Servlet的实例。Servlet生命周期就是指Servlet实例在创建之后响应客
户请求直至销毁的全过程。Servlet实例的创建取决于Servlet的首次调用。Servlet接口定义了Servlet生命周期的3个方法。分别说
明如下:
->init()创建Servlet的实例后对其进行初始化。实现ServletConfig接口的对象作为参数进行传递。在初始化过程
中,Servlet容器使用ServletConfig接口将信息(如Servlet
的初始化参数的名称、初始化参数的值,以及Servlet的实例的名称等)传递给Servlet,init()方法的语法为:
publci void init(ServletCofig config)throws ServletException
其中,config是作为参数传递给init()方法的实现。ServletConfig接口的对象。
->service():响应客户端发出的请求。service方法接收ServletRequest接口和ServletRequest接口的对象来处理请求和发送响应。service()方法的语法为:
public void service (ServletRequest request,ServetResponse response)throws ServletException,IOException
其中,request是作为参数传递以存储客户端请求的ServletRequest接口的对象;response是ServletResponse接口的对象,它包含Servlet作出的响应。
->destroy():如果不再有需要处理的请求,则释放Servlet实例。destroy()方法的语法为:
public void destroy()
Servlet生命周期的各个阶段如图1所示。
现将各阶段说明如下:
-> 实例化:Servlet容器创建Servlet类的实例对象。
-> 初始化:Servlet容器调用Servlet的Init()方法,通常会申请资源。
-> 服务:由容器使用以响应客户对Servlet的请求。
-> 破坏:在释放Servlet实例之前调用,通常会释放资源。
-> 不可用:释放内存中的实例。
要实例化一个Servlet,容器必须先找到Serlvet类,加载Servlet类并创建Serlvet的对象。然后通过调用Servlet的
init()方法来初始化Servlet。ServletConfig接口对象作为参数传递给init()方法该接口对象为Servlet提供对
ServletConfig接口的访问。Sevlet容器使用ServletContext接口与Servlet容器进行通信。
如果初始化Servlet失败,则抛出 UnavailableException
或者ServletException异常。并再次尝试对Servlet进行实例化和初始化。然后将ServletRequest和
ServletResponse接口对象作为参数传递给service()方法,该方法将处理请求并返回响应。
如果响应请求时引发异常,则容器通过调用Servlet的destroy()方法来卸载实例。调用destroy()方法后,就会从内存中是否
Servlet实例,destroy方法给了Servlet机会,来清除所持有的资源(比如内存,文件处理和线程),以确保在内存中所有的持续状态和
Servlet的当前状态是同步的。
Servlet生命周期各种方法的调用:
package test;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class TestServlet extends HttpServlet{
private static final String CONTENT_TYPE="text/html;charset=GBK";
int count;
//读取初始化参数
public void init(ServletConfig config)throws ServletException{
super.init(config);
String initial=config.getInitParameter("initial");
try{
count=Integer.parseInt(initial);
}catch(NumberFormatException e){
count=0;
}
System.out.println("计数器Servlet已成功初始化");
}
//处理HTTP Get请求
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
response.setContentType(CONTENT_TYPE);
PrintWriter out =response.getWriter();
out.println("<html>");
out.println("<head><title>TestServlet</title></head>");
out.println("<body bgcolor=/"#ffffff/">");
count++;
out.println("自从加载后(读取初始化参数后这个servlet已经被访问了)"+count+"次。");
out.println("</body>");
out.println("</html>");
out.close();
System.out.println("该Servlet的doGet方法被执行一次");
}
//处理the HTTP Post请求
public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
doGet(request,response);
}
//清除资源
public void destroy()
{
System.out.println("计数器Servlet已释放资源");
}
}
类写好后在web.xml中加入 该servlet的配置项
web.xml
-----------------------------------------
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>
test.TestServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>//此处命名为test 当我们访问时即用test来访问test.TestServlet这个servlet
<url-pattern>/*</url-pattern>
</servlet-mapping>
--------------------------------------------------
启动tomcat 在地址栏输入 http://localhost:8080/项目名称/web.xml中定义的名称(test)
控制台输出信息。
HTTP Servlet基础 复习2
最新推荐文章于 2022-09-03 17:47:33 发布