【愚公系列】2023年04月 Java教学课程 137-Spring MVC框架的Response响应详解

2023-04-21 19:12:55 浏览数 (1)


一、响应

Spring MVC框架中的Response响应指的是处理器方法返回值被转换成HTTP响应的对象,其中包含了响应的状态、内容等信息。

状态码

说明&&详情

100

继续 && 请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。

101

切换协议 && 请求者已要求服务器切换协议,服务器已确认并准备切换。

200(OK)

成功 && 服务器已成功处理了请求。

201

已创建 && 请求成功并且服务器创建了新的资源。

202

已接受 && 服务器已接受请求,但尚未处理。

203

非授权信息 && 服务器已成功处理了请求,但返回的信息可能来自另一个源。

204

无内容 && 服务器成功处理了请求,但没有返回任何内容。

205

重置内容 && 服务器成功处理了请求,内容被重置。

206

部分内容 && 服务器成功处理了部分请求。

300

多种选择 && 针对请求,服务器可执行多种操作。

301(Moved Permanently[重定向])

永久移动 && 请求的网页已永久移动到新位置,即永久重定向。

302(Moved Permanently[重定向])

临时移动 && 请求的网页暂时跳转到其他页面,即暂时重定向。

303

查看其他位置 && 如果原来的请求是POST,重定向目标文档应该通过GET提取。

304

未修改 && 此次请求返回的网页未修改,继续使用上次的资源。

305

使用代理 && 请求者应该使用代理访问该网页。

307

临时重定向 && 请求的资源临时从其他位置响应。

400(Bad Request)

错误请求 && 服务器无法解析该请求。

401

未授权 && 请求没有进行身份验证或验证未通过。

403(Forbidden)

禁止 && 服务器拒绝此次请求。

404(Not Found)

未找到 && 服务器找不到请求的网页。

405

方法禁用 && 服务器禁用了请求中指定的方法。

406

不接受 && 无法使用请求的内容响应请求的网页。

407

需要代理授权 && 请求者需要使用代理授权。

408

请求超时 && 服务器请求超时。

409

冲突 && 服务器在完成请求时发生冲突。

410

已删除 && 请求的资源已永久删除。

411

需要有效长度 && 服务器不接受不含有效长度标头字段的请求。

412

未满足前提条件 && 服务器未满足请求者在请求中设置的其中一个前提条件。

413

请求实体过大 && 请求实体过大,超出服务器的处理能力。

414

请求的URL过长 && 请求网址过长,服务器无法处理。

415

不支持类型 && 请求的格式不被请求页面支持。

416

请求范围不符合要求 && 页面无法提供请求的范围。

417

未满足期望值 && 服务器未满足期望请求标头字段的要求。

500

服务器内部错误 && 服务器遇到错误,无法完成请求。

501

未实现 && 服务器不具备完成请求的能力。

502

错误网关 && 服务器作为网关或代理,从上游服务器收到无效响应。

503

服务不可用 && 服务器目前无法使用。

504

网关超时 && 服务器作为网关或代理,但是没有及时从上游服务器收到请求。

505

HTTP版本不支持 && 服务器不支持请求中所用的HTTP协议版本。

1.页面跳转

  • 转发(默认):
  • 转发访问,支持访问WEB-INF下的页面
代码语言:javascript复制
@RequestMapping("/showPage1")
public String showPage1() {
    System.out.println("user mvc controller is running ...");
    return "forward:page.jsp";
}
  • 重定向: 重定向访问,不支持访问WEB-INF下的页面
代码语言:javascript复制
@RequestMapping("/showPage2")
public String showPage2() {
System.out.println("user mvc controller is running ...");
return "redirect:page.jsp";
}

注意:页面访问地址中所携带的 /

2.页面访问快捷设定 (InternalResourceViewResolver)

展示页面的保存位置通常固定,且结构相似,可以设定通用的访问路径,简化页面配置格式

代码语言:javascript复制
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
/bean>
代码语言:javascript复制
public String showPage3() {
    return "page";
}

如果未设定了返回值,使用void类型,则默认使用访问路径作页面地址的前缀后缀

代码语言:javascript复制
//最简页面配置方式,使用访问路径作为页面名称,省略返回值
@RequestMapping("/showPage5")
public void showPage5() {
    System.out.println("user mvc controller is running ...");
}

3.带数据页面跳转

方式一:使用HttpServletRequest类型形参进行数据传递

代码语言:javascript复制
@RequestMapping("/showPageAndData1")
public String showPageAndData1(HttpServletRequest request) {
    request.setAttribute("name","itheima");
    return "page";
}

方式二:使用Model类型形参进行数据传递

代码语言:javascript复制
@RequestMapping("/showPageAndData2")
public String showPageAndData2(Model model) {
    model.addAttribute("name","itheima");
    Book book = new Book();
    book.setName("SpringMVC入门实战");
    book.setPrice(66.6d);
    model.addAttribute("book",book);
    return "page";
}

方式三:使用ModelAndView类型形参进行数据传递,将该对象作为返回值传递给调用者

代码语言:javascript复制
//使用ModelAndView形参传递参数,该对象还封装了页面信息
@RequestMapping("/showPageAndData3")
public ModelAndView showPageAndData3(ModelAndView modelAndView) {
    //ModelAndView mav = new ModelAndView();    替换形参中的参数
    Book book  = new Book();
    book.setName("SpringMVC入门案例");
    book.setPrice(66.66d);
    //添加数据的方式,key对value
    modelAndView.addObject("book",book);
    //添加数据的方式,key对value
    modelAndView.addObject("name","Jockme");
    //设置页面的方式,该方法最后一次执行的结果生效
    modelAndView.setViewName("page");
    //返回值设定成ModelAndView对象
    return modelAndView;
}

4.返回json数据

方式一:基于response返回数据的简化格式,返回JSON数据

代码语言:javascript复制
//使用jackson进行json数据格式转化
@RequestMapping("/showData3")
@ResponseBody
public String showData3() throws JsonProcessingException {
    Book book  = new Book();
    book.setName("SpringMVC入门案例");
    book.setPrice(66.66d);

    ObjectMapper om = new ObjectMapper();
    return om.writeValueAsString(book);
}

使用SpringMVC提供的消息类型转换器将对象与集合数据自动转换为JSON数据

代码语言:javascript复制
//使用SpringMVC注解驱动,对标注@ResponseBody注解的控制器方法进行结果转换,由于返回值为引用类型,自动调用jackson提供的类型转换器进行格式转换
@RequestMapping("/showData4")
@ResponseBody
public Book showData4() {
    Book book  = new Book();
    book.setName("SpringMVC入门案例");
    book.setPrice(66.66d);
    return book;
}

需要手工添加信息类型转换器

代码语言:javascript复制
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </list>
    </property>
</bean

方式三:使用SpringMVC注解驱动简化配置

代码语言:javascript复制
<!--开启springmvc注解驱动,对@ResponseBody的注解进行格式增强,追加其类型转换的功能,具体实现由MappingJackson2HttpMessageConverter进行-->
<mvc:annotation-driven/>

0 人点赞