目录
SpringMVC注解_@RequestHeader、@CookieValue
SpringMVC注解_@SessionAttributes
SpringMVC处理响应_context域设置数据
context作用域表示在整个应用范围都有效。在SpringMVC中对 context作用域传值,只能使用ServletContext对象来实现。但是该 对象不能直接注入到方法参数中,需要通过HttpSession对象获取。
1、编写控制器方法
@RequestMapping("/c2/hello7") public String setContextModel(HttpSession session){ ServletContext servletContext = session.getServletContext(); servletContext.setAttribute("age",10); return "xiaotong"; }
2、编写jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java"%> <html> <head> <title>百战不败</title> </head> <body> <h1>你好!${requestScope.name}</h1> <h1>地址是!${sessionScope.address}</h1> <h1>年纪是!${applicationScope.age}</h1> </body> </html>
SpringMVC处理响应_请求转发&重定向
之前的案例,我们发现request域中的值可以传到jsp页面中,也就 是通过视图解析器跳转到视图的底层是请求转发。
如果我们跳转时不想使用视图解析器,可以使用原生 HttpServletRequest进行请求转发或HttpServletResponse进行重定向:
@RequestMapping("/c2/hello8")
public void myForward1(HttpServletRequest request, HttpServletResponse response)
throws Exception{
request.setAttribute("name","辛苦学堂");
// 请求转发
// request.getRequestDispatcher("/c2/hello9").forward(request,response);
// 原生重定向
response.sendRedirect("/c2/hello9");
}
@RequestMapping("/c2/hello9")
public void myForward2(HttpServletRequest request){
System.out.println("hello");
System.out.println(request.getAttribute("name"));
}
SpringMVC还提供了一种更简单的请求转发和重定向的写法:
@RequestMapping("/c2/hello10")
public String myForward3(HttpServletRequest request){
request.setAttribute("name","辛苦学堂");
// 请求转发
return "forward:/c2/hello9";
// 重定向
// return "redirect:/c2/hello9";
}
SpringMVC通过注解来实现控制器的功能,接下来我们详细学习 SpringMVC的常用注解:
SpringMVC的常用注解:
SpringMVC注解_@Controller
作用:标记控制器,将控制器交给Spring容器管理。
位置:类上方
SpringMVC注解_@RequestMapping
作用:给控制器方法设置请求路径
位置:方法或类上方。用于类上,表示类中的所有控制器方法都是 以该地址作为父路径。
属性:
1、value/path:请求路径
2、method:指定请求方式
3、params:规定必须发送的请求参数
4、headers:规定请求必须包含的请求头
@Controller
@RequestMapping("/c3")
public class MyController3 {
/*
访问路径为 /c3/annotation1
支持post和get请求
请求时必须带有age参数
请求时必须带有User-agent请求头
*/
@RequestMapping(path = "/annotation1",method =
{RequestMethod.GET,RequestMethod.POST},params = {"age"},headers = {"User-agent"})
public String annotation1(String username){
System.out.println(username);
return "xiaotong";
}
}
SpringMVC注解_@RequestParam
作用:在控制器方法中获取请求参数
位置:方法参数前
属性:
1、name:指定请求参数名称
2、defaultValue: 为参数设置默认值
3、required:设置是否是必须要传入的参数
/*
定义请求的参数名为username,默认值为sxt,不是必须的参数
*/
@RequestMapping("/annotation2")
public String annotation2(@RequestParam(name = "username",defaultValue = "txc",required =
false) String name){
System.out.println(name);
return "baizhan";
}
SpringMVC注解_@RequestHeader、@CookieValue
@RequestHeader
作用:在控制器方法中获取请求头数据
位置:方法参数前
@CookieValue
作用:在控制器方法中获取Cookie数据
位置:方法参数前
/*
获取User-Agent请求头
获取JSESSIONID的Cookie值
*/
@RequestMapping("/annotation3")
public String annotation3(@RequestHeader("User-Agent")
String userAgent, @CookieValue("JSESSIONID") String jSessionId){
System.out.println(userAgent);
System.out.println(jSessionId);
return "xiaotong";
}
SpringMVC注解_@SessionAttributes
作用:将Model模型中的数据存到session域中
位置:类上方
@Controller @RequestMapping("/c4") // 将模型中的name数据保存到session中 @SessionAttributes("name") public class MyController4 { @RequestMapping("/t1") public String t1(Model model){ // model中保存name数据 model.addAttribute("name","北京大乱斗"); return "xiaotong"; } @RequestMapping("/t2") public String t2(HttpSession session){ // 从session中获取name数据 System.out.println(session.getAttribute("name")); return "xiaotong"; } }
SpringMVC注解_@ModelAttribute
作用1:设置指定方法在控制器其他方法前执行
位置:方法上方
@Controller @RequestMapping("/c5") public class MyController5 { @ModelAttribute public void before(){ System.out.println("前置方法"); } @RequestMapping("/t1") public String t1(){ System.out.println("t1"); return "baizhan"; } }
作用2:从Model模型中获取数据给参数赋值
位置:方法参数前
@Controller @RequestMapping("/c6") public class MyController6 { // 前置方法向Model中设置数据 @ModelAttribute public void before(Model model){ model.addAttribute("name","辛苦学堂"); } // 该参数不是从请求中获取,而是从Model中获取 @RequestMapping("/t1") public String t1(@ModelAttribute("name") String name){ System.out.println(name); return "xiaotong"; } }
SpringMVC注解_RESTful风格支持
RESTful风格介绍
RESTful风格是一种URL路径的设计风格。在RESTful风格的URL路 径中,网络上的任意数据都可以看成一个资源,它可以是一段文 本、一张图片,也可以是一个Java对象。而每个资源都会占据一个 网络路径,无论对该资源进行增删改查,访问的路径是一致的。
传统URL:
查找id为1的学生: http://localhost:8080/student/findById?id=30
删除id为1的学生: http://localhost:8080/student/deleteById?id=30
RESTful风格URL:
查找id为30的学生: http://localhost:8080/student/30
删除id为30的学生: http://localhost:8080/student/30
那么如何区分对该资源是哪一种操作?通过请求方式不同,判断进 行的是什么操作。
之前我们学过两种请求方式,GET请求和POST请求,而访问 RESTful风格的URL一共有四种请求方式:
1、GET请求:查询操作
2、POST请求:新增操作
3、DELETE请求:删除操作
4、PUT请求:修改操作
RESTful风格URL:
查找id为30的学生: http://localhost:8080/student/30 GET方式请求
删除id为30的学生: http://localhost:8080/student/30 DELETE方式请求
RESTful风格的优点:
结构清晰、符合标准、易于理解、扩展方便。