再看Spring

Posted dearYou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再看Spring相关的知识,希望对你有一定的参考价值。

第一次看Spring的代码,还是学生时候,看的模棱两可。

现在有了实际的工作经验,应该会另有收获。

 

先浏览下Http: 

http是用TCP来传输数据的一种协议,请求报文和响应报文的结构都分为三部分:首行、头部、主体。请求报文的首行是方法、URL、http版本,响应报文的首行是http版本、状态码、简略描述。

响应报文的状态码含义:

    1xx:信息性状态码 (没有仔细了解),

     2xx:成功,200

     3xx:重定向相关,301重定向成功

    4xx:客户端错误码,404 找不到资源(一般是请求内容错误)

     5xx:服务器错误,(一般是服务器逻辑抛异常)

 

Tomcat Servlet

 8.5 api   http://tomcat.apache.org/tomcat-8.5-doc/api/index.html   http://tomcat.apache.org/tomcat-8.5-doc/servletapi/index.html

javax.servlet  

 
The javax.servlet package contains a number of classes and interfaces that describe and define the contracts between a servlet class and the runtime environment provided for an instance of such a class by a conforming servlet container.

这个包中的类描述和定义了servlet 和 容器之间的关系。

javax.servlet.http 

 
The javax.servlet.http package contains a number of classes and interfaces that describe and define the contracts between a servlet class running under the HTTP protocol and the runtime environment provided for an instance of such a class by a conforming servlet container.

这个包中 是 ,Servlet 和 容器 在http协议下的实现。

 

ServletConfig  A servlet configuration object used by a servlet container to pass information to a servlet during initialization.

一个Servlet实例初始化的参数之一是ServletConfig,容器会在初始化servlet的时候把它传进Servlet的初始化函数中(init 函数)。Servlet接口的初始化函数:public void init(ServletConfig config) throws ServletException;

ServletContext  Defines a set of methods that a servlet uses to communicate with its servlet container, for example, to get the MIME type of a file, dispatch requests, or write to a log file.

ServletContext 是 一个servlet实例运行的上下文,实例通过ServletContext来和容器交互。ServletConfig中包含一个ServletContext。ServletContext 中的内容是变化的。

ServletConfig 中 getInitParameterNames 和 getInitParameter 用来访问 init-param标签的内容。getServletName 用来访问 servelt-name标签的内容。

其实很多时候都会在代码中写这样的结构,一个大的模块需要使用很多个小的节点一起来实现功能,这些节点依赖的外部因素分为两类:1,常亮参数 ;2,运行时的环境。在这里分别对应了ServletConfig和ServletContext。比方说手游中的新手引导系统,引导系统分为多个小的行为(点击、对话、拖拽等)。点击行为的具体样式可以配置成常亮,而点击所触发的具体事件则是根据游戏运行时的状态来确定的(一般通过一个引用变量来和容器交互)

 

抽象类GenericServlet 实现了 Servlet接口 和 ServletConfig接口,它的inti(ServletConfig)函数定义为:

public void init(ServletConfig config) throws ServletException {     this.config = config;     this.init(); }

继承GenericServlet的时候可以直接重写无参的初始化函数   init()  ,容器传递的ServletConfig 可以通过getServletConfig来获得。

GenericServlet 需要重写的抽象方法是

public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException

 

HttpServlet

HttpServlet 是Servlet针对http协议的一种实现。他继承自GenericServlet,其实现的service方法如下:

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);
}
HttpServlet中service(HttpServletRequest , HttpServletResponse)方法的主要作用是把http请求的方法类型映射到具体的函数上。
protected void service(HttpServletRequest req, HttpServletResponse resp)     throws ServletException, IOException 

 GenericServlet的Init() 和HttpServlet的service(HttpServletRequest , HttpServletResponse)让我联想起了重构中的rename,(纯粹是联想)

 

 

Web.xml 中配置Servlet

多个servlet-name 可以使用同一个servlet-class ,init-param各不相同。(init-param相同的话就没有意义了)

一个servlet-name 可以映射多个url-pattern

 








以上是关于再看Spring的主要内容,如果未能解决你的问题,请参考以下文章

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

Spring boot:thymeleaf 没有正确渲染片段

再看Spring Could微服务的关键组件

What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段

关于spring事务的传播性这篇文章解析的非常清楚了,建议是先收藏再看!

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段