除了直接通过实现Servlet接口创建一个Servlet实现类,我们还可以通过继承HTTPServlet来创建一个Servlet实现类。
HTTPServlet继承了GenericServlet抽象类,GenericServlet实现了Servlet接口。
HTTPServlet
GenericServlet
实例代码
创建一个Servlet,而不是直接创建一个Class
package com.ken.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class QuickStartServlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().write("doGet running...");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
创建好Servlet之后,eclipse自动帮我们生成了web.xml中的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>servlet_first</display-name>
<servlet>
<servlet-name>abc</servlet-name>
<servlet-class>com.ken.servlet.QuickStartServlet</servlet-class>
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql:///mydb</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>abc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>QuickStartServlet2</servlet-name>
<servlet-class>com.ken.servlet.QuickStartServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>QuickStartServlet2</servlet-name>
<url-pattern>/quickStartServlet2</url-pattern>
</servlet-mapping>
</web-app>
运行效果
运行成功。
我们不是说每次请求都会访问service()方法吗?可是当前类中,只有doGet()和doPost()方法。
在当前类找不到,我们就去父类HttpServlet中找。
找到了service()方法。这个方法,主要就是把ServletRequest和ServletResponse转成HttpServletRequest和HttpServletResponse。
我们继续看service(request, response);
我们再看doGet()方法
可见,HttpServlet中调用service()方法,最终执行的是doGet()和doPost()方法。
所以,我们在自己写的Servlet中覆盖父类HttpServlet的doGet()和doPost()方法,效果就相当于执行service()方法。
小经验:创建模板
弹出如下dialog
ok->apply
然后,在我们写的Servlet中使用模板。
alt+/
模板内容:
package ${enclosing_package};
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ${primary_type_name} extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().write("hello world...");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}