写的太多也记不住,按照自己的习惯记录一些概念
一、分请Servlet接口、Servlet程序、Servlet容器
- Servlet接口:Java语言实现的接口,javax.servlet.servlet接口。
- Servlet程序:Servlet Applet,Java语言编写的服务器端程序,实现Servlet接口。
- Servlet容器:运行Servlet程序的环境。
二、Servlet容器
- Servlet容器将Servlet类载入内存,并产生Servlet实例
- 在一个应用程序中,每种Servlet类型只能有一个实例
- ServletRequest对象和ServletResponse对象都是由Servlet容器(例如TomCat)封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。每个请求和响应对应一个ServletRequest对象和ServletResponse对象。
- Servlet容器还会创建一个ServletContext对象,每个应用程序只有一个ServletContext
- Tomcat 的工作就是解析 HTTP 请求,并把请求交给 Servlet 的代码来进行进一步的处理。Servlet 的代码根据请求计算生成响应对象,Tomcat 再把这个响应对象构造成 HTTP 响应,返回给浏览器。
- Tomcat容器也实现Servlet接口,底层通信还是socket。
三、Servlet接口
package javax.servlet;
import java.io.IOException;
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
四、Servlet程序
Servlet程序继承了抽象类HttpServlet,HttpServlet实现了Servlet接口。
HttpServlet抽象类中的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 = req.getDateHeader("If-Modified-Since");
if (ifModifiedSince < lastModified) {
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);
}
}