SpringMVC核⼼知识点梳理
1.1 Springmvc是什么?
SpringMvc是spring的⼀个模块,基于MVC的⼀个框架 ⽆需中间整合层来整合 。
1.2 框架结构
1.3 架构流程
1、⽤户发送请求⾄前端控制器DispatcherServlet
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进⾏渲染视图(即将模型数据填充⾄视图中)jsp用什么前端框架
11、DispatcherServlet响应⽤户
1.4 组件说明
DispatcherServlet:前端控制器
⽤户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中⼼,由它调⽤其它组件处理⽤户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
HandlerMapping:处理器映射器
HandlerMapping负责根据⽤户请求url到Handler即处理器,springmvc提供了不同的映射器实现不同的映射⽅式,例如:配置⽂件⽅式,实现接⼝⽅式,注解⽅式等。
Handler:处理器
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的⽤户请求进⾏处理。
由于Handler涉及到具体的⽤户业务请求,所以⼀般情况需要程序员根据业务需求开发Handler。
HandlAdapter:处理器适配器
通过HandlerAdapter对处理器进⾏执⾏,这是适配器模式的应⽤,通过扩展适配器可以对更多类型的处理器进⾏执⾏。
ViewResolver:视图解析器
View Resolver负责将处理结果⽣成View视图,View Resolver⾸先根据逻辑视图名解析成物理视图名即具体的页⾯地址,再⽣成View视图对象,最后对View进⾏渲染将处理结果通过页⾯展⽰给⽤户。
View:视图
springmvc框架提供了很多的View视图类型的⽀持,包括:jstlView、freemarkerView、pdfView等。我们最常⽤的视图就是jsp。
⼀般情况下需要通过页⾯标签或页⾯模版技术将模型数据通过页⾯展⽰给⽤户,需要由程序员根据业务需求开发具体的页⾯。
说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三⼤组件。
需要⽤户开发的组件有handler、view
1.5 常⽤配置简要说明
组件扫描器
使⽤context:component-scan⾃动扫描标记@Controller的控制器类,
在l配置⽂件中配置如下:
<!-- 配置controller扫描包,多个包之间⽤,分隔 -->
<context:component-scan base-package="cn.ller" />
注解驱动
可以在l配置⽂件中使⽤mvc:annotation-driven替代注解处理器和适配器的配置。
<!-- 注解驱动 -->
<mvc:annotation-driven />
视图解析器
在l配置⽂件中配置如下:
<!-- 配置视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置逻辑视图的前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 配置逻辑视图的后缀 -->
<property name="suffix" value=".jsp" />
</bean>
1.6 参数绑定
页⾯点击修改按钮,发起请求
需要从请求的参数中把请求的id取出来,想获得Request对象只需要在Controller⽅法的形参中添加⼀个参数即可。Springmvc框架会⾃动把Request对象传递给⽅法。
使⽤@RequestParam,如果提交的参数很多,或者提交的表单中的内容很多的时候,可以使⽤简单类型接受数据,也可以使⽤pojo接收数据。
要求:pojo对象中的属性名和表单中input的name属性⼀致。
@RequestMapping("/itemEdit")
public ModelAndView queryItemById(HttpServletRequest request) {
// 从request中获取请求参数
String strId = Parameter("id");
Integer id = Integer.valueOf(strId);
// 根据id查询商品数据
Item item = this.itemService.queryItemById(id);
// 把结果传递给页⾯
ModelAndView modelAndView = new ModelAndView();
// 把商品数据放在模型中
modelAndView.addObject("item", item);
// 设置逻辑视图
modelAndView.setViewName("itemEdit");
return modelAndView;
}
/**
使⽤@RequestParam常⽤于处理简单类型的绑定。
value:参数名字,即⼊参的请求参数名字,如value=“itemId”表⽰请求的参数区中的名字为itemId的参数的值将传⼊
required:是否必须,默认是true,表⽰请求中⼀定要有相应的参数,否则将报错
TTP Status 400 - Required Integer parameter 'XXXX' is not present
defaultValue:默认值,表⽰如果请求中没有同名参数时的默认值
**/
@RequestMapping("/itemEdit")
public String queryItemById(@RequestParam(value = "itemId", required = true, defaultValue = "1") Integer id,
ModelMap modelMap) {
// 根据id查询商品数据
Item item = this.itemService.queryItemById(id);
// 把商品数据放在模型中
modelMap.addAttribute("item", item);
return "itemEdit";
}
默认⽀持的参数类型
处理器形参中添加如下类型的参数处理适配器会默认识别并进⾏赋值。
HttpServletRequest–>通过request对象获取请求信息
HttpServletResponse–>通过response处理响应信息
HttpSession–>通过session对象得到session中存放的对象
1.6.1 Model/ModelMap
如果使⽤Model则可以不使⽤ModelAndView对象,Model对象可以向页⾯传递数据,View对象则可以使⽤String返回值替代。
@RequestMapping("/itemEdit")
public String queryItemById(HttpServletRequest request, Model model) {
// 从request中获取请求参数
String strId = Parameter("id");
Integer id = Integer.valueOf(strId);
// 根据id查询商品数据
Item item = this.itemService.queryItemById(id);
// 把结果传递给页⾯
// 把商品数据放在模型中
model.addAttribute("item", item);
return "itemEdit";
}
1.6.2 ⾃定义Converter
/
/Converter<S, T>
//S:source,需要转换的源的类型
//T:target,需要转换的⽬标类型
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
try {
// 把字符串转换为⽇期类型
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
Date date = simpleDateFormat.parse(source);
return date;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 如果转换异常则返回空
return null;
}
}
配置Converter
!-- 配置注解驱动 -->
<!-- 如果配置此标签,可以不⽤配置... -->
<mvc:annotation-driven conversion-service="conversionService" />
<!-- 转换器配置 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters">
<set>
<bean class="cn.verter.DateConverter" />
</set>
</property>
</bean>
1.6.3 绑定数组
修改itemList.jsp页⾯,增加多选框,提交url是queryItem.action
<form action="${tPath }/queryItem.action" method="post">
查询条件:
<table width="100%" border=1>
<tr>
<td>商品id<input type="text" name="item.id" /></td>
<td>商品名称<input type="text" name="item.name" /></td>
<td><input type="submit" value="查询"/></td>
</tr>
</table>
商品列表:
<table width="100%" border=1>
<tr>
<td>选择</td>
<td>商品名称</td>
<td>⽣产⽇期</td>
</tr>
<c:forEach items="${itemList }" var="item">
<tr>
<td><input type="checkbox" name="ids" value="${item.id}"/></td>
<td>${item.name }</td>
<td><fmt:formatDate value="${atetime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
</tr>
</c:forEach>
</table>
</form>
Controller⽅法中可以⽤String[]接收,或者pojo的String[]属性接收。两种⽅式任选其⼀即可。
@RequestMapping("queryItem")
public String queryItem(QueryVo queryVo, Integer[] ids) {
System.out.Item().getId());
System.out.Item().getName());
System.out.Ids().length);
System.out.println(ids.length);
return "success";
}
1.7 @RequestMapping
1.7.1 URL路径映射
@RequestMapping(value=“item”)或@RequestMapping("/item")
value的值是数组,可以将多个url映射到同⼀个⽅法
/**
* 查询商品列表
* @return
*/
@RequestMapping(value = { "itemList", "itemListAll" })
public ModelAndView queryItemList() {
/
/ 查询商品数据
List<Item> list = this.itemService.queryItemList();
// 创建ModelAndView,设置逻辑视图名
ModelAndView mv = new ModelAndView("itemList");
// 把商品数据放到模型中
mv.addObject("itemList", list);
return mv;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论