Servlet的本质是一个Java接口,定义了一套处理网络请求的规范。
最主要的是两个生命周期方法init()和destory(),以及一个处理请求的service()。
因为处理一个网络请求,绕不开:初始化?请求处理?销毁? 这三个基本面。
其中:init()和destory()方法各自执行一次,service会在每次有新请求到来时被调用。
Servlet并不能直接和客户端打交道。
那请求是如何到达servlet的呢?答案是:servlet容器。
比如tomcat。tomcat监听端口,请求过来后,根据url信息,转发给相应servlet进行处理,servlet调用servlet的service()方法,返回response对象,tomcat再将response对象返回给客户端。
所谓的Request和Response其实是Tomcat传给的Servlet,所以servlet更偏向于业务代码。
Request和Response已经被Tomcat封装好,所以在意网络请求部分的内容,应该去看tomcat的源码。
到这里servlet的部分就已经结束了。
**当下Spring全家桶大行其道, Servlet开始退居幕后,取而代之的是更加方便的SpringMVC。而SpringMVC的核心组件DispatcherServlet其实本质就是一个Servlet。
回顾servlet:
上述servlet相关方法的参数主要有三个:ServletConfig,ServletRequest,ServletResponse
ServletConfig:web.xml,tomcat帮我们解析了。。
ServletRequest和ServletResponse:tomcat处理并封装。其中response由tomcat转发进来是空,由servlet填充,再由tomcat返回给客户端。
Java Servlet封装:
浏览器发送请求基本是两种:get和post,但我们无需自行判断处理。一般是自定义一个Servlet继承HttpServlet,继承关系如图:
因为HttpServlet已经帮我们封装好。所以自定义servlet只需关注具体业务逻辑即可。
1 @WebServlet(name = "helloServlet", value = "/hello-servlet") 2 public class HelloServlet extends HttpServlet { 3 private String message; 4 public void init() { 5 message = "Hello World!"; 6 } 7 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 8 response.setContentType("text/html"); 9 // Hello 10 PrintWriter out = response.getWriter(); 11 out.println("<html><body>"); 12 out.println("<h1>" + message + "</h1>"); 13 out.println("</body></html>"); 14 } 15 public void destroy() { 16 } 17 }
参考文献:
An introduction to Tomcat servlet interactions
标签:请求,tomcat,Servlet,原理,servlet,response,out From: https://www.cnblogs.com/hangwei/p/16979151.html