spring 核心与源码解析(0):前言
来源:互联网 发布:mac cs6破解文件下载 编辑:程序博客网 时间:2024/06/10 19:33
该系列将以spring boot为研究对象,配合注解的配置方式探究spring的两大核心IoC和AOP。
读者需要对spring boot的使用和配置有一个基本认识。
在正式讲解Spring相关内容前,首先对基于java的web知识点做一个简单的梳理。
Servlet,是为了扩展java作为web服务的一种规范
从源码上来看,Servlet就是一组接口和类的定义,即我们可以认为J2EE中的Servlet的相关代码为我们使用java构建web服务提供了各种api,这其中包括最常用的Request,Response,ServletConfig等一系列类或接口。
除此之外,还有一个非常重要的类——ServletContext.
ServletContext
ServletContext是针对单个Web应用的,存储该应用的全局信息的空间
即ServletContext对于所有的请求是共享的。既然如此,那么ServletContext一定保存了一些全局变量,从源码中可以得知获取这些变量的方法:
package javax.servlet;public interface ServletContext { ... String getInitParameter(String var1); Enumeration<String> getInitParameterNames(); Object getAttribute(String var1); Enumeration<String> getAttributeNames();
下面我们看看某个应用的ServletContext的具体的内容,输出ServletContext中的attribute如下:
javax.servlet.context.tempdir C:\Users\XXX\...\localhost\ROOTorg.springframework.web.context.WebApplicationContext.ROOT org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@68267da0
总之,ServletContext是每个java web项目都有的一个全局空间。
Filter
过滤器,字面意思,该类针对每次请求进行处理。
public interface Filter { //初始化 void init(FilterConfig var1) throws ServletException; //过滤操作 void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3); //结束操作 void destroy();}
其中FilterConfig类是过滤器的配置类,可以从其获取到该过滤器的变量名和ServletContext等信息。
ServletRequest,ServletResponse
Servlet系列中三个最常见的变体——HttpServlet,ServletRequest,ServletResponse。
其中ServletRequest和ServletResponse是构建起每次web请求的两个基本接口——用于承载前端的请求和后端的反馈。
public interface ServletRequest { Object getAttribute(String var1); void setAttribute(String var1, Object var2); String getCharacterEncoding(); String getContentType(); ServletInputStream getInputStream() throws IOException; String getParameter(String var1);
关于ServletRequest有两点需要额外注意:
- getParameter()方法获取前端请求的参数
- setAttribute() 和 getAttribute() 方法传递的数据只会存在于Web容器内部
从具体实现来说,对于前端表格发来的请求,后端的request专门有一个Parameters类用于承载所有的请求参数,当然其内部还是一个Map的封装。因此,获取前端请求是通过getParameter()来实现的。
那么getAttribute()方法获取的什么参数呢?
注意还有配套的setAttribute()方法,这两个方法都只能在web容器内部实现。
有点类似于Session,那么和Session的区别是什么呢?
我们知道Session用于保存用户在后台的数据,那么request.getAttribute()方法就是获取本次请求设置的数据。下一次同一用户的请求将可能不携带该数据。
也就是说,session的getAttribute()和setAttribute()对于同一用户的每次请求呈现出数据共享,而request的getAttribute()和setAttribute()对于同一用户的每次请求数据不共享。
ServletResponse的设计思路和ServletRequest相似。
Servlet
最后看看请求的本体——Servlet.
该接口的作用即是处理每一次的请求。
public interface Servlet { void init(ServletConfig var1); ServletConfig getServletConfig(); void service(ServletRequest var1, ServletResponse var2); String getServletInfo(); void destroy();}
具体的继承关系如下:
可能很多人对于HttpServlet这个类既熟悉又陌生。
HttpServlet是在没有框架前,处理请求的唯一方法实现。
通过继承HttpServlet并覆盖其doGet或者doPost方法,该类能实现处理前端请求的任务。参考使用HttpServlet处理前端请求
HttpServlet源码概览如下:
public abstract class HttpServlet extends GenericServlet { protected void doGet(...){...} protected void doPost(...){...} protected void doPut(...){...} protected void doDelete(...){...}
而doGet,doPost,doPut,doDelete的输出实现又是依赖于输出流PrintStream来实现的。
什么是Servlet
- spring 核心与源码解析(0):前言
- spring 核心与源码解析(1):IoC之BeanFactory
- spring 核心与源码解析(2):IoC之ApplicationContext
- spring 核心与源码解析(3):AOP如何使用
- Spring Ioc核心源码解析
- 《深入理解SPARK:核心思想与源码分析》(前言及第1章)
- (六)Spring核心框架 - IOC的源码解析
- jdk8源码解析系列--前言
- Spring源码解析配置文件装载与解析
- Spring源码解析 配置文件装载与解析
- (八)Spring核心框架 - AOP的原理及源码解析
- 深入剖析Spring Web源码(一) - 前言
- JDK核心JAVA源码解析(1)
- Spring IOC核心源码学习(一)
- Spring IOC核心源码学习(一)
- Spring IOC核心源码学习(一)
- muduo-源码分析(前言0)
- Spring cloud oauth2.0的源码解析与实践Demo
- ZSTUOJ 4362:不要方
- c/c++ 程序的命令行编译选项
- [自用]apiCloud结合canvas手机端手势密码
- java的输入输出流与文件操作(2.读入写出及关流)
- 图像特征提取三大法宝:HOG特征,LBP特征,Haar特征
- spring 核心与源码解析(0):前言
- git push时出现Username for 'https://github.com': 解决方法
- Linux 多线程编程
- 字符个数统计
- (14)Spring AOP Advisor
- Codeforces Round #181 (Div. 2) E. Empire Strikes Back N!∣∏K,i=1ai!
- Pygame 中访问音频采样数据的模块。
- 欢迎使用CSDN-markdown编辑器
- 二分图神奇讲解