在实际的开发中,我们经常需定义一种自己的请求,比如对所有“/test.do”的请求都要被拦截进行统一处理,那么可以自己编写一个servlet来拦截这种请求。
编写servlet的时候,需要继承类 javax.servlet.http.HttpServlet(需要下载servlet.jar包)。我们可能经常使用的方法如下:
init(ServletConfig config) : servlet的初始化方法
service : servlet处理请求的总入口,然后根据不同的请求方式分别调用不同的方法,Get时调用doGet;Post方式时调用doPost。
doGet : 处理提交方式为Get的请求
doPost : 处理提交方式为Post的请求
destroy: 销毁servlet时调用的方式,servlet是单例的模式,所以只有关闭应用服务器(如:Tomcat)时才会关闭。
对于处理不同的请求,我们可以在doPost方法中调用doGet方法,在doGet方法中对请求进行统一处理。我们面试中经常会被问到doGet和doPost的区别,通过本文你可以看出两者的区别。Get方式传递的参数最大好像是225个字符,但是Post方式采用body来传递的,没有长度限制的。
一、servlet代码示例
/**
*
*/
package com.test.javax.servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author rey
*
*/
public class TestServlet extends HttpServlet {
/**
* 构造函数
*/
public TestServlet() {
super();
System.out.println("TestServlet的构造函数...");
}
/*
* (non-Javadoc)
*
* @see
* javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest
* , javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("doGet 开始...");
//super.doGet(req, resp); //不能调用父类中的方法
resp.getWriter().write("Hello doGet!");
resp.flushBuffer();
System.out.println("doGet 结束...");
}
/*
* (non-Javadoc)
*
* @see
* javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest
* , javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("doPost 开始...");
//super.doPost(req, resp); //不能调用父类中的方法
resp.getWriter().write("Hello doPost!");
resp.flushBuffer();
System.out.println("doPost 结束...");
}
/*
* (non-Javadoc)
*
* @see javax.servlet.http.HttpServlet#service(javax.servlet.ServletRequest,
* javax.servlet.ServletResponse)
*/
@Override
public void service(ServletRequest _request, ServletResponse _response)
throws ServletException, IOException {
System.out.println("service 开始...");
super.service(_request, _response);
_response.getWriter().write("Hello service!");
System.out.println("service 结束...");
}
/*
* (non-Javadoc)
*
* @see javax.servlet.GenericServlet#destroy()
*/
@Override
public void destroy() {
System.out.println("开始销毁servlet[destroy]...");
super.destroy();
}
/*
* (non-Javadoc)
*
* @see javax.servlet.GenericServlet#init(javax.servlet.ServletConfig)
*/
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
System.out.println("开始初始化 TestServlet...");
}
}
二、servlet配置
<!-- start servlet begin -->
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.test.javax.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/test.do</url-pattern>
</servlet-mapping>
<!-- start servlet end -->
三、测试html代码
<html>
<head>
<title>测试servlet</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form name="frm_data" id="frm_data" method="POST" action="./test.do">
<input type="hidden" name="UserName" value="wuguowei">
<input type="hidden" name="UserPassword" value="123455">
<input type="hidden" name="Chinese" value="1中国2">
<input type="submit" value="提交">
</form>
</body>
</html>
四、测试结果
1)Post方式结果:
service 开始...
doPost 开始...
doPost 结束...
service 结束...
2)Get方式结果:
service 开始...
doGet 开始...
doGet 结束...
service 结束...