Spring MVC 学习

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&这样形式的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值