Springmvc:
springmvc的注解:
使用注解的方式,首先在处理器的类上写上@controller,在方法写上@RequestMapping,参数为映射地址
@Controller
public class DemoController {
//请求映射
//请求:http://localhost:8088/abc.action
@RequestMapping("abc")
public ModelAndView test(){
ModelAndView mv = new ModelAndView();
mv.setViewName("hello");
mv.addObject("msg", "我的第一个SpringMVC应用!");
return mv;
}
}
然后,使用在springmvc-servlet.xml中写上扫描包的标签,和定义处理器类
<- 将controller加入到springmvc容器中
<be!-an class="cn.itcast.springmvc.controller.DemoController"/>-->
<!-- 定义扫描包 将cn.itcast.springmvc.controller所有标注有@controller的类加入到springmvc容器中 -->
<context:component-scan base-package="cn.itcast.springmvc.controller"/>
<mvc:annotation-driven />
注解的总结:
1、注解驱动
2、配置controller的扫描
3、配置视图解析器
4、创建视图
各注解的说明:
@RequestMapping映射请求:
有三种映射方式:
①、标准的URL映射
在方法上面写上@RequestMapping(“xxx”)或者@RequestMapping(value=“xxx”)
②、ant的匹配映射
在方法上面写上@RequestMapping(“/test/*/xxx”)。
③、占位符的映射
在方法上面写上@RequestMapping(“/text/${xxx}/xxx”)。使用占位符的映射,可以通过@pathVariable(“xxx”)来得到占位符的信息。
在@RequestMapping中的请求方式是有限制的。
通常的限制是GET、POST这两种方式。可以通过@RequestMapping的Method参数来设置。
在@RequestMapping中也可以限制参数的携带。
可以通过@RequestMapping的params参数来设置。
参数的限制规则如下:
params=“userId” 请求参数中必须包含userId
params=“!userId” 请求参数中不能包含userId
params=“userId!=1” 请求参数必须包含userId,但其值不能为1
params={“userId”,“name”} 必须包含userId和name参数;区别与value 的多路径映射的或
@PathVariable获取参数:
在方法的形参可以带上@PathVariable来获取参数。
如:
public void demo(@PathVariable(“userId”)String userId);
@RequestParam请求参数:
@RequestParam有三个参数:
Value:参数名 ;
required:是否为必须,默认为true,表示请求参数中必须包含该参数,如果不包含抛出异常 ;
DefaultValue:默认的参数值,如果设置了该值自动将required设置为false,如果参数中没有包含该参数则使用默认值。
@CookieValuecookie值:
@cookieValue可以绑定cookie的值,和@RequestParam一样有三个参数和相同的功能。
@RequestBody请求正文:
主要的作用是把请求的json字符串转化为pojo对象。
视图解析器:
包好转发和重定向。
视图解析器默认使用的jstl解析器,除了可以直接返回视图的名称外,还可以返回具有forward:或redirect:前缀修饰的视图名称分别可以转发或重定向到特定的URL。
Forward:
方式一:当转发的过程中需要附带数据时,返回ModelAndView。
@RequestMapping("/demo10")
public ModelAndView demo10(){
ModelAndView mv = new ModelAndView("forward:/demo9.action");
return mv;
}
方式二:当转发的过程中不要附带数据,只需要返回forward:+URL路径组成的视图名称字符串即可。
@RequestMapping("/demo11")
public String demo11(){
return "forward:/demo9.action";
}
Redirect:重定向
方式一:
当重定向的过程中需要附带数据时,返回的ModelAndView,就是在URL的地址栏后面添加参数,如果是中文需要解码
@RequestMapping("demo12")
public ModelAndView demo12(){
ModelAndView mv = new ModelAndView("redirect:demo9.action");
try {
mv.addObject("requestType",URLEncoder.encode("重定向方式", "utf-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mv;
}
方式二:
当重定向不需要数据,只需要返回redirect:+URL地址即可。
@RequestMapping("demo13")
public String demo13(){
return "redirect:demo9.action";
}
JSON的转换:
@RequestBody:
可以将请求的json字符串转化为POJO对象,用在方法的形参前面进行注解。
将请求的JSON字符串转化为POJO对象,需要使用json的转换工具jackson。
1) 导入jackson依赖;
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
2) 编写后台接收方法;
@RequestMapping("demo14")
public ModelAndView demo14(@RequestBody User user){
ModelAndView mv = new ModelAndView("show");
mv.addObject("msg", user);
return mv;
}
3) 请求(模拟或者ajax都可以)
测试json数据:
{ "id":"1","name":"黑马程序员","age":"40"}
【注意】请求的内容类型Content-Type必须为:application/json
@ResponseBody
是把POJO对象转换为json,在页面输出。
也是在方法前写上@ResponseBody。标记了@REsponseBody:
①、表示不做页面跳转 ②、默认转化方式,转化为json
1) 导入jackson依赖;
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
1) 编写后台方法,记得在方法前面加入@ResponseBody并返回具体对象即可;
@RequestMapping("demo15")
@ResponseBody
public List<User> demo15(){
List<User> list = new ArrayList<User>();
for (long i = 0; i <=10; i++) {
User user = new User();
user.setId(i);
user.setName("黑马程序员"+i);
user.setBirthday(new Date());
list.add(user);
}
return list;
}