首先看javaEE7的官方解释
途中框出来的分别是servlet的实现类和servlet的功能,所有已知的实现类分别是
FacesServlet, GenericServlet, HttpServlet ,
其中HttpServlet
是使用最为平凡的。
servlet的是java的一个小程序运行在web上的用来接收来自客户端的response和request请求的。
servlet的生命周期
void init(ServletConfig config) //servlet的初始化由服务器完成,在服务器启动的时候会由服务器调用执行一次
void service(ServletRequest req, ServletResponse res) //这是servlet的处理核心业务的函数,接收request和response请求完成对应的业务操作,客户短每发送一次请求就会执行一次该方法
void destroy() //在服务器关闭的时候回被执行一次。
原生的servlet使用的较少,在日常的开发中我们使用最多的还他的子类HttpServlet,
HttpServlet
虽然我们在javaEE7的文档中看到的HttpServle是servlet的子类但是实际上从它的源码中我们可以看到HttpServlet并不是直接继承的Servlet而是直接继承的Servlet的另一个子类GenericServlet
HTTPServlet的常用方法
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
来看看doGet和doPost的内部代码
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_post_not_supported");
if (protocol.endsWith("1.1")) {
resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
} else {
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
}
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_get_not_supported");
if (protocol.endsWith("1.1")) {
resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
} else {
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
}
}
内部都一样的代码就是对亲求参数的判断,HttpServlet会自动对请求方法进行判断,然后分发到对应的方法中,这个分发就是重写的Servlet 的Service方法来实现的。