SpringMVC【处理响应、SpringMVC注解(@RequestParam、@RequestHeader、@CookieValue)】(三)-全面详解(学习总结---从入门到深化)

 

目录

         SpringMVC处理响应_context域设置数据

SpringMVC处理响应_请求转发&重定向 

SpringMVC的常用注解:

SpringMVC注解_@RequestParam

 SpringMVC注解_@RequestHeader、@CookieValue

@RequestHeader

 @CookieValue

SpringMVC注解_@SessionAttributes

SpringMVC注解_@ModelAttribute  

SpringMVC注解_RESTful风格支持


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风格的优点:

结构清晰、符合标准、易于理解、扩展方便。

猜你喜欢

转载自blog.csdn.net/m0_58719994/article/details/131745061