SpringBoot很简洁易用,框架的作者对细节和通用的配置进行了封装,使得普通的用户能够使用简单的注解就能完成以前复杂的配置和逻辑功能。但细节的屏蔽对于我们了解原理并不是一件好事,框架用起来有多方便,在debug看源码的时候都是要还的。所以最近再次看这本《Head First Servlet And JSP》,这里只对其中的小的知识点做一个记录。有些知识点对于理解整个环节还是有好处的。
-------------------------------------------------------------
1.服务器对响应格式化(格式化的过程其实就是适配协议),并发送给客户端;
2.HTML告诉浏览器怎么把内容呈现给客户,如果采用了HTML新版本,但浏览器是老版本的,那么浏览器可能无法理解;
3.HTTP是无状态的,这就要求服务器要保留生成客户的会话信息,发送给浏览器(在HttpServletResponse中设置Cookie),下次浏览器发送这个cookie,服务器才知道这个会话是谁的,是不是过期了;
4.GET总字符数是有限的;
5.MIME(多用途互联网邮件类型)类型==>服务器告知浏览器返回的文件类型,方便浏览器用不同的程序或者逻辑来处理服务器返回的文件;
6.这(Content-Type)与浏览器请求中的Accept的值有关系;
7.URL--Uniform Resource Location;
8.端口 0-65536;
9.Web服务器擅长提供静态Web页面,动态的内容需要CGI或者Servlet来进行辅助;
10.JSP其实就是在HTML中引入了Java。
-------------------------------------------------------------
1.Web容器的工作:
请求到来时,至少要创建一个新的线程处理这个请求;
必须要实例化Servlet,调用这个doPost()或者doGet();
要把请求和响应交给servlet;
管理servlet的生死以及servlet资源。
2.Servlet没有main方法,它被另一个应用控制,这个应用叫做容器。Tomcat就是这样一个容器。
3.Web服务器应用(如Apache)得到一个指向某Servlet的请求,此时服务器并不是把请求交给Servlet,而是交给部署Servlet的容器。
Q:如果只有Tomcat,那是不是Tomcat本身就是这个应用+容器?
Tomcat可以作为一个Http服务器来使用,但是没有Apache那么健壮,所以早先是将Apache作为Http服务器,而Tomcat作为Web容器来使用。
现在常用Nginx,它是一个高性能的Http和反向代理Web服务器,同时也提供了IMAP/POP3/SMTP服务。
Q:邮件服务器与HTTP服务器有什么不同?
4.容器做的事情:
通信支持:无需在Servlet中创建ServerSocket与流等,只需要关心自己的业务。容器会自己处理与web服务器之间的协议;
生命周期管理:控制servlet的生与死--加载,实例化,初始化,调用do...,垃圾回收servlet;
多线程支持:每个Servlet请求会创建一个新的Java线程。(Q:不是线程池吗?);
Springboot中的@Controller底层也是Servlet,怎么封装的?
灵活部署:修改XML生命就可以达到改变逻辑的目标;
将JSP代码翻译成真正的HTML。
5.Servlet是死的,被控制的,要看容器怎么控制Servlet才是重点。
6.Servlet映射
⑴灵活,不必担心资源转移位置了用户也必须改动所有的访问位置
⑵安全,不必让用户知道真正的目录结构
7.MVC的关键在于,业务需要与表分离。展示层也要与业务分离。这样可以灵活使用其它的展示层与表处理层替代。
8.J2EE服务器包含一个Tomcat的WEB容器和一个EJB容器。J2EE1.4规范包括一个Servlet2.4规范,JSP2.0规范以及EJB2.1规范。为什么会定义Servlet规范,JSP规范?为了让容器应用与Servlet解耦,让Servlet与JSP解耦,只要遵循这个规范和相关的协议,你也可以开发一款容器应用。
标准的包结构,好处:
1.项目管理--知道对应的位置和对应的作用,就是把标准学会了套用到所有地方都有效
2.命名空间管理
3.可移植性和重用性
HTML表单中<form method="POST" action="SelectBeer.do" >...</form>中的SelectBeer.do是一个逻辑名称,在XML中会对应一个真正的servlet文件的路径。
1.form.html放到tomcat/webapps/Project/目录下
2.web.xml定义好servlet的映射,放入tomcat/webapps/Project/WEB-INF/目录下
3.启动tomcat
-------------------------------------------------------------
用户发送表单的post请求后,服务器的处理流程
1.form表达发送请求,URL是http://....../SelectBeer.do
2.到web.xml中映射,找到servlet-mapping中真正指向的servlet-class
3.容器知道哪个Servlet类负责处理这个请求之后,如果发现这个类还没有初始化,那么就会加载类,并初始化
4.容器开启一个新线程,并将这个请求传给这个线程,调用servlet的service()方法
5.容器返回response给web服务器。