spring-webmvc文件下载

1、pom.xml

  <dependencies> 
    <dependency> 
      <groupId>org.springframework</groupId>  
      <artifactId>spring-context</artifactId> 
    </dependency>  
    <dependency> 
      <groupId>org.springframework</groupId>  
      <artifactId>spring-webmvc</artifactId> 
    </dependency>  
    <dependency> 
      <groupId>jakarta.platform</groupId>  
      <artifactId>jakarta.jakartaee-web-api</artifactId> 
    </dependency>  
    <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId>  
      <artifactId>jackson-databind</artifactId> 
    </dependency>  
    <dependency> 
      <groupId>org.projectlombok</groupId>  
      <artifactId>lombok</artifactId> 
    </dependency>  
    <dependency> 
      <groupId>org.hibernate.validator</groupId>  
      <artifactId>hibernate-validator</artifactId> 
    </dependency>  
    <dependency> 
      <groupId>org.hibernate.validator</groupId>  
      <artifactId>hibernate-validator-annotation-processor</artifactId> 
    </dependency>

    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
    </dependency>

  </dependencies> 

2、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
	version="4.0">

	<servlet>
		<servlet-name>DispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>

		<multipart-config>
			<!-- 定义文件上传时所需的最大值,单位为字节 -->
			<max-file-size>10485760</max-file-size>
			<!-- 定义单个上传文件的最大值,单位为字节 -->
			<max-request-size>20971520</max-request-size>
			<!-- 定义内存中存储文件的最大值,超过此大小的文件会写入到硬盘中 -->
			<file-size-threshold>5242880</file-size-threshold>
		</multipart-config>

	</servlet>

	<servlet-mapping>
		<servlet-name>DispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<context-param>
		<param-name>uploadDir</param-name>
		<param-value>E:/springmvc_upload</param-value>
	</context-param>

</web-app>

3、springmvc.xml

<?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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="com.atguigu.controller"/>
    <mvc:default-servlet-handler/>
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"><!-- 默认编码是iso-8859-1 -->
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/plain;charset=utf-8</value>
                        <value>text/html;charset=utf-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <!--spring6.x下的文件上传下载处理器-->
    <!-- 文件上传处理器,可处理 multipart/* 请求并将其转换为 MultipartFile 对象-->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
    </bean>
</beans>

4、index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/upload" method="post" enctype="multipart/form-data">
        昵称:<input type="text" name="nickName" value="龙猫" /><br/>
        头像:<input type="file" name="headPicture" /><br/>
        <button type="submit">上传</button>
    </form>

    <img src="imgs/default.png"/>
    <a href="javascript:window.location.href='download';">下载图片</a>
</body>
</html>

5、DownloadController.java

package com.atguigu.controller;
import jakarta.servlet.ServletContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.io.InputStream;
@RestController
@RequestMapping("/download")
public class DownloadController {

    @Autowired
    private ServletContext servletContext;

    @GetMapping
    public ResponseEntity<byte[]> download() throws IOException {

        //1、读取数据到字节数组
        InputStream inputStream = servletContext.getResourceAsStream("/imgs/default.png");
        byte[] bytes = new byte[inputStream.available()];
        inputStream.read(bytes);

        //2、准备响应头,告诉浏览器,是附件,而不是跳转
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("Content-Disposition", "attachment;filename=hello.jpg");

        //3、返回ResponseEntity对象
        ResponseEntity responseEntity = new ResponseEntity<>(bytes,httpHeaders, HttpStatus.OK);
        return responseEntity;
    }
}

6、ServletContext

ServletContext 是 Java Servlet API 的一部分,是一个在 Web 应用程序的整个生命周期中都存在的 全局性上下文。它可以被看作是一个在整个 Web 应用程序中 共享全局变量 ,其中包含的信息可以在整个应用程序的所有页面和用户之间共享。

ServletContext 的主要特性包括:

  1. 生命周期:ServletContext 的生命周期与 Web 应用程序的生命周期一致。当 Web 应用程序被加载时,ServletContext 被创建,当 Web 应用程序被卸载时,ServletContext 被销毁。
  2. 初始化和传递:在 Web 应用程序的第一次请求时,ServletContext 被初始化。每个 Web 应用程序都有一个唯一的 ServletContext,可以通过 getServletContext() 方法从 Servlet 或 JSP 页面中获取。
  3. 信息存储:ServletContext 可以存储键值对形式的数据。你可以使用 put() 方法将数据存储在 ServletContext 中,使用 get() 方法获取数据。
  4. 信息传播:在 Web 应用程序的所有页面和用户之间,ServletContext 中的信息可以被共享。这意味着,如果你在一个页面中设置了 ServletContext 中的某个值,那么这个值在应用程序的所有页面中都可以被访问到。
  5. 对会话的支持:ServletContext 可以与 HttpSession 对象进行交互。你可以使用 getAttribute() 和 setAttribute() 方法将数据存储在 HttpSession 中,也可以从 HttpSession 中获取数据。此外,ServletContext 可以被用来跟踪用户的状态。例如,你可以使用 ServletContext 来跟踪用户的购物车状态,即使用户在不同的页面之间跳转,购物车的内容也可以保持不变。
  6. 对请求的封装:ServletContext 可以被用来封装对外部资源的引用,例如数据库连接、EJB 引用等。这样,即使在请求之间或者不同的用户之间,这些资源也可以被有效地管理和使用。
  7. 对全局数据的支持:ServletContext 可以被用来存储全局数据。例如,你可以使用 ServletContext 来存储应用程序级别的配置信息或者静态数据。

总的来说,ServletContext 提供了一种在整个 Web 应用程序中共享数据和跟踪用户状态的机制。

 7、EJB

EJB(Enterprise JavaBeans)是Java企业级应用程序中的一种组件模型,它提供了一种标准的、通用的应用程序结构,以简化企业级应用程序的开发过程。EJB是由一组Java类和接口组成的,这些类和接口遵循特定的设计模式,以便在分布式系统中实现事务管理、安全性和数据持久性等方面的功能。

EJB应用程序由多个相互协作的组件组成,这些组件被打包成单独的JAR文件,并部署到一个EJB容器中。EJB容器是一个运行时环境,负责管理EJB组件的生命周期、事务处理和与其他系统的通信。

EJB组件分为三种类型:会话Bean、实体Bean和消息驱动Bean。会话Bean用于表示业务逻辑,实体Bean用于表示数据对象,消息驱动Bean用于处理异步消息。

EJB的优势在于它提供了一种标准的、易于使用的框架,以简化企业级应用程序的开发过程。它提供了许多内置的功能,如事务管理、安全性和数据持久性等,从而减少了开发人员需要编写的代码量。此外,EJB还可以与其他Java技术(如JSP、Servlet和JPA)无缝集成,进一步简化了应用程序的开发过程。

然而,EJB也有一些缺点。例如,它需要一个EJB容器来运行,这会增加应用程序的复杂性。此外,EJB的学习曲线比较陡峭,需要花费一定的时间来掌握它的使用方法。另外,EJB并不是一种跨平台的解决方案,不同的应用服务器可能需要使用不同的EJB实现。

 8、JavaBeans

JavaBeans 是 Java 语言编写的类,用于创建具有特定功能的对象,可以被多个应用程序反复使用。它具有三层含义:

  1. 是一种规范,一种在Java(包括JSP)中可重复使用的Java组件的技术规范,也可以说成常说的接口。
  2. 是一个Java的类,这样的Java类将对应于一个独立的 .java 文件,且在绝大多数情况下,这应该是一个public类型的类。
  3. 是面向对象的对象,当JavaBeans这样的一个Java类在具体的Java程序中被实例之后,就是面向对象的对象。

JavaBeans充分体现了Java语言平台独立和面向对象编程的优势,是Java语言中的 接口对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值