博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC(一)
阅读量:6786 次
发布时间:2019-06-26

本文共 4510 字,大约阅读时间需要 15 分钟。

hot3.png

SpringMVC与Struts2对比

对比项目  

SrpingMVC

Struts2

优势

国内市场情况                                                                            

有大量用户,一般新项目启动都会选用springmvc                                                                           

有部分老用户,老项目组,由于习惯了,一直在使用。                                                                 

国内情况,springmvc的使用率已经超过Struts2

框架入口

基于servlet

基于filter

本质上没太大优势之分,只是配置方式不一样

框架设计思想

控制器基于方法级别的拦截,处理器设计为单实例

控制器基于类级别的拦截, 处理器设计为多实例

由于设计本身原因,造成了Struts2,通常来讲只能设计为多实例模式,相比于springmvc设计为单实例模式,Struts2会消耗更多的服务器内存。

参数传递

参数通过方法入参传递

参数通过类的成员变量传递

Struts2通过成员变量传递参数,导致了参数线程不安全,有可能引发并发的问题。

与spring整合

与spring同一家公司,可以与spring无缝整合

需要整合包

Springmvc可以更轻松与spring整合

SpringMVC入门 

创建Dynamic web项目

TestController类

@Controllerpublic class HelloController {	@RequestMapping("hello")	public ModelAndView hello(){		System.out.println("hello springmvc....");		//创建ModelAndView对象		ModelAndView mav = new ModelAndView();		//设置模型数据		mav.addObject("msg", "hello springmvc...");		//设置视图名字		mav.setViewName("/WEB-INF/jsp/hello.jsp");		return mav;	}}

JSP页面

213743_Xvh4_3669094.png

配置springmvc.xml核心配置文件

在web.xml中配置前端控制器

 

springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
springmvc
*.action

启动项目通过浏览器测试

http://localhost:8080/项目名/hello.action

SpringMVC架构

 框架默认加载组件

214511_PGPJ_3669094.png

214527_LDCu_3669094.png

处理器映射器与处理器适配器

从spring3.1版本开始,废除了DefaultAnnotationHandlerMapping的使用,推荐使用RequestMappingHandlerMapping完成注解式处理器映射。

从spring3.1版本开始,废除了AnnotationMethodHandlerAdapter的使用,推荐使用RequestMappingHandlerAdapter完成注解式处理器适配。

映射器与适配器必需配套使用,如果映射器使用了推荐的RequestMappingHandlerMapping,适配器也必需使用推荐的RequestMappingHandlerAdapter。

注解驱动

视图解析器

214837_6PSm_3669094.png

 springMVC架构

214919_TfUv_3669094.png

SpringMVC与Mybatis整合

 思路

Dao层:

1、SqlMapConfig.xml,空文件即可。需要文件头。

2、applicationContext-dao.xml。

a)         数据库连接池

b)         SqlSessionFactory对象,需要spring和mybatis整合包下的。

c)         配置mapper文件扫描器。

 

Service层:

1、applicationContext-service.xml包扫描器,扫描@service注解的类。

2、applicationContext-trans.xml配置事务。

 

Controller层:

Springmvc.xml

1、包扫描器,扫描@Controller注解的类。

2、配置注解驱动。

3、视图解析器

 

Web.xml

1.  配置spring容量监听器

2. 配置前端控制器

参数绑定

/**	 * 演示springmvc默认参数的传递	 * 跳转修改商品信息页面	 * @return	 */	@RequestMapping("itemEdit")	public ModelAndView itemEdit(HttpServletRequest request,HttpServletResponse response,HttpSession session){		ModelAndView mav = new ModelAndView();				//request获取参数		String id = request.getParameter("id");		System.out.println("id为:" + id);		//其它对象输出		System.out.println("response对象:" + response);		System.out.println("session对象:" + session);				//查询商品信息		Item item = itemServices.getItemById(new Integer(id));		//设置商品数据返回页面		mav.addObject("item", item);		//设置视图名称		mav.setViewName("itemEdit");		return mav;	}

简单参数绑定

/**	 * 演示简单参数传递	 * 跳转修改商品信息页面	 * @RequestParam用法:入参名字与方法名参数名不一致时使用{	 * 	value:传入的参数名,required:是否必填,defaultValue:默认值	 * }	 * 	 */	@RequestMapping("itemEdit")	public ModelAndView itemEdit(@RequestParam(value="id",required=true,defaultValue="1")Integer ids){		ModelAndView mav = new ModelAndView();				//查询商品信息		Item item = itemServices.getItemById(ids);		//设置商品数据返回页面		mav.addObject("item", item);		//设置视图名称		mav.setViewName("itemEdit");		return mav;	}

Model/ModelMap

/**	 * 演示返回String,通过Model/ModelMap返回数据模型	 * 跳转修改商品信息页面	 * @param id	 * @return	 */	@RequestMapping("itemEdit")	public String itemEdit(@RequestParam("id")Integer ids,Model m,ModelMap model){				//查询商品信息		Item item = itemServices.getItemById(ids);		//通过Model把商品数据返回页面		model.addAttribute("item", item);		//返回String视图名字		return "itemEdit";	}

绑定pojo对象

要点:表单提交的name属性必需与pojo的属性名称一致。

/**	 * 演示传递pojo参数	 * 更新商品信息	 * @return	 */	@RequestMapping("updateItem")	public String updateItem(Item item,Model model){		//更新商品		itemServices.update(item);		//返回商品模型		model.addAttribute("item", item);		//返回担任提示		model.addAttribute("msg", "修改商品成功");		//返回修改商品页面		return "itemEdit";	}

绑定包装的pojo

要点:通过点(.)传递属性。

215710_NApU_3669094.png

/**	 * 演示包装pojo传递	 * @param vo	 * @return	 */	@RequestMapping("queryItem")	public String queryItem(QueryVo vo){		//打印传入参数		System.out.println(vo);		//返回视图		return "itemList";	}

215808_DF8w_3669094.png

自定义转换器

/** * 日期转换器 * S:source 要转换的源类型 * T:目标,要转换成的数据类型 * @author Steven * */public class DateConvert implements Converter
{ @Override public Date convert(String source) { Date result = null; try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); result = sdf.parse(source); } catch (ParseException e) { e.printStackTrace(); } return result; }}

配置日期转换器

 

转载于:https://my.oschina.net/px828261/blog/1563429

你可能感兴趣的文章
玩转docker-镜像加速器
查看>>
C++ std::function 和 std::bind
查看>>
Linux 查找端口和该端口执行的命令和路径
查看>>
MFC 如何得到ListControl选中的项 ListControl选中一行
查看>>
mysql 查询注意事项
查看>>
Java集合总结
查看>>
不是人家炫耀,而是我们太挫,你为什么不努力
查看>>
线性代数--矩阵乘法
查看>>
【学习】一本概率论经典书籍《Introduction to Probability》(pdf和LaTeX源代码下载)...
查看>>
redis学习篇(七)-----高级特性之安全篇
查看>>
轻松搞定面试中的二叉树题目
查看>>
用MySQL Slow Log解决MySQL CPU占用高的问题
查看>>
php+smarty分页类
查看>>
oracle 用户密码过期-ORA-28001: 口令已经失效
查看>>
Java 实现 Hook 对鼠标键盘监听
查看>>
非常实用的Chrome插件之总结
查看>>
你应该知道的7种回归方法
查看>>
grunt简单的入门
查看>>
关于css浮动
查看>>
C Primer Plus 第2章 C语言概述
查看>>