1.@RequestMapping映射请求URL、method、params、headers
Params和headers支持简单的表达式
Param1
!param1
Param1!=value1
{“param1=value”,”params2”}
@RequestMapping(value=”test”,method=request.post,params={“username”,”age!=10”},headers={Accept-Language:zn-CH})
2.@PathVariable映射URL绑定的占位符
@RequestMapping(“/delete/{id})
Public String delete(@PathVariable(“id” Integer id){
UserDao.delete(id);
}
3.Rest风格的URL以CURD为例
/order/1 HTTP GET :得到 id = 1 的 order – get?id=
/order/1 HTTP DELETE:删除 id = 1的 order delete? id=
/order/1 HTTP PUT:更新id = 1的 order – update? id=
/order HTTP POST:新增 order
在浏览器的表单里只支持get、Post
如何发送PUT和DELETE请求
- 需要在web.xml中配置HiddenHttpMethodFilter
<filter>
<filter-name>HiddenHttpMethodFilter </filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter </filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter </filter-name>
<url-pattern>/* <url-pattern>
</filter-mapping>
- 需要发送post请求
<a href=”springmvc11/testRest”>Testhds</a>
- 在 发送post请求时携带一个name=”_method”的隐藏域,值为delete或者put.reff
<form action=”springmvc11/testRest” method=“post”>
<input type=”hidden” name=”_method” value=”delete”/>
<input type=”submit” value=”testRest delete”/>
</from>
@ParthVariable进行注解,获得参数
例子:
利用RequestParam进行传参
@requestMapping(value=”\testRequestParam”)
Public String testRequestParam(@RequestParam(value=”Accept-Language”) string al)
{
System.out.println(“Accept-Language”+al);
Return success;
}
通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中
@requestMapping(value=”\testRequestParam”)
Public String testRequestParam(@RequestHeader (value=”username”,required=false) string user, @RequestParam(value=”age”) int age)
{
System.out.println(“username”+ user+”age”+age);
Return success;
}
1.使用 @CookieValue 绑定请求中的 Cookie 值@ CookieValue(value=”sessionId”),string session
2.SpingMVC会按参数请求名和POJO属性名进行自动匹配,自动为该对象填充属性值,支持级联属性,如DEPT.deptID
3.配置直接可以转发的页面,而无须再经过Handler的方法
<mvc:view-controller path=”/success” view-name=”success” />
在实际开发中通常都需要配置mvc:annotation-drivern 标签
<mvc:annotation-driven></ mvc:annotation-driven>
<mvc:default-servlet-handler/>
配置启动SpringIOC 容器的Listener,nned for ContextLoaderListenner
<context:component-scan base-package=”com.atiguigu.spingmvc”>
<context-param>
<param-name>contextConfigLocation </param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
若Spring的IOC容器和SpringMVC的IOC容器扫描的包有重合的部分,就会导致bean会重复执行
解决:Spring的ioc容器扫描包和SpringMVC的IOC容器扫描没有重合部分
使用exclude-filter和include-filter子节点来规定只能扫描的注解。
SpringMVC的IOC容器中的bean可以引用Spring IOC容器中的bean,反之,Spring IOC容器中的bean却不能引用SpringMVC中的bean
架构
1.用户请求
2.前端控制器 dispatcherservlet ,用户请求相应
3.处理映射器,HandlerMapping 根据URL,查找相应的处理器,返回执行链HandlerExecutionChain{ HandlerInterceptor 1 HandlerInterceptor2 拦截器}
处理器适配器HandlerAdapter,去处理Handler,(类似于用电的变压器)
4.后台处理器 handler处理器 ,即controller,类似于servlet
5.返回ModelAndView,
6.视图解析器,解决逻辑视图,返回物理视图,进行视图渲染(jsp,freemarker,excel,pdf)
- 发起请求,到前端控制器DispatcherServlet
- 前端控制器请求 HandlerMapping 查找Handler,可以根据xml配置,注解进行查找
- 处理器映射器HandlerMapping向前端控制器返回Handler
- 前端控制器调用处理器适配器去执行Handler
- 处理器适配器去执行Handler
- Handler向适配器返回ModelAndView
- 处理器适配器向前端控制器返回ModelAndView, ModelAndView是springMVC框架的一个底层对象,包括Model和View
- 前台控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图jsp
- 视图解析器 向前端控制器返回view
- 前台控制器进行视图渲染,将模型数据(在ModelAndView对象中)填充到 request域
- 响应结果
组件
- 前端控制器DispatcherServlet,作用接收请求,响应结果,相当于转发器,没有业务逻辑
- 处理器映射器HandlerMapping,根据请求得url查找Handler(不需要开发)
- 处理器适配器HandlerAdapter,按规则 执行Handler
- 处理器Handler(需要开发)
- 视图解析器ViewResolver(不需要开发)
进行视图解析,根据逻辑视图名解析成真正得视图view
- 视图View(需要开发)
View一个接口,实现支持不同得View类型(jsp\freemarker\pdf)