Spring MVC
一、优势
二、spring处理流程
三、springmvc架构
架构流程:
1、用户发送请求至前端控制器Dispat cherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5、执行处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、ViewReslover解析后返回具体View
10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户
四、springmvc配置
1、配置controller扫描,让spring对页面控制层controller进行管理。
在springmvc.xml中
<beans>
<!--配置controller扫描包-->
<context:conponent-scan base-package="com.baidu.springvc.controller"/>
</beans>
2、配置前端控制器--->调用其他组件处理用户的请求
配置springMVC的前端控制器DispatcherServlet
在web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!--配置springMVC前置控制器DispatcherServlet-->
<!--拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--指定springmvc配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!--设置URL中以action为结尾的请求进入springmvc。-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
3、配置处理器映射器-->根据用户url请求找到映射器
@RequestMapping:定义请求url到处理器功能方法的映射
在springmvc.xml中
//对类中标记了@RequestMapping的方法进行映射
//根据@RequestMapping定义的url,匹配@RequestMapping标记的方法
<bean class=".........RequestMappingHandlerMapping"/>
4、配置处理器适配器-->对标记@RequestMapping的方法进行适配
在springmvc.xml中
<bean class=".........RequestMappingHandlerAdapter"/>
5、注解驱动-->代替配置处理器映射器和处理器适配器
在springmvc.xml中
<mvc:anotation-driven/>
6、视图解析器
在springmvc.xml中
<bean class=".........InternalResourceViewResolver">
<!--配置逻辑试图的前缀-->
<property name="prefix" value="/WEB-INF/jsp"/>
<!--配置逻辑试图的后缀-->
<property name="suffix" value=".jsp"/>
</bean>
逻辑视图名需要在controller中返回ModelAndView指定
jsp物理地址:前缀+逻辑视图名+后缀
五、controller
ItemController是一个普通的java类,不需要实现任何接口。
需要在类上添加@Controller注解,把Controller交由Spring管理
在方法上面添加@RequestMapping注解,里面指定请求的url。 其中“.action'可以加也可以不加。
@Controller
public class ItemController {
// @RequestMapping:里面放的是请求的url,和用户请求的url进行匹配
// action可以写也可以不写
@RequestMapping("/itemList.action")
public ModelAndView queryItemList() {
//创建页面需要显示的商品数据
List<Item> list = new ArrayList<>();
list.add(new Item(1, "1华为荣耀8",2399, new Date(),"质量好! 1"));
list add(new Item(2, "2华为荣耀8",2399, new Date(),"质量好! 2"));
//创建ModelAndView,用来存放数据和视图
ModelAndView modelAndView = new ModelAndView();
//设置数据到模型中
modelAndView. addobject("list", list);
//设置视图jsp,需要设置视图的物理地址
//modelAndView. setViewName(" /WEB- INF /jsp/ itemList.jsp");
//配置视图解析器前缀和后缀后
//modelAndView. setViewName(" itemList");
return modelAndView;}}
}
访问:localhost:8080/DispatcherServlet/itemList .action
六、整合mybatis
Dao层:
1、SqlMapConfig.xml, 空文件即可,但是需要文件头。
2、applicationContext-dao.xml
a) 数据库连接池
b) SqISessionFactory 对象,需要spring和mybatis整合包下的。
c)配置mapper文件扫描器。
Service层:
1、applicationContext-service.xml 包扫描器,扫描@service注解的类。
2、applicationContext- trans.xml配置事务。
Controller层:
1、Springmvc.xml
a) 包扫描器,扫描@Controller注解的类。
b)配置注解驱动
c)配置视图解析器
Web.xml文件:
a) 配置spring
b) 配置前端控制器。
七、案例
1、service接口
public interface IntemService{
List<Item> queryItemList();
}
2、service实现类
@Service
public class IntemServiceImpl extends IntemService{
@Autowired
private ItemMapper itemMapper;
@Override
List<Item> queryItemList(){
List<Item> list=this.itemMapper.query(null);
return list;
}
}
3、controller
@Controller
public class ItemController{
@Autowired
private IntemService intemService;
@RequestMapping("/itemList")
public ModelAndView queryItemList(){
List<Item> list=this.intemService.queryItemList();
ModelAndView modelAndView=new ModelAndView();
modelAndView.addObject("itemList",list);
modelAndView.setViewName("")
return modelAndView;
}
}
4、JSP里配置itemList.action调用controller
八、参数绑定
1、默认支持的参数类型
处理器形参中添加如下类型的参数处理适配器会默认识别并进行赋值。
HttpServletRequest
HttpServletResponse
HttpSession
使用Model和ModelMap来向页面传送数据
2、绑定简单类型
当请求的参数名称和处理器形参名称一.致时会将请求参数与形参进行绑定。这样,从Request取参数的方法就可以进一步简化。
(参数类型推荐使用包装类)
可是用@RequestParam绑定简单类型
3、绑定pojo类型
pojo对象中的属性名和表单中input的name属性一 致。
4、绑定包装pojo
5、自定义参数绑定
标记的方法进行适配,并对方法中的形参进行参数绑定。可以在springmvc处理器适配器上自定义转换器Converter进行参数绑定。
6、高级参数绑定
数组、List
九、@RequestMapping
可以定义不同的处理器映射规则:
1、URL路径映射;
2、添加在类上面,限制此类上所以方法的请求url以前缀打头;
3、请求方法限定:限定GET/POST
十、Controller中方法返回值
1、controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view;
2、返回void;在Controller中的方法的形参指定Request、Response指定响应页面;
3、返回字符串:返回字符串指定逻辑视图名,通过视图解析器解析为物理视图地址。
十一、异常处理器
系统的dao、service、controller 出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:
十、JSON数据交互
1、@RequestBody
@ RequestBody注解实现接收http 清求的json数据,将json 数据转换为java 対象进行绑定
2、@ResponseBody
@ResponseBody注解实现将Controller方法返回java对象转换为json响应给客户端。
3、例子
@RequestMapping("testJson")
//@ResponseBody
public @ResponseBody Item testJson(@RequestBody Item item) {
return item;
]
十二、拦截器
SpringWebMVC的处理器拦截器类似于Servlet开发中的过滤器Fiter,用于对处理器进行预处理和后处理。