项目管理与SSM框架 SpringMVC(三)

简介: 项目管理与SSM框架 SpringMVC(三)

3.3 请求转发、重定向

之前的案例,我们发现request域中的值可以传到jsp页面中,也就是通过视图解析器跳转到视图的底层是请求转发。

如果我们跳转时不想使用视图解析器,可以使用原生HttpServletRequest进行请求转发或HttpServletResponse进行重定向:

1、控制器

//原生方式进行请求转发
    @RequestMapping("/hello8")
    public void myForward1(HttpServletRequest request, HttpServletResponse response) throws Exception{
        request.setAttribute("name","张三");
        //请求转发
        request.getRequestDispatcher("/helloMVC.jsp").forward(request,response);
    }
    //原生方式进行重定向
    @RequestMapping("/hello9")
    public void myForward2(HttpServletRequest request,HttpServletResponse response) throws IOException {
        request.setAttribute("name","张三");
        response.sendRedirect("helloMVC.jsp");
    }

2、jsp

<%@ page contentType="text/html;charset=UTF-8" language="java"  isELIgnored="false" %>
<html>
<head>
    <title>MVC</title>
</head>
<body>
<h1>你好啊,${requestScope.name}</h1>
</body>
</html>

3、访问

SpringMVC还提供了一种更简单的请求转发和重定向的写法:

@RequestMapping("/hello10")
    public String myForward3(HttpServletRequest request){
        request.setAttribute("name","张三");
        // 请求转发
        return "forward:helloMVC";
        // 重定向
        // return "redirect:helloMVC";
    }

四、SpringMVC注解

4.1 @Controller、@RequestMapping

@Controller

作用:标记控制器,将控制器交给Spring容器管理。

位置:类上方

@RequestMapping

作用:给控制器方法设置请求路径

位置:方法或类上方。用于类上,表示类中的所有控制器方法都是以该地址作为父路径。

属性:

  • value/path:请求路径(只写一个属性时默认为请求路径)
  • method:指定请求方式
  • params:规定必须发送的请求参数
  • headers:规定请求必须包含的请求头
/*
     访问路径为 localhost:8080/annotation1
     支持post和get请求
     请求时必须带有name参数
    */
    @RequestMapping(path = "/annotation1",
            method = {RequestMethod.GET,RequestMethod.POST},
            params = {"name"})
    public String annotation1(String name,Map map){
        map.put("name", name);
        System.out.println(name);
        return "helloMVC";
    }


4.2 @RequestParam

作用:在控制器方法中获取请求参数

位置:方法参数前

属性:

  • name:指定请求参数名称
  • defaultValue: 为参数设置默认值
  • required:设置是否是必须要传入的参数
/*
      定义请求的参数名为name,默认值为张三,不是必须的参数
   */
    @RequestMapping("/annotation2")
    public String annotation2(@RequestParam(name = "name",defaultValue = "张三",required = false) 
                                          String name,Map map){
        map.put("name", name);
        return "helloMVC";
    }


4.3 @ReuqestHeader、@CookieValue

@RequestHeader

作用:在控制器方法中获取请求头数据

位置:方法参数前

@CookieValue

作用:在控制器方法中获取Cookie数据

位置:方法参数前

/*
    获取User-Agent请求头
    获取JSESSIONID的Cookie值
   */
    @RequestMapping("/annotation3")
    public void annotation3(@RequestHeader("User-Agent") String userAgent,
                              @CookieValue("JSESSIONID") String jSessionId){
        System.out.println(userAgent);
        System.out.println(jSessionId);
    }

4.4 @SessionAttributes

作用:将Model模型中的数据存到session域中,model模型的数据域是request。

位置:类上方

@Controller
@SessionAttributes("name")
public class MyController {
    @RequestMapping("/hello")
    public String t1(Model model){
        // model中保存name数据
        model.addAttribute("name","张三");
        return "helloMVC";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java"  isELIgnored="false" %>
<html>
<head>
    <title>MVC</title>
</head>
<body>
<h1>你好啊,${sessionScope.name}</h1>
</body>
</html>

访问:


4.5 @ModelAttribute

作用1:设置指定方法在控制器其他方法前执行

位置:方法上方

@Controller
public class MyController {
    @ModelAttribute
    public void before(){
        System.out.println("前置方法");
    }
    @RequestMapping("/hello1")
    public void hello1(){
        System.out.println("hello1方法执行");
    }
}

访问:http://localhost:8080/hello1

作用2:从Model模型中获取数据给参数赋值,提前预热数据。

位置:方法参数前

@Controller
public class MyController {
    // 前置方法向Model中设置数据
    @ModelAttribute
    public void before(Model model){
        model.addAttribute("name","张三");
    }
    // 该参数不是从请求中获取,而是从Model中获取
    @RequestMapping("/hello2")
    public void t1(@ModelAttribute("name") String name){
        System.out.println(name);
    }
}

访问:http://localhost:8080/hello2


4.6 RESTful风格介绍

RESTful风格是一种URL路径的设计风格。在RESTful风格的URL路径中,网络上的任意数据都可以看成一个资源,它可以是一段文本、一张图片,也可以是一个Java对象。而每个资源都会占据一个网络路径,无论对该资源进行增删改查,访问的路径是一致的。

传统URL:

RESTful风格URL:

那么如何区分对该资源是哪一种操作?通过请求方式不同,判断进行的是什么操作。

之前我们学过两种请求方式,GET请求和POST请求,而访问RESTful风格的URL一共有四种请求方式:

  • GET请求:查询操作
  • POST请求:新增操作
  • DELETE请求:删除操作
  • PUT请求:修改操作

RESTful风格URL:

RESTful风格的优点:

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


4.7 APIFOX工具的使用

视频链接:21分钟学会Apifox_哔哩哔哩_bilibili


4.8 @PathVariable

作用:在RESTful风格的URL中获取占位符的值

位置:方法参数前

属性:

  • value:获取哪个占位符的值作为参数值,如果占位符和参数名相同,可以省略该属性。
package com.zj.controller;
import com.zj.pojo.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("/student")
// 模拟学生的增删改查控制器
public class StudentController {
  // 路径中的{id}表示占位符,最后会封装到方法的参数中使用
  // 删除学生
  @DeleteMapping(value = "/{id}")
  public void deleteStudent(@PathVariable("id") int id){
     System.out.println("删除id为"+id+"的学生");
   }
  // 如果占位符和参数名相同,可以省略@PathVariable的value属性
  // 根据id查询学生
  @GetMapping(value = "/{id}")
  public void findStudentById(@PathVariable int id){
    System.out.println(id);
    System.out.println("根据id查询学生");
   }
    // 新增学生
  @PutMapping(value = "/{id}")
  public void addStudent(@PathVariable int id, Student student){
    System.out.println(id);
    System.out.println(student);
    System.out.println("新增学生");
   }
  // 修改学生
  @DeleteMapping(value = "/{id}")
  public void updateStudent(@PathVariable int id, Student student){
    System.out.println(id);
    System.out.println(student);
    System.out.println("修改学生");
   }
}

访问方式:


4.9 HiddentHttpMethodFilter

由于浏览器form表单只支持GET与POST请求,而DELETE、PUT请求并不支持,SpringMVC有一个过滤器,可以将浏览器的POST请求改为指定的请求方式,发送给的控制器方法。

用法如下:

1、在web.xml中配置过滤器

<!-- 请求方式过滤器 -->
<filter>
  <filter-name>httpMethodFilter</filter-name>
  <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>httpMethodFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

2、编写控制器方法

package com.zj.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
public class MyController {
    @DeleteMapping("/delete")
    public void testDelete(){
        System.out.println("删除方法");
    }
    @PutMapping("/put")
    public void testPut(){
        System.out.println("修改方法");
    }
}

3、表单

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>DELETE、PUT提交</title>
</head>
<body>
<!-- 删除 -->
<%-- 提交DELETE、PUT请求,表单必须提交方式为post --%>
<%-- 表单中有一个隐藏域,name值为_method,value值为提交方式 --%>
<form action="/delete" method="post">
    <input type="hidden" name="_method" value="DELETE">
    <input type="submit" value="删除">
</form>
<hr/>
<!-- 修改 -->
<form action="/put" method="post">
    <input type="hidden" name="_method" value="PUT">
    <input type="submit" value="修改">
</form>
</body>
</html>


相关文章
|
3月前
|
Java 数据库连接 Maven
手把手教你如何搭建SSM框架、图书商城系统案例
这篇文章是关于如何搭建SSM框架以及实现一个图书商城系统的详细教程,包括了项目的配置文件整合、依赖管理、项目结构和运行效果展示,并提供了GitHub源码链接。
手把手教你如何搭建SSM框架、图书商城系统案例
|
1月前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
1月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
53 2
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
109 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
2月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
3月前
|
Java 数据库连接 Maven
SSM框架整合图书管理项目
这篇文章是关于SSM框架整合到图书管理项目的详细教程,涵盖了从Maven项目构建、依赖导入、数据库连接、配置文件编写、实体类和接口实现到SpringMVC整合的完整步骤。
SSM框架整合图书管理项目
|
2月前
|
XML Java 数据库连接
如何搭建SSM框架、图书商城系统
这是一份详尽的《Spring + SpringMVC + Mybatis 整合指南》,作者耗时良久整理出约五万字的内容,现已经全部笔记公开。此文档详细地介绍了如何搭建与整合SSM框架,具体步骤包括创建Maven项目、添加web骨架、配置pom文件以及整合Spring、SpringMVC和Mybatis等。无论是对初学者还是有一定基础的开发者来说,都是很好的学习资源。此外,作者还提供了项目源码的GitHub链接,方便读者实践。虽然当前主流推荐学习SpringBoot,但了解SSM框架仍然是不可或缺的基础。
34 0