1.Spring MVC 配置返回是基于注解的,@RequestMapping(value="/helloworld",method=RequestMethod.GET)
2.方法名可以随便起,但是最好别这样
3. 导入jar包,配置web.xml文件,配置SpringMVC-servlet.xml文件,这个文件后缀名必须是*-servlet.xml 格式,创建页面,发送请求的页面,和返回结果的页面, 配置springmvc的基于注解的
4.@Controller servlet springMVC struts2
@service @RequestMapping 映射
5.面试题: mysql:3306 orcale:1521 8080 端口号
6.hiddenhttpmethodfilter web.xml中配置i
HiddenHttpMethodFilter HiddenHttpMethodFilter
这个是转化method方法的名称的 将psot转化成put或者delete
在jsp中配置hidden变量 _method变量名
7.报错400 9成是jsp 前台和后台的参数不匹配
@RequestHeader 获取请求头
User-Agent
@CookieValue 获取jession
@PathVariable 获取参数 {占位符}
@RequestParams 获取参数
8.cookie存在 浏览器,session存在 服务器
9.SpringMVC 使用的是servlet的原生对象,request,response,session,write
10.ModelAndView将对象扔到前台 request.setAttribute(key,value); 并且能设置view
pojo 就是没有污染的对象
11.Model Map ModelMap 这三个都相等,一样的对象 BindingAwareModelMap 都是这个对象
将模型数据放到request中
* 这三个对象都有同一个子类,所以这三个对象是相同的
* 如果是开发时,用map 因为便于重构
* org.springframework.validation.support.BindingAwareModelMap
* 子类是这个对象
12.工作中用Map因为是用于工作中的重构
13.@sessionAttribute(value="user")这样用,就好 ,只能放类上面
14.五大常用的注解
@Service service层
@Autowarie 自动装配
@RequestMapping SpringMVC的注解 协同工作
@Component组件
@Controller 控制层 action层
@Repository dao层
@RequestParam获取前台传过来的值
@CookieValue获取cookie
@RequestHeader获取请求消息头
15.pojo 就是没有污染的 单纯的java对象
16. * 根据@RequestParam
* 1.她有三个参数
* 1.value = 前台传的属性名称
* 2.required 是否是必须的 , boolean值
* 3.defaultValue 如果一旦没有的话,就启用默认值,有就用前台传的值
17. * REST总结,
* 1.POST 不需要id form表单
* 2.put 和 delete 都需要先配置HiddenHttpMethodFilter 然后在配置 隐藏 input 也需要id
* 3.get 方法需要id
* 4.获取id时候都用的@PathVariable 标签
18.DispatcherServlet
配置这个在web.xml中配置
19.ModelAttribute required=false; 也就是在这个类中,所有方法都要调用 方法上有@ModelAttribute 注解的方法
1.源代码。 从数据库查,从前台获取,然后整合,update 完成
跟数据库查的对象有关系的话,就必须 map.put("user",user)
前面 (User user) 或者 @ModelAttribute("user") 一般不用写这个 直接写类和首字母小写的类名就行
springMVC 三段查找,第一段,map隐含域里找,第二段,在session里找,第三段,反射创建
20.想用国际化 那就先配置
JSTLView 比父类的功能更全
mvc:annotation-driven 很重要的配置 标签 自定义view视图
绕过coolenter ,就直接能解析视图
mvc:view controller 两个标签 穿越火线
21.view beanNameViewResolver 自定义的,配置进xml文件
22.自定义视图:自己定义首先( 记住 )得注册,实现View接口,添加组件 @Component
return "自定义的接口 首字母小写":
23.重定向 return "redirect:/1.jsp"; "forword:/1.jsp"
24.下午是REST的crud *****
优雅的风格,本来都是拦截js 的,加入这个标签 不让他拦截
rest的增删改查基于 一般都是注解,配置完DispatcherServlet
和 HiddenHttpMethods 还有这个<mvc:annotation-driven>
1.获取所有对象 ,get
2.增加 save ,需要在jsp页面提供一个对象,没对象的话没法往数据库里存,
3.修改 update 需要提供@modelAttribute 的方法,因为没有修改的值要保持原值,不是空,
@modelAttribute 这个方法是在每个方法前调用
4.delete 需要用js 因为删除不是表单的,所以需要用表单提交,利用js 保持 href 和action 关联
5.<mvc:default-servlet-handler/> 这个是处理第三方资源的,叫静态导入,没有这个,jquery是不好使的
25.数据绑定 ,databinder 对象,老大 *** 晚上练习 string 转化成 pojo对象
1.实现 implments Converter
1.先绑定,格式化,转化类型
2.注册用ConversionServiceFactoryBean
3.注册还得配置中引用 <mvc:annotation-driven自动注册的标签 conversion-service=""/> 引用自定义转化器
4.<list>
<ref bean="首字母小写">
</list>
5.400错误,转化和格式化 ,但是只有转化,然后报400错,
26.@initBinder 初始化,知道就好 ,返回值void 参数WebDataBinder ,对修改关闭 对新增开启
27.转化加格式化formatingConversionServiceFactoryBean,配置文件里加的
27.规范日期格式 @DateTimeFormat(partten="yyyy-MM-dd")指定格式 ,默认的为/
28.jsr303导入5个jar包, 在pojo属性里 添加@lastName @Email 在action里加 @valid
29.处理json 利用 HttpMssageConverter 底层的
@ResponseBody 这个放方法头里
是将内容或对象作为http响应正文返回
@RequestBody 这个是放参数里的
是将http请求正文插入正文中,修饰目标方法入参
一个是往前台页面正文加东西,一种是往后台传东西 在参数列表里写的@ 可以在方法头加,可以在参数里加
ResponseEntity<Byte[]> 下载所用的
30.LocalChangeInterceptor SessionResolve
运行流程是 interceptor 在 SessionResolve 之前
31.文件上传 CommonsMutipateResolver 默认在配置中没有装配 两个jar包
32.如果springMVC要 自定义拦截器必须实现 HandleInterceptor ***********
true 有后面false没有 视图渲染之前
拦截器运行流程 preHandle--> 业务方法 --> postHandle--> afterCompletion
afterCompletion 运行不运行 取决于 preHandle的true还是false?.
第一个first 拦截器return false,后面全挂
true false
1.第一个进入,preHandle 运行, 第二个方法挂了pre不运行, 业务方法不运行,
试图渲染不运行,after不运行,return,运行first的post,运行 first的after
33.@ExceptionHandler 处理异常的标签 全局统一报错页面
map 搬不了 exception
ModelAndView 可以搬 exception
@ControllorAdvice 在类上标记 业务方法标记.@ExceptionHandler(value={数组})
34.SpringMVC 运行流程
1.发送请求,被拦截,看是否有对应的映射 dispatcherServlet
2.有的话,进行获取一个HandlerExecutionChain链,MappedHandler
3.获取实际工作的HandlerAdpter
4.调用 preHandler
5.调用目标方法
6.调用postHandler,在进行视图渲染之前
7.进行视图渲染,看modelAndView 有没有异常
8.,有异常,到看有没有errorView, 到异常页面
9.最后调用AfterCompletion
35. jar 包 web.xml 以及spring配置文件
36.Spring SpringMVC 整合 bean 会被创建 两次 ,<context 标签 < context-exclub inclub > 还有一个use-default
1.配置 web.xml springmvc.xml spring.xml
2.context
3.一个容器IOC springmvc能找 spring spring无法找springmvc
38.SpringMVC 入口是servlet struts入口是filter
39.重中之重(*星号更是重点)
1.@RequestMapping @RequestParam @PathVariable @RequestHeader @CookieValue
2.ModelAndView 对象,可以直接返回这个对象,mv.add() 与 map一样的作用
3.Map Model ModelMap 三个数据模型的底层是一样的,都是BindingAwareModelMap 这三个对象相比较都是一样的
4.@ModelAttribute 修改对象时候用的,每个方法都会调用这个方法,在方法头上写,与struts2的model有异曲同工之效
5.***CRUD 的小例子 RESTFUL风格的
6.HttpMessageConverter 利用json向前台传送对象,后台用的注解是@ResponseBody 而在底层源代码中是HttpMessageConverter在发挥作用
7.**拦截器的运行,自定义拦截器的话,实现HandlerIntercepetor 接口,实现三个方法,preHandle,postHandle,afterCompletion,
第一个方法最先调用,return true 或者false, true继续向下进行,false,挂了,postHandle在进行试图渲染之前进行,afterCompletion 是方法都结束
他做清扫工作
8.两个自定义拦截器,true false 只打印三条语句, 而且,在实际调用方法之前是 1 2 3 调用方法 3 2 1 跟struts2一样
9.*****关于SpringMVC的运行流程
1.首先浏览器发送请求,被dispatcherServlet拦截,看是否有对应的映射,没有的话,报404
2.有的话,那么可以获取一个HandlerExecutionChain的链
3.获取实际工作的HandlerAdpter
4.拦截器工作 调用 preHandle
5.调用目标方法
6.调用postHandle方法,在视图渲染之前,渲染视图
7.看ModelAndView有没有异常,有异常的话转向error界面
8.没有异常,i转到正常显示界面
9.调用afterCompletion方法,进行收尾工作
10.整合Spring 和SpringMVC时候有三点重要
1.扫描包会扫描两次,性能会低
2.配置web.xml 配置Springmvc.xml, spring.xml
3.容器只能上层调用下层
11.@PathVariable 是从url里获取
@RequestParam 是从表单里获取,url ?xxx&xxxx&这样形式的