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,在游览器访问试一下,发现控制台输出我被调用了
到此,我们已经成功使用HttpServlet进行了编写,并进行了访问,上面的class差不多就是HttpServlet的模板,以后没有特殊情况都这样写就行了。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140326.html