1. 通常情况下,一个Servlet类只负责处理一个请求,若项目中有成百上千个请求需要处理,就需要有成百上千个Servlet类,这样会使得项目中Servlet类的个数暴增;
2. 在Servlet3.0版本之前,每一个Servlet都需要在web.xml文件中至少做八行配置信息,配置内容多且繁琐。当Servlet特别多时,web.xml配置量太多,不利于团队开发;
3. 当通过客户端提交参数到服务器,通过Servlet进行接收时,无论数据本身是什么格式,在Servlet中一律按照字符串进行接收,后期需要进行类型转换,复杂类型还需要特殊处理,特别麻烦!
4. servlet具有容器依赖性,必须放在服务器中运行,不利于单元测试;
…
Springmvc是spring框架的一个模块,spring和springmvc无需中间整合层整合
Springmvc是一个基于mvc的web框架
其中整个过程中需要开发人员编写的部分有 Controller、Service、Dao、View;
当项目中引入springmvc框架后,所有的请求流转将由springmvc进行控制,当客户端发送的请求中包含数据(也就是请求参数)时,那么该如何在controller层获取这些参数呢?
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
}]