RestFul、重定向和转发

Restful

REST(Representational State Transfer)表象化状态转变(表述性状态转变),在2000年被提出,基于HTTP、URI、XML、JSON等标准和协议,支持轻量级、跨平台、跨语言的架构设计。是Web服务的一种新的架构风格(一种思想)。

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

按照我们之前配置好的资源,我们正常情况下是这样写的

  @RequestMapping("/h1")
    public String t1( int a, int b, Model model){
    int res=a+b;
      model.addAttribute("msg","阿威"+res);
      return "test";
  }

这样的传参数h1?a=1&b=3用&拼接

在这里插入图片描述
方式二 使用restFul风格这样我们需要在参数前面添加@PathVariable注解


  @RequestMapping("/h1/{a}/{b}")
  public String t3( @PathVariable int a, @PathVariable int b, Model model){
    int res=a+b;
    model.addAttribute("msg","阿威t3:"+res);
    return "test";
  }

参数用/来进行分割
在这里插入图片描述
我们使用get方法来进行区分,这时注解参数有两个vaule、method

@RequestMapping(value = "/h1/{a}/{b}",method = RequestMethod.GET)
  public String t2(@PathVariable int a,@PathVariable int b, Model model){
    int res=a+b;
    model.addAttribute("msg","阿威t2:"+res);
    return "test";
  }

在这里插入图片描述
用方法区分的另一种书写方式,直接写方法名


  @GetMapping("/h1/{a}/{b}")
  public String t5(@PathVariable int a,@PathVariable int b, Model model){
    int res=a+b;
    model.addAttribute("msg","阿威t5:"+res);
    return "test";
  }

  @PostMapping("/h1/{a}/{b}")
  public String t4(@PathVariable int a,@PathVariable int b, Model model){
    int res=a+b;
    model.addAttribute("msg","阿威t4:"+res);
    return "test";
  }

现在我们写一个from表单,使用post请求,这样他就会走上面的post方法,这里我们注意把表单路径写全。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/springmvc_02_war_exploded/h1/1/1" method="post">
   <input type="submit">
</form>

</body>
</html>

在这里插入图片描述
我们可以观察到他们的显示页面都统一个test,这样是有利于我们后面的开发,我们使用这种方式来进行区分。

转发重定向

我们先使用转发和重定向地址都是自己写好的,所以就不用在使用视图配置InternalResourceViewResolver了
转发
我们可以在方法的参数中添加request、response方法。

@Controller
public class Forward {
    @RequestMapping("/h2/t1")
    public void test1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //转发
        request.setAttribute("msg","你好");
        request.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(request,response);

    }
}

在这里插入图片描述
直接在返回值操作

返回值直接写完整地址

  @RequestMapping("/h2/t3")
    public String test3(Model model) throws ServletException, IOException {
        model.addAttribute("msg","你");
        return "/WEB-INF/jsp/test.jsp";
    }

直接返回值转发

 @RequestMapping("/h2/t3")
    public String test3(Model model) throws ServletException, IOException {
        model.addAttribute("msg","你");
        return "forward:/WEB-INF/jsp/test.jsp";
    }

直接返回值重定向

@RequestMapping("/h2/t3")
    public String test3(Model model) throws ServletException, IOException {
        model.addAttribute("msg","你");
        return "redirect:/index.jsp";
    }

在这里插入图片描述

接受参数

我们在接受前端传来的参数是,最好在前面添加@RequestParam注解里面是重新命名的,

  @RequestMapping("/user/t1")
    public String  test1(@RequestParam("username")  String name, Model model){
        System.out.println(name);
        return "/WEB-INF/jsp/test.jsp";
    }

在这里插入图片描述

在接受对象参数,在地址栏传递的参数名必须和对象中的属性名一致

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
    private String password;
}
 @RequestMapping("/user/t2")
    public String  test2(User user, Model model){
        System.out.println(user);
        return "/WEB-INF/jsp/test.jsp";
    }

在这里插入图片描述

表单提交乱码

我们正常情况下可以直接写一个filter过滤器就行,

public class Filter implements javax.servlet.Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        servletRequest.setCharacterEncoding("UTF-8");
        servletResponse.setCharacterEncoding("UTF-8");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

相应的映射地址

<filter>
        <filter-name>filter</filter-name>
        <filter-class>aw.filter.Filter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值