HttpServlet这个类实现了Servlet,我们为了提高开发效率使用HttpServlet进行开发,我们想要使用HttpServlet只需要继承HttpServlet就行。下面用代码进行演示。
我们创建了一个类继承了HttpServlet,但是我们的代码写在哪里呢?我们知道在Servlet中,我们的代码是写在service中的,我们看一下HttpServlet的源码。
发现HttpServlet已经实现了service方法,service方法如下
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getMethod();
long lastModified;
if (method.equals("GET")) {
lastModified = this.getLastModified(req);
if (lastModified == -1L) {
this.doGet(req, resp);
} else {
long ifModifiedSince;
try {
ifModifiedSince = req.getDateHeader("If-Modified-Since");
} catch (IllegalArgumentException var9) {
ifModifiedSince = -1L;
}
if (ifModifiedSince < lastModified / 1000L * 1000L) {
this.maybeSetLastModified(resp, lastModified);
this.doGet(req, resp);
} else {
resp.setStatus(304);
}
}
} else if (method.equals("HEAD")) {
lastModified = this.getLastModified(req);
this.maybeSetLastModified(resp, lastModified);
this.doHead(req, resp);
} else if (method.equals("POST")) {
this.doPost(req, resp);
} else if (method.equals("PUT")) {
this.doPut(req, resp);
} else if (method.equals("DELETE")) {
this.doDelete(req, resp);
} else if (method.equals("OPTIONS")) {
this.doOptions(req, resp);
} else if (method.equals("TRACE")) {
this.doTrace(req, resp);
} else {
String errMsg = lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[]{method};
errMsg = MessageFormat.format(errMsg, errArgs);
resp.sendError(501, errMsg);
}
}
从中我们可以很清楚的知道service进行了内容分发,当不同的请求方法时调用不同的方法。
我们可以看见HttpServlet也确实有很多方法,于是我们重写对应方法就行了,由于常用的就2个方法,分别是get和post,于是我们就重写这2个方法,但是由于现在在很多时候我们又不需要将2种方法请求单独进行处理,所以我们在post方法中直接调用get。代码如下
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("我被调用了");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
然后我们在xml中进行配置,配置如下
<servlet>
<servlet-name>secondServlet</servlet-name>
<servlet-class>com.clucky.servlet.SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>secondServlet</servlet-name>
<url-pattern>/second</url-pattern>
</servlet-mapping>
我们启动tomcat,在游览器访问试一下,发现控制台输出我被调用了