springMVC02,restful风格,请求转发和重定向
创始人
2024-03-13 09:59:19
0

springMVC02,restful风格,请求转发和重定向

  • restful风格
    • restful简介
    • restful 例子测试
  • 请求转发和重定向

restful风格

restful简介

概念:

Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

RESTFUL特点包括:

  1. 每一个URI代表1种资源;
  2. 客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
  3. 通过操作资源的表现形式来操作资源;
  4. 资源的表现形式是XML或者HTML;
  5. 客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息

传统方式操作资源 :通过不同的参数来实现不同的效果!方法单一,post 和 get

​ http://127.0.0.1/item/queryItem.action?id=1 查询,GET
​ http://127.0.0.1/item/saveItem.action 新增,POST
​ http://127.0.0.1/item/updateItem.action 更新,POST
​ http://127.0.0.1/item/deleteItem.action?id=1 删除,GET或POST

使用RESTful操作资源 : 可以通过不同的请求方式来实现不同的效果!如下:请求地址一样,但是功能可以不同!

​ http://127.0.0.1/item/1 查询,GET
​ http://127.0.0.1/item 新增,POST
​ http://127.0.0.1/item 更新,PUT
​ http://127.0.0.1/item/1 删除,DELETE

restful 例子测试

首先创建一个maven项目,导入相关依赖,并且添加web支持,配置tomcat

1.编写web.xml文件
配置DispatcherServlet前端控制器(请求分发控制器)

	springmvcorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:springmvc-servlet.xml1springmvc/

2.编写spring配置文件
配置视图解析器,mvc注解驱动和spring注解驱动,以及静态资源请求过滤

  	

3.编写controller
com/gothic/sunset/controller UserController.java

用下面的小例子,领会一下restful风格的特点:

package com.gothic.sunset.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;@Controller
public class UserController {@RequestMapping("/add/{a}/{b}")// @PathVariable注解的作用是 参数名的规范  和 mybatis中的@Param注解一样就不过多赘述public String add(Model model, @PathVariable("a") int a, @PathVariable("b") int b){int rs = a + b;String methodName = "+";model.addAttribute("param1",a);model.addAttribute("param2",b);model.addAttribute("method",methodName);model.addAttribute("rs",rs);return "test";}//可以通过@RequestMapping中的method属性来指定请求的方式  get post put .....// 其中的value属性之前也说过了,用来匹配地址栏请求映射@RequestMapping(value = "/del/{a}/{b}",method = RequestMethod.GET)public String del(Model model,@PathVariable("a") int a,@PathVariable("b") int b){int rs = a - b;String methodName = "-";model.addAttribute("param1",a);model.addAttribute("param2",b);model.addAttribute("method",methodName);model.addAttribute("rs",rs);return "test";}
}

这里的话也可以使用@RequestMapping对应的衍生注解: @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping。

比如上面的@RequestMapping(value = "/del/{a}/{b}",method = RequestMethod.GET) 就等同于@GetMapping(value="/del/{a}/{b}")。只是使用的时候需要注意,地址栏默认是使用get方式,你可以通过前台的表单中的action属性值来做对应不同的请求。

然后就是@PathVariable注解和mybatis中的@Param注解一样,都是用来参数名的规范…

4.视图层
WEB-INF/jsp 新建test.jsp


<%--Created by IntelliJ IDEA.User: gothiDate: 2022/12/2Time: 8:29To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

restful风格测试


${param1}${method}${param2}=${rs}

5.启动服务器测试
在这里插入图片描述
在这里插入图片描述
相比较之前我们传统的传递参数,都是以?参数名=值&参数名2=值这样的方式,会暴露很多细节给用户,然后使用post的话虽然可以抹除这些参数,但是就是相当于压根不透露,还是不太好。
使用restful后,我们可以隐藏一些细节,并且使地址栏变得简洁美观,而且多个地址其实都在一个页面。

请求转发和重定向

之前我们的请求转发,重定向是通过request对象和response对象来做的:

  • 重定向:rsp.sendRedirect("/index.jsp");
  • 请求转发: req.setAttribute("msg","/result/t3");或者 req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,rsp);

在springmvc中,我们可以这样来做:

  //请求转发  forward:前缀@RequestMapping("/req")public String test1(Model model){String str = "请求转发 forward:前缀";model.addAttribute("msg",str);return "forward:/turn.jsp";}//重定向 redirect:前缀@RequestMapping("/rsp")public String test2(){return "redirect:/turn.jsp";}

新建turn.jsp 在web目录下:


<%@ page contentType="text/html;charset=UTF-8" language="java" %>

请求转发及重定向测试

${msg}

SpringMVC中默认的转发视图是InternalResourceView

SpringMVC中创建转发视图的情况:
当控制器方法中所设置的视图名称以"forward:"为前缀时,创建InternalResourceView视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"forward:"去掉,剩余部分作为最终路径通过转发的方式实现跳转

SpringMVC中默认的重定向视图是RedirectView

当控制器方法中所设置的视图名称以"redirect:"为前缀时,创建RedirectView视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"redirect:"去掉,剩余部分作为最终路径通过重定向的方式实现跳转。

当转发和重定向时,都不需要经过视图解析器,所以只要手动确定了页面的正确位置即可。

运行服务器测试:
在这里插入图片描述
在这里插入图片描述
通过设置ServletAPI , 不需要视图解析器 .

通过HttpServletResponse进行输出
通过HttpServletResponse实现重定向
通过HttpServletResponse实现转发

	 //通过servletAPI的方式@RequestMapping("/re")public void test3(HttpServletRequest req, HttpServletResponse rsp) throws IOException {rsp.getWriter().println("Hello,Spring BY servlet API");}//重定向 @RequestMapping("/rsp2")public void test4(HttpServletRequest req, HttpServletResponse rsp) throws IOException {rsp.sendRedirect("/springmvcRestful/turn.jsp");}@RequestMapping("/req2")public void test5(HttpServletRequest req, HttpServletResponse rsp) throws Exception {//转发req.setAttribute("msg","请求转发");req.getRequestDispatcher("/turn.jsp").forward(req,rsp);}

在这里插入图片描述在这里插入图片描述

在这里插入图片描述


还得看看之前的作用域的问题…

相关内容

热门资讯

三部门发文:完善幼儿园收费政策 12月23日,由国家发展改革委、教育部、财政部联合印发的《关于完善幼儿园收费政策的通知》(以下简称《...
三部门联合发布2025年劳动法... 中新网12月25日电 据最高人民检察院微信公众号25日消息,中华全国总工会、最高人民法院、最高人民检...
金融领域“黑灰产”违法犯罪集群... 海报新闻记者 孙佃潇 北京报道 12月25日,公安部召开新闻发布会,会上通报公安部和国家金融监督管理...
最高法、全国妇联、司法部联合发... 人民网北京12月25日电 (薄晨棣、高清扬)据最高人民法院消息,24日,最高法与全国妇联、司法部联合...
200余个金融领域犯罪团伙被警... 文 | CFN 大河 图 | 微摄 2025年12月25日,公安部在京召开专题新闻发布会,通报了一场...
锐评丨套牌电动车,闯了法律红灯 一辆在昌平被烧毁的电动车,却在朝阳出现交通违法记录;车牌早已注销,仍收到交通违法提示短信;人在国外度...
金融领域“黑灰产”行为法律关系... 新京报讯(记者张建林)今年6月至11月,公安部会同国家金融监管总局部署17个重点省市开展为期6个月的...
比亚迪起诉“龙哥讲电车”一审胜... 12月25日,比亚迪法务部公布,就起诉自媒体账号“龙哥讲电车”、“满格电新能源”等一案,已收到法院一...
广州首个游戏电竞产业专项扶持政... 钛媒体App 12月25日消息,《广州市扶持游戏电竞产业发展的十八条措施》在广州市人民政府官网正式发...