spring-webmvc文件下载

1、pom.xml

   
     
      org.springframework  
      spring-context 
      
     
      org.springframework  
      spring-webmvc 
      
     
      jakarta.platform  
      jakarta.jakartaee-web-api 
      
     
      com.fasterxml.jackson.core  
      jackson-databind 
      
     
      org.projectlombok  
      lombok 
      
     
      org.hibernate.validator  
      hibernate-validator 
      
     
      org.hibernate.validator  
      hibernate-validator-annotation-processor 
    

    
      commons-fileupload
      commons-fileupload
    

   

2、web.xml




	
		DispatcherServlet
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			classpath:springmvc.xml
		
		1

		
			
			10485760
			
			20971520
			
			5242880
		

	

	
		DispatcherServlet
		/
	

	
		uploadDir
		E:/springmvc_upload
	

3、springmvc.xml




    
    
    
        
            
                
                    
                        text/plain;charset=utf-8
                        text/html;charset=utf-8
                    
                
            
        
    

    
    
    
    

4、index.html




    
    Title


    
昵称:
头像:
下载图片

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 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;
    }
}

spring-webmvc文件下载_第1张图片

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语言中的 接口对象

你可能感兴趣的:(#,Spring,Web,MVC,springwebmvc,servletContext,ResponseEntity,byte[],inputStream,HttpHeaders,attachment)