SpringMVC转发和重定向, 以及文件功能的处理

这篇具有很好参考价值的文章主要介绍了SpringMVC转发和重定向, 以及文件功能的处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringMVC转发和重定向, 以及文件功能的处理

一、SpringMVC中的转发和重定向

请求转发,请求重定向的区别和使用场景:

请求转发

特点:
请求转发是在服务器内部进行的,客户端不会察觉到。
转发是直接将请求传递给另一个组件,而不需要浏览器的参与。
转发是通过使用 RequestDispatcher 接口的 forward() 方法来实现的。

使用场景:

当两个组件共享相同的请求信息时,可以使用请求转发。
适用于在同一 web 应用程序内部的不同组件之间进行通信,如 Servlet 到 JSP 页面的转发。

请求重定向:

特点:

请求重定向是通过发送一个 HTTP 重定向响应给客户端来实现的。
客户端收到响应后,会发起一个新的请求到指定的 URL。
重定向导致客户端和服务器之间产生两次请求-响应往返。

使用场景:

当两个组件不共享相同的请求信息,或者要将请求发送到不同的 web 应用程序时,可以使用请求重定向。
适用于在不同的 web 应用程序之间导航,或者在同一应用程序内部的不同上下文之间导航。

传统方式开发:

请求转发:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping("/user")
public class UserController() {
    @GetMapping("/getUser")
    public void getUser(HttpServletRequest request, HttpServletResponse response) {
        request.getRequestDispatcher("/user/addUser").forward(request,response);
    }

    @PostMapping("/addUser")
    public String addUser() {
        // 返回页面
        return "user";
    }
}

请求重定向:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping("/user")
public class UserController() {
    @GetMapping("/getUser")
    public void getUser(HttpServletRequest request, HttpServletResponse response) {
        response.sendRedirect("/user/addUser");
    }

    @PostMapping("/addUser")
    public String addUser() {
        // 返回页面
        return "user";
    }
}

使用SpringMVC框架之后

请求转发

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping("/user")
public class UserController() {
    @GetMapping("/getUser")
    public String getUser(HttpServletRequest request, HttpServletResponse response) {
        return "forward:/user/addUser";
    }

    @PostMapping("/addUser")
    public String addUser() {
        // 返回页面
        return "user";
    }
}

请求重定向文章来源地址https://www.toymoban.com/news/detail-798477.html

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping("/user")
public class UserController() {
    @GetMapping("/getUser")
    public String getUser(HttpServletRequest request, HttpServletResponse response) {
       return "redirect:/user/addUser";
    }

    @PostMapping("/addUser")
    public String addUser() {
        // 返回页面
        return "user";
    }
}

二、SpringMVC中的文件的上传和下载

一、引入依赖

	<properties>
        <!--统一版本管理-->
        <spring.version>5.3.6</spring.version>
    </properties>

	<dependencies>

	
		<!--spring 的 核心包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>

        
        

		<!--springmvc的核心依赖 web-->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<!--servlet api-->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>

		<!--thymeleaf api-->
		<dependency>
			<groupId>org.thymeleaf</groupId>
			<artifactId>thymeleaf-spring5</artifactId>
			<version>3.0.12.RELEASE</version>
		</dependency>



		<!--文件上传依赖-->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.4</version>
		</dependency>

	</dependencies>

二、 配置 spring的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--开启包扫描-->
    <context:component-scan base-package="com.atguigu.controller"/>
    <!--配置 视图控制器-->
    <mvc:view-controller path="/" view-name="index"></mvc:view-controller>
    <!-- 开启springmvc容器-->
    <mvc:annotation-driven></mvc:annotation-driven>


    <!-- 配置Thymeleaf视图解析器 -->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <!--配置视图解析器的优先级-->
        <property name="order" value="1"/>
        <!--配置视图解析器的字符编码方式-->
        <property name="characterEncoding" value="UTF-8"/>
        <!--配置视图解析器的模板-->
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">

                        <!-- 视图前缀 -->
                        <property name="prefix" value="/WEB-INF/templates/"/>

                        <!-- 视图后缀 -->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
    <!--注入文件上传解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="1048576"></property>
    </bean>

</beans>

第三步: 创建配置类

package com.atguigu.controller;


import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Controller
@RequestMapping("/file")
public class FileController {
    /**
     *  文件下载
     * @param file
     * @return
     * @throws IOException
     */
    @GetMapping("/getFile")
    public ResponseEntity<byte[]> downFile(MultipartFile file) throws IOException {

        // 1.获取文件的路径
        String filePath = "E:/file/mybatis思维导图.png";
        // 2.获取一个输入流
        InputStream in = new FileInputStream(filePath);
        // 2. 返回响应
        byte[] bytes = new byte[in.available()];
        in.read(bytes);

        HttpHeaders headers = new HttpHeaders();
        // 讲UTF-8 转化为 ISO-8859-1
        String fileName = new String("mybatis思维导图.png".getBytes("UTF-8"),"ISO-8859-1");
        headers.add("Content-Disposition","attachment;filename="+fileName);
        return new ResponseEntity<>(bytes,headers, HttpStatus.OK);
    }

    /**
     *  文件上传
     *
     * @return
     */
    @PostMapping("/uploadFile")
    public String uploadFile(MultipartFile file) throws IOException {
        // 文件夹前半段
        String dirPath = "E:/file";
        SimpleDateFormat dateFormat = new SimpleDateFormat("/yyyy/MM/DD/");
        dirPath += dateFormat.format(new Date());
        File fileDirPath = new File(dirPath);
        // 如果文件夹不存在则创建该文件夹
        if (!fileDirPath.exists()){
            fileDirPath.mkdirs();
        }
        // 文件的全名 从前端传过来的
        String fileFullName = file.getOriginalFilename();
        // 文件后缀名
        String fileSuffixName = fileFullName.substring(fileFullName.lastIndexOf("."));
        // 文件的保存名字
        String fileName = UUID.randomUUID().toString().replace("-","")+fileSuffixName;

        file.transferTo(new File(dirPath+fileName));
        return "success_file";
    }

}

第四步: 创建html页面进行测试

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>文件的上传和下载</title>
    <base th:href="@{/}">
</head>
<body>
  <a href="file/getFile">下载文件</a>
  <br>
  <form method="post" action="file/uploadFile" enctype="multipart/form-data">
      <!--这里的 name 要和 配置类中的参数名相同 -->
      <input type="file" name="file">
      <button type="submit">上传</button>
  </form>
</body>
</html>

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>文件的上传和下载</title>
    <base th:href="@{/}">
</head>
<body>
    <p>文件上传成功</p>
  <br>
</body>
</html>

第六步 启动tomcat进行测试

到了这里,关于SpringMVC转发和重定向, 以及文件功能的处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring MVC:请求转发与请求重定向

    转发( forward ) ,指服务器接收请求后,从一个资源跳转到另一个资源中。请求转发是一次请求,不会改变浏览器的请求地址。 简单示例: 1.通过 String 类型的返回值实现转发

    2024年02月08日
    浏览(46)
  • 【Java 高阶】一文精通 Spring MVC - 转发重定向(四)

    👉 博主介绍 : 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ Java 高阶 🙉八股文专题:剑指大厂,手撕

    2024年02月11日
    浏览(49)
  • nginx的匹配方式和重定向

    目录 一、nginx的匹配方式 1、nginx的正则表达式: 2、location匹配的分类: 3、location的匹配的优先级: 4、在工作中配置location的原则: 二、nginx的重定向: 1、rewrite: 2、flag标志位: 3、配置方式: 4、实验: 1、基于域名的跳转: 2、基于ip访问跳转: 3、基于结尾文件跳转 三

    2024年02月03日
    浏览(51)
  • Shell编程 管道和重定向 | 基本概念及其相关应用

    在Linux中,管道和重定向是非常有用的工具,用于处理命令的输入和输出。它们允许你将多个命令组合在一起,将命令的输出发送到文件或从文件中读取输入。以下是有关Linux管道和重定向的详细介绍,并附带了丰富的示例: 管道符号 | 用于将一个命令的输出传递给另一个命

    2024年01月18日
    浏览(42)
  • 【SpringMVC】| 使用SpringMVC实现文件上传 | 下载功能

    SpringMVC是一个Web框架,提供了许多有用的功能,包括文件上传和下载。通过SpringMVC上传和下载文件,您可以允许用户上传文件,以便将它们存储在服务器上,或者允许用户从服务器上下载文件。这些都可以为您的应用程序添加有用的功能,例如: 允许用户上传和共享文件 -

    2024年02月02日
    浏览(44)
  • Spring依赖注入之setter注入与构造器注入以及applicationContext.xml配置文件特殊值处理

    依赖注入之setter注入 在管理bean对象的组件的时候同时给他赋值,就是setter注入,通过setter注入,可以将某些依赖项标记为可选的,因为它们不是在构造对象时立即需要的。这种方式可以减少构造函数的参数数量,使得类的构造函数更加简洁。 注:既然是setter注入,则对象的

    2024年01月25日
    浏览(49)
  • 重定向和转发的区别

    1、定义 用户通过浏览器发送一个请求,Tomcat服务器接收这个请求,会给浏览器发送一个状态码302,并设置一个重定向的路径,浏览器如果接收到了这个302的状态码以后,就会去自动加载服务器设置的路径 一个页面跳转到另外一个页面(应用场景)、登录页面跳转到主页面:

    2024年02月03日
    浏览(51)
  • Servlet重定向转发及自动加载

    学好Servlet必须紧紧围绕着请求和响应这两个概念 以上写的代码只是进行请求,然后再响应到客户端。请求的时候没有带数据给Servlet 下面开始写在请求的时候前端带数据到servlet里面,我们servlet要接收前端给我们的这个数据 login.jsp servlet实例 web.xml 请求时候的乱码问题: 响应

    2024年01月25日
    浏览(44)
  • JavaWeb 中 “转发”与 “重定向”的区别

    @ 目录 JavaWeb 中 “转发”与 “重定向”的区别 每博一文案 1. Forward 转发 2. Redirect重定向 3. 转发使用不当的危害:转发刷新问题 4. 转发 与 重定向的区别 5. “重写向”与“转发”的合理选择 6. 总结: 7. 最后: 在一个web应用中通过两种方式,可以完成资源的跳转: 第一种方

    2023年04月10日
    浏览(40)
  • uniapp下载文件 例(Word)以及下载其他文件,Word文件的转发,保存,查看

     直接复制用就可以,建议直接复制 JS 部分然后修改了我写的URL即可  html部分 JS部分 ---------------------- 其实只复制这部分就够了,改一下url地址就可以了   CSS样式 注意=========================================真机浏览效果如最后一张图片 这段代码可以实现 查看,分享,保存,  会

    2024年02月11日
    浏览(96)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包