Servlet原理
2022-12-14 09:16 杭伟 阅读(75) 评论(0) 编辑 收藏 举报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 }
参考文献:
作者:hangwei
出处:http://www.cnblogs.com/hangwei/
关于作者:专注于开源平台,分布式系统的架构设计与开发、数据库性能调优等工作。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
如果您觉得文章对您有帮助,可以点击文章右下角“推荐”一下。您的鼓励是作者坚持原创和持续写作的最大动力!