springMVC笔记

1.spring4中**postMapping()**等同于Requestmapping(value=,Method=requestMethod=post)
2.servlet的包都是由toncat提供的 provided
3处理过程,监听器监听请求路径,匹配之后调用httpservlet的service,其中判断调用dopost或者doget方法,而子类frameworkservlet重写了doget和dopost,统一调用doservice,然后dodispatcher进行转发
@Controller将标注的类变成spring容器的这个bean
springMVC笔记

[email protected]跟老版的mvc功能一样,之前是需要继承一个controller的,
5匹配controller中方法的过程,initHandlerMapping()方法会初始化handlermapping,通过应用上下文寻找已经扫描出的controller类的的bean中的各个路径,同时加载这些controller控制器的class类和所有的处理方法
https://www.cnblogs.com/xiaoxi/p/6164383.html
https://www.jianshu.com/p/08338ea28647

6**.初始化servlet时候**,RequestMappingInfo类,对RequestMapping注解封装。里面包含http请求头的相关信息。如uri、method、params、header等参数。一个对象对应一个RequestMapping注解
HandlerMethod类,是对Controller的处理请求方法的封装。里面包含了该方法所属的bean对象、该方法对应的method对象、该方法的参数等。
7.过程,web容器(Tomcat、jetty)接收请求后,交给DispatcherServlet处理。FrameworkServlet调用对应请求方法(eg:get调用doGet),然后调用processRequest方法。进入processRequest方法后,一系列处理后,在line:936进入doService方法。然后在Line856进入doDispatch方法。在line:896获取当前请求的处理器handler。然后进入AbstractHandlerMethodMapping的lookupHandlerMethod方法。
8.Handlermapping会将所有的requestmapping等装成RequestMappingInfo类,然后遍历去匹配当前请求,匹配上之后调用handler中的方法

9.web.xml中监听器会在应用服务器启动的时候启动,主要是配置应用上下文
10**.load-on-startup值大于等于0时,表示容器启动就加载该servlet**,值越大加载的优先级越高
11. initParam可以使得servlet的init方法中调用键,从而拿到所配置的值,一般就是获得应用上下文,这里的配置仅限于servlet的init方法使用
12.mvc中常用注解,官网文档https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc
13.autowired属性require=false时,可允许bean为null,默认情况下必须注入,否则启动时报错,可以写在属性或setter上
14**@RequestMapping参数属性值**,
value是路径,method指定请求方法;consumes,produces,consumes: 指定处理请求的提交内容,produces: 指定返回的内容类型,配合charset可以设定返回字符的编码格式,仅当request请求头中的(Accept)类型中包含该指定类型才返回;params指定必须包含哪些参数值,才能进去方法
15.@Resource这个也是用于bean注入的,默认byName,属性有name,值为要装配的bean的名字,属性type只为类型,也不是spring提供的注解,功能类似于@autowired
16.PathVariable放参数前面,标记GET方法一个参数的值是路径中传过来的
[email protected]用法于Pathvariable,作用是相当于request.getParameter,value属性指定参数名,required指定该参数是否必须
18.@ResponseBody会将对象转化为json字符串写到响应的body中去,该注解也是springMVC区分返回的是页面还是非页面的数据的依据,假如是字符串则直接将字符串写到客户端,假如是一个对象,此时会将对象转化为json串然后写到客户端,如果没有该注解,那默认返回字符串是路径中配置的modelandview文件名,另外该注解在用于jsp页面时不能直接返回集合,无法转化为json
[email protected] 的高级用法(value= “testParams” , params={ “param1=value1” , “param2” , “!param3” }这种的params是多元素数组的,表示param1和param2必须有,param3必须没有,否则进不来。
value =,header=”host=127.0.0.1” 指明请求的主机路径,其他路径都进不来
20.controller中方法的参数httpservlet相关的都是spring赋值了的,自定义的值就必须用注解标注了
21.HttpMessageConverter这个类负责在一般数据类型和json字符串之间做数据的相互转化
22.modelandview实质上是用于jsp页面的,view可以设置页面名,model是个linkedhashmap,能够通过键值对形式存值,将值带到viewName的页面,通过标签取值上https://www.cnblogs.com/zhuchuanliang/p/7784772.html,model和modelmap都是spring封装的对象,可以直接当成参数穿进去,是用来给跳转页面存值用的,需要返回视图名称,即方法得有String类型返回值,而modelandview则直接返回该类型就行
23.关于请求request的注解分四种,第一种跟request uri相关即@pathvariable(”id”),第二种跟request.header相关有@requestHeader (“keep-alive”)这个能将请求头中的信息赋给参数,另一个@CookieValue(“SESSIONID”) 可以把Request header中关于cookie的值绑定到方法的参数上,第三种处理request body的@requestparam和@requestbody
24https://blog.****.net/yz18931904/article/details/87297577 requestbody的讲解,主要是判断Content-type类型,根据不同类型,看是否必须要这个注解才能拿到body中的值,@requestparam能取到的值,后者也能取,
25.
< context:component-scan base-package = “” />这个标签包含了context:annotation-config/,有前者可以不要后者,另外前者属use-default-filters="false"设置为false时可不按base-package设置的路径扫描注解,<context:component-scan base-package=“com.tan” use-default-filters=“false”>
<context:include-filter type=“regex” expression=“com.tan."/>//添加指定路径扫描
</context:component-scan>
26.<context:exclude-filter type=“regex” expression=".model.
”/>这个是跟上面相反,排除某个扫描路径