重要的是要了解servlet的工作原理, 以更好地理解servlet。在这里, 我们将获得有关第一个servlet程序的内部细节。
服务器检查是否是第一次请求servlet。
如果是, 则Web容器执行以下任务:
- 加载servlet类。
- 实例化servlet类。
- 调用传递ServletConfig对象的init方法
- 调用传递请求和响应对象的服务方法
Web容器如何处理Servlet请求?
【Servlet如何工作(工作原理详细解释——)】Web容器负责处理请求。让我们看看它如何处理请求。
- 将请求与web.xml文件中的servlet映射。
- 为此请求创建请求和响应对象
- 在线程上调用服务方法
- 公共服务方法在内部调用受保护的服务方法
- 受保护的服务方法根据请求的类型调用doGet方法。
- doGet方法生成响应并将其传递给客户端。
- 发送响应后, Web容器将删除请求和响应对象。线程包含在线程池中还是被删除取决于服务器实现。
公共服务方法将ServletRequest对象转换为HttpServletRequest类型, 而ServletResponse对象转换为HttpServletResponse类型。然后, 调用传递这些对象的服务方法。让我们看一下内部代码:
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
{
HttpServletRequest request;
HttpServletResponse response;
try
{
request = (HttpServletRequest)req;
response = (HttpServletResponse)res;
}
catch(ClassCastException e)
{
throw new ServletException("non-HTTP request or response");
}
service(request, response);
}
受保护的服务方法中写了什么?
受保护的服务方法检查请求的类型, 如果请求类型为get, 则调用doGet方法, 如果请求类型为post, 则调用doPost方法, 依此类推。让我们看一下内部代码:
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
String method = req.getMethod();
if(method.equals("GET"))
{
long lastModified = getLastModified(req);
if(lastModified == -1L)
{
doGet(req, resp);
}
....
//rest of the code
}
}
推荐阅读
- HttpServlet类介绍和用法示例
- GenericServlet类介绍用法示例
- JavaWeb(HttpServletRequestWrapper)
- Servlet开发 | 利用 Filter + 反射 处理 URL, 精简 servlet-mapping
- No mapping found for HTTP request with URI [/***] in DispatcherServlet with name 'dispatcherServ
- 使用HttpServletRequestWrapper重写Request请求参数
- Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签
- J2ee入门(servlet-mapping的映射配置)
- AppletScriptlet与Servlet