再看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
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 和 容器之间的关系。
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 没有正确渲染片段
What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段
关于spring事务的传播性这篇文章解析的非常清楚了,建议是先收藏再看!
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段