初识SpringMVC

一、Servlet的缺点

 1. 通常情况下,一个Servlet类只负责处理一个请求,若项目中有成百上千个请求需要处理,就需要有成百上千个Servlet类,这样会使得项目中Servlet类的个数暴增;
 2. 在Servlet3.0版本之前,每一个Servlet都需要在web.xml文件中至少做八行配置信息,配置内容多且繁琐。当Servlet特别多时,web.xml配置量太多,不利于团队开发;
 3. 当通过客户端提交参数到服务器,通过Servlet进行接收时,无论数据本身是什么格式,在Servlet中一律按照字符串进行接收,后期需要进行类型转换,复杂类型还需要特殊处理,特别麻烦!
 4. servlet具有容器依赖性,必须放在服务器中运行,不利于单元测试;
  …

二、SpringMVC简介

  Springmvc是spring框架的一个模块,spring和springmvc无需中间整合层整合
  Springmvc是一个基于mvc的web框架

三、springmvc执行原理

springmvc执行原理

  1. 用户发送请求 至 前端控制器(DispatcherServlet);
    提示:DispatcherServlet的作用:接收请求,调用其它组件处理请求,响应结果,相当于转发器、中央处理器,是整个流程控制的中心
  2. 前端控制器(DispatcherServlet)收到请求后调用处理器映射器(HandlerMapping)
    处理器映射器(HandlerMapping)找到具体的Controller(可以根据xml配置、注解进行查找),并将Controller返回给DispatcherServlet;
  3. 前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)。处理器适配器经过适配调用具体的Controller;(Controller–> service --> Dao --> 数据库)
    Controller执行完成后返回ModelAndView,
    提示:Model(模型数据,即Controller处理的结果,Map) View(逻辑视图名,即负责展示结果的JSP页面的名字)
    处理器适配器(HandlerAdapter)将controller执行的结果(ModelAndView)返回给前端控制器(DispatcherServlet);
  4. 前端控制器(DispatcherServlet)将执行的结果(ModelAndView)传给视图解析器(ViewReslover)
    视图解析器(ViewReslover)根据View(逻辑视图名)解析后返回具体JSP页面
  5. 前端控制器(DispatcherServlet)根据Model对View进行渲染(即将模型数据填充至视图中);
    前端控制器(DispatcherServlet)将填充了数据的网页响应给用户。

其中整个过程中需要开发人员编写的部分有 Controller、Service、Dao、View;

四、springmvc参数绑定

  当项目中引入springmvc框架后,所有的请求流转将由springmvc进行控制,当客户端发送的请求中包含数据(也就是请求参数)时,那么该如何在controller层获取这些参数呢?
  springmvc会自动的将请求中包含的参数和方法的参数进行匹配,也就是说只要保证,请求中的参数名称和方法中的参数名称相对应(另,参数的格式也要正确),在方法中就可以使用这些参数—即请求中的参数。

五、springmvc响应数据

1.Model的使用
当请求发起访问Controller中的方法时,可以通过参数声明,在方法内使用Model。

@RequestMapping("/doorList")
public String doorList(Model model){}

Model对象实际上是一个Map集合,例如:往model中添加一个属性

model.addAttribute(String name, Object value); 

其中,addAttribute方法会将属性保存到request域中,再通过转发将属性数据带到相应的JSP中,通过${}取出并显示。
示例,往Model中添加属性:

@RequestMapping("/testModel")
public String testModel(Model model){
	/* 往Model添加属性 */
	model.addAttribute("name", "刘德华");
	model.addAttribute("age", 20);
	return "home";
}

在home.jsp中取出属性并显示:

<body>
	<h1>hello springmvc~~~</h1>
	${ name } <br/>
	${ age }
</body>

2.返回JSON数据
  JSON(JavaScript Object Notation)是一种JS提供的轻量级的数据交换格式。JSON在项目开发中是一种非常流行的数据交换格式。例如:在JS中可以通过下面的形式,声明一个person对象。

var person = {	
	"name" : "张飞", 
	"age" : 18, 
	"friends" :["关羽", "刘备"],
	"sayHi" : function(){ alert("person.sayHi()..") }
};

可以通过person对象访问其中的属性或方法:

person.name;		// 张飞
person.age;		// 18
person.friends;	// ["关羽", "刘备"]
person.sayHi();	// 弹框提示 person.sayHi()..

  上面是JS中声明对象的一种常用方式,也是JSON的格式。
  由于JSON格式简单, 并且可以通过JS非常方便的访问JSON中的数据。因此,在服务器响应时,经常会返回一个JSON数据:

@RequestMapping("/testJson")
@ResponseBody
public List<User> testJson(){
	//模拟查询所有用户,将所有用户信息封装到List<User>集合中
	List<User> list = new ArrayList();
	list.add( new User("张三", 18) );
	list.add( new User("李四", 20) );
	list.add( new User("王五", 22) );
	
	//将所有用户的List<User>集合以JSON格式响应
	return list;
}

返回的结果为:

[{
	"name": "张三",
	"age": 18
}, {
	"name": "李四",
	"age": 20
}, {
	"name": "王五",
	"age": 22
}]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值