SpringBoot的Web開發支持
- 常用的服務器配置
- 使用Jetty服務器替換Tomcat
- 排除Tomcat的啟動器,引入Jetty
- application.yml
- 撰寫入口程式
- 撰寫Controller測驗
- 測驗結果
- Jetty對jsp的支持
- 添加依賴
- SpringBoot集成使用jsp
- 撰寫一個jsp
- 撰寫Controller
- 測驗結果
- 配置背景關系
- 撰寫user_list.jsp
- 撰寫Controller
- 測驗結果
- 打包(jar和war)
- 引入所需的插件
- 打包
- 打開war包所在檔案位置
- 在此處打開cmd,輸入啟動的命令
- 訪問jsp頁面
- 對靜態資源的配置
- 自定義資源映射
- static-locations
- static-path-pattern
- 配置自定義的Convert解決日期型別的引數轉換
- 自定義攔截器的配置
- 自定義類實作HandlerInterceptor介面
- 使用Java的形式配置攔截器的攔截路徑
- 自定義頁面跳轉
- 自定義資源映射
- 錯誤處理、例外處理
- 使用Java例外處理器
- 檔案上傳與下載
- 專案目錄
- pom.xml
- 啟動類
- controller
- application.yml
- SpringBoot集成使用jsp(超詳細)
- jsp
- 效果
使用spring-boot-starter-web啟動器,開始web支持,內嵌一個Tomcat,添加了對于SpringMVC的支持,Spring Boot默認servlet容器為tomcat,
Spring Boot supports the following embedded servlet containers:
| Name | Servlet | Version |
|---|---|---|
| Tomcat | 9.0 | 4.0 |
| Jetty | 9.4 | 3.1 |
| Undertow | 2.0 | 4.0 |
常用的服務器配置
- 配置埠號Spring Boot 默認埠是8080,如果想要進行更改的話,在組態檔中加入:server.port=8081
- 配置session的超時時間server.servlet.session.timeout=2M
使用Jetty服務器替換Tomcat
專案目錄:

排除Tomcat的啟動器,引入Jetty
pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
</dependencies>

application.yml
application.yml:
server:
port: 80
撰寫入口程式
入口程式:
package com.keafmd;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Keafmd
*
* @ClassName: App03
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-06 13:57
* @Blog: https://keafmd.blog.csdn.net/
*/
@SpringBootApplication
public class App03 {
public static void main(String[] args) {
SpringApplication.run(App03.class,args);
}
}
撰寫Controller測驗
Controller測驗:
package com.keafmd.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Keafmd
*
* @ClassName: JettyController
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-06 13:56
* @Blog: https://keafmd.blog.csdn.net/
*/
@RestController
public class JettyController {
/**
* http://127.0.0.1:80/hello
* @return
*/
@GetMapping("/hello")
public String hello(){
return "hello keafmd";
}
}
測驗結果
運行啟動類,效果如下:

訪問:http://127.0.0.1:80/hello

Jetty對jsp的支持
添加依賴
springboot中的jetty為內嵌的jetty,支持jsp需要添加額外的依賴,
在pom.xml中添加如下依賴:
<!--jetty容器支持jsp start-->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>apache-jsp</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>apache-jstl</artifactId>
</dependency>
<!--jetty容器支持jsp end-->
SpringBoot集成使用jsp
需要設定:SpringBoot集成使用jsp(超詳細)
撰寫一個jsp

注意是在webapp的目錄下,
index.jsp:
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2021/4/6
Time: 14:41
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Keafmd</h1>
</body>
</html>
撰寫Controller
JspController:
package com.keafmd.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
/**
* Keafmd
*
* @ClassName: JspController
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-06 14:43
* @Blog: https://keafmd.blog.csdn.net/
*/
@Controller
public class JspController {
/**
* http://127.0.0.1/keafmd
* @return
*/
@GetMapping("/keafmd")
public String keafmd(){
return "/index.jsp";
}
}
測驗結果
我提前配置好了80埠,
訪問:http://127.0.0.1/keafmd

配置背景關系
application.yml:
server:
port: 80
spring:
mvc:
view:
prefix: /WEB-INF/user/
suffix: .jsp
撰寫user_list.jsp

user_list.jsp:
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2021/4/6
Time: 14:45
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>User_List</h1>
</body>
</html>
撰寫Controller
JspController:
package com.keafmd.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
/**
* Keafmd
*
* @ClassName: JspController
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-06 14:43
* @Blog: https://keafmd.blog.csdn.net/
*/
@Controller
public class JspController {
/**
* http://127.0.0.1/keafmd
* @return
*/
@GetMapping("/keafmd")
public String keafmd(){
return "/index.jsp";
}
@GetMapping("/userlist")
public String userlist(){
return "user_list";
}
}
測驗結果
訪問:http://127.0.0.1/userlist

打包(jar和war)
區別:打jar包不能訪問jsp資源,war包可以,
引入所需的插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
打包

打開war包所在檔案位置

在此處打開cmd,輸入啟動的命令
java -jar xxxxx.war/.jar

訪問jsp頁面


打jar包的話是訪問不到user_list.jsp的,這里就不測驗了,
對靜態資源的配置
把類路徑下的 /static、/public、/resources 和 /META-INF/resources 檔案夾下的靜態檔案直接映射為 /,可以直接通過 http://localhost:8080/ 訪問,
在resources下創建static目錄,在創建common目錄,然后創建tt.css,

訪問:http://127.0.0.1:8080/common/tt.css

自定義資源映射
static-locations
默認支持的檔案路徑:classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources

mm.css:
body{
padding: 0;
}
tt.css:
body{
margin: 0;
padding: 0;
}
在我們沒有在application.yml組態檔配置前,訪問:http://localhost:8080/mm.css,結果如下↓

因為mm.css在自定義的mystatic檔案夾下,不被靜態資源識別,需要自定義,
但是可以直接訪問:http://localhost:8080/common/tt.css,因為tt.css在static檔案夾下,

當我們在application.yml組態檔夾下添加上自定義的檔案夾后就可以訪問了,
application.yml:
spring:
mvc:
static-path-pattern: /**
web:
resources:
static-locations: classpath:/mystatic,classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources
訪問:http://localhost:8080/mm.css,結果如下↓,配置后可以直接訪問,

static-path-pattern
當我們修改application.xml檔案后:
spring:
mvc:
static-path-pattern: /css/**
web:
resources:
static-locations: classpath:/mystatic,classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources
像上面那樣訪問都是失敗的了


我們需要加上/css才可以


配置自定義的Convert解決日期型別的引數轉換
Convert、Formatter:用于接收瀏覽器請求的引數自動轉化成回應型別的資料Stirng(1988-01-01)-Date(1988-01-01)

User:
package com.keafmd.entity;
import lombok.Data;
import java.util.Date;
/**
* Keafmd
*
* @ClassName: User
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 9:53
* @Blog: https://keafmd.blog.csdn.net/
*/
@Data
public class User {
private String id;
private Integer age;
private String address;
private Date createTime;
}
ConverterController:
package com.keafmd.controller;
import com.keafmd.entity.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Keafmd
*
* @ClassName: ConverterController
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 9:54
* @Blog: https://keafmd.blog.csdn.net/
*/
@RestController
public class ConverterController {
/**
* http://127.0.0.1:8080/user?createTime=2021-04-07 01:02:03
* @param user
* @return
*/
@GetMapping("/user")
User getUserInfo(User user){
return user;
}
}
DateConverter:
package com.keafmd.config;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Keafmd
*
* @ClassName: DateConverter
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 9:58
* @Blog: https://keafmd.blog.csdn.net/
*/
public class DateConverter implements Converter<String, Date> {
/**
* yyyy-MM-dd
*
* @param source
* @return
*/
@Override
public Date convert(String source) {
try {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
BootWebMvcConfig:
package com.keafmd.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* Keafmd
*
* @ClassName: BootWebMvcConfig
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 10:27
* @Blog: https://keafmd.blog.csdn.net/
*/
@Configuration(proxyBeanMethods = false)
public class BootWebMvcConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new DateConverter());
}
}
還需要在application.yml配置一下時區和格式,
application.yml:
spring:
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
啟動springboot,訪問:http://127.0.0.1:8080/user?createTime=2021-04-07 01:02:03

自定義攔截器的配置
實作基礎springmvc的攔截器
自定義類實作HandlerInterceptor介面
MyInterceptor:
package com.keafmd.config;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Keafmd
*
* @ClassName: MyInterceptor
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 11:41
* @Blog: https://keafmd.blog.csdn.net/
*/
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("MyInterceptor.preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("MyInterceptor.postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("MyInterceptor.afterCompletion");
}
}

使用Java的形式配置攔截器的攔截路徑
在WebMvcConfig中注冊攔截器,實作WebMvcConfigrer介面,并宣告Bean,
BootWebMvcConfig:
package com.keafmd.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
/**
* Keafmd
*
* @ClassName: BootWebMvcConfig
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 10:27
* @Blog: https://keafmd.blog.csdn.net/
*/
@Configuration(proxyBeanMethods = false)
public class BootWebMvcConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new DateConverter());
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//注冊攔截
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
}
@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
}
}
自定義頁面跳轉
BootWebMvcConfig:
package com.keafmd.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
/**
* Keafmd
*
* @ClassName: BootWebMvcConfig
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 10:27
* @Blog: https://keafmd.blog.csdn.net/
*/
@Configuration(proxyBeanMethods = false)
public class BootWebMvcConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new DateConverter());
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//注冊攔截
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
}
/**
* 映射自定義的跳轉界面
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/index").setViewName("index.html");
registry.addViewController("/home").setViewName("index.html");
}
}
自定義資源映射
1、自動配置(在全域額組態檔中修改)
spring.mvc.static-path-pattern=/
spring.resources.static-locations= classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources
2、自定義資源路徑
自定義資源映射,重寫WebMvcConfiger實作類的 重寫addResourceHandler 方法
呼叫:addResourceHandler 用于處理哪些路徑是靜態資源
呼叫:addResourceLocations用于指定靜態資源的實際目錄
此方法會覆寫組態檔和默認的靜態資源配置
BootWebMvcConfig:
package com.keafmd.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
/**
* Keafmd
*
* @ClassName: BootWebMvcConfig
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 10:27
* @Blog: https://keafmd.blog.csdn.net/
*/
@Configuration(proxyBeanMethods = false)
public class BootWebMvcConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new DateConverter());
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//注冊攔截
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
/**
* http://127.0.0.1:8080/images/holiday.png
*/
// registry.addResourceHandler()
// registry.addResourceHandler("/images/").addResourceLocations("classpath:/imgs/");
registry.addResourceHandler("/images/**").
addResourceLocations("classpath:/imgs/",
"classpath:/mystatic/" ,
"classpath:/static/" ,
"classpath:/public/" ,
"classpath:/META-INF/resources",
"classpath:/resources");
}
}
錯誤處理、例外處理
錯誤的型別:
-
因為后臺程式出錯導致的Exception(http 500)
-
因為引數傳遞錯誤(http 400)
-
客戶端的原因造成的路徑不對(http 404)
當有錯誤產生,默認跳轉到/error,指向的是BasicErrorController,
定制錯誤回應:
1、有模板引擎的情況下;error/狀態碼; 【將錯誤頁面命名為 錯誤狀態碼.html 放在模板引擎檔案夾里面的error檔案夾下】,發生此狀態碼的錯誤就會來到對應的頁面
2、沒有模板引擎(模板引擎找不到這個錯誤頁面),靜態資源檔案夾下找
3、以上都沒有錯誤頁面,就是默認來到Spring Boot默認的錯誤提示頁面
可以使用4xx和5xx作為錯誤頁面的檔案名來匹配這種型別的所有錯誤,精確優先(優先尋找精確的狀態碼.html)
頁面能獲取的資訊:
timestamp:時間戳
status:狀態碼
error:錯誤提示
exception:例外物件
message:例外訊息
errors:JSR303資料校驗的錯誤都在這里
在WebMvcConfiger的實作類中重寫addViewConroller方法,
使用Java例外處理器
1、在Controller層面定義例外處理,哪里有例外哪里處理,只在某一個Controller中生效
JspController:
package com.keafmd.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Keafmd
*
* @ClassName: JspController
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 14:09
* @Blog: https://keafmd.blog.csdn.net/
*/
@Controller
public class JspController {
/**
* http://127.0.0.1:8080/toview
* @return
*/
@GetMapping("/toview")
String toview(){
return "/hello.jsp";
}
@GetMapping("/business")
String business(){
int result = 0/0;
return "/index.jsp";
}
/* @ExceptionHandler(value = Exception.class )
@ResponseBody
String resolveException(HttpServletRequest request, HttpServletResponse response, Exception ex ){
System.out.println(ex.getMessage());
return "{status:'unup',msg:'出錯了'}";
}*/
}
2、定義全域的例外處理方式,定義一個類使用@ControllerAdvice ,在類中定義@ExceptionHandler的注解方法,
MyControllerAdvice:
package com.keafmd.controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Keafmd
*
* @ClassName: MyControllerAdvice
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 14:07
* @Blog: https://keafmd.blog.csdn.net/
*/
@RestControllerAdvice
public class MyControllerAdvice {
@ExceptionHandler(value = Exception.class )
// @ResponseBody
String resolveException(HttpServletRequest request, HttpServletResponse response, Exception ex ){
System.out.println(ex.getMessage());
return "{status:'unup',msg:'全域的處理,Controller出錯了'}";
}
}
效果:

檔案上傳與下載
專案目錄
新建個專案:springboot-file

pom.xml
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.keafmd</groupId>
<artifactId>springboot-file</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!--devtools-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 決議jsp類別庫 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
</dependencies>
</project>
啟動類
啟動類AppFile:
package com.keafmd;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Keafmd
*
* @ClassName: AppFile
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 15:08
* @Blog: https://keafmd.blog.csdn.net/
*/
@SpringBootApplication
public class AppFile {
public static void main(String[] args) {
SpringApplication.run(AppFile.class,args);
}
}
controller
BootConstants:
package com.keafmd.controller;
/**
* Keafmd
*
* @ClassName: BootConstants
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 16:07
* @Blog: https://keafmd.blog.csdn.net/
*/
public interface BootConstants {
public static final String UPLOAD_DIR ="D:\\upload";
}
FileUploadController :
package com.keafmd.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
/**
* Keafmd
*
* @ClassName: FileUploadController
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 15:05
* @Blog: https://keafmd.blog.csdn.net/
*/
@Controller
public class FileUploadController {
@PostMapping("upload")
String upload(MultipartFile pic) throws IOException {
//1 將臨時空間的檔案,轉儲到 D:\\upload
String originalFileName = pic.getOriginalFilename();
//擴展名
String ext = originalFileName.substring(originalFileName.lastIndexOf("."));
//轉儲的新檔案名
String newFileName = UUID.randomUUID().toString() + ext;
//轉儲到 D:\\upload 下的 uuid.png/uuid.jpg
pic.transferTo(new File(BootConstants.UPLOAD_DIR, newFileName));
//2 將資料存盤到 db
/**
* 當前時間
* 上傳的ip
* 操作的工號
* 上傳的檔案名
*
*/
//3 跳轉到串列頁
return "redirect:/list";
}
@GetMapping("list")
String list(Model model) throws IOException {
File[] list = new File(BootConstants.UPLOAD_DIR).listFiles();
model.addAttribute("fileList",list);
return "/list.jsp";
}
}
DownloadController :
package com.keafmd.controller;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
/**
* Keafmd
*
* @ClassName: DownloadController
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 16:10
* @Blog: https://keafmd.blog.csdn.net/
*/
@Controller
public class DownloadController {
/**
* 3000
*
* 1024 1024 (2048) 954
*
*
* @param path
* @param response
* @throws IOException
*/
@GetMapping("/d1/{path}")
public void download(@PathVariable String path , HttpServletResponse response) throws IOException {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.addHeader(HttpHeaders.CONTENT_DISPOSITION,"attachment;filename="+path);
InputStream is = new FileInputStream(new File(BootConstants.UPLOAD_DIR,path));
OutputStream os = response.getOutputStream();
int len = -1;
byte[] bytes = new byte[1024];
while ( (len = is.read(bytes)) != -1){
os.write(bytes,0,len);
}
os.close();
is.close();
}
@GetMapping("/d2/{path}")
public ResponseEntity download2(@PathVariable String path ) throws IOException {
return ResponseEntity.ok().
header(HttpHeaders.CONTENT_TYPE,"application/octet-stream").
header(HttpHeaders.CONTENT_DISPOSITION,"attachment;filename="+path).
body(new FileSystemResource(new File(BootConstants.UPLOAD_DIR,path)));
}
}
AppConfig :
package com.keafmd.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* Keafmd
*
* @ClassName: AppConfig
* @Description:
* @author: 牛哄哄的柯南
* @Date: 2021-04-07 16:05
* @Blog: https://keafmd.blog.csdn.net/
*/
@Configuration
public class AppConfig implements WebMvcConfigurer {
/**
* http://127.0.0.1/form
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/form").setViewName("/upload.jsp");
}
/**
* http://127.0.0.1/down/ae37a66f-aec3-4e23-b2ed-7267adcfb2bb.png
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/down/**").addResourceLocations("file:D:\\upload\\");
}
}
application.yml
server:
port: 80
SpringBoot集成使用jsp(超詳細)
點這里:SpringBoot集成使用jsp(超詳細)
jsp
list.jsp:
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2021/4/7
Time: 15:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table border="1" cellspacing="0" cellpadding="0" width="100%">
<tr>
<th>序號</th>
<th>檔案名稱</th>
<th>操作</th>
</tr>
<c:forEach items="${fileList}" var="file" varStatus="stat">
<tr>
<td>${stat.count}</td>
<td>${file.getName()}</td>
<td>
<a href="${pageContext.request.contextPath}/down/04971284-d789-470a-a991-4d690c36b4ac.jpg">下載1</a>
<a href="${pageContext.request.contextPath}/d1/04971284-d789-470a-a991-4d690c36b4ac.jpg">下載2</a>
<a href="${pageContext.request.contextPath}/d2/04971284-d789-470a-a991-4d690c36b4ac.jpg">下載3</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
upload.jsp:
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2021/4/7
Time: 16:10
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form method="post" action="${pageContext.request.contextPath}/upload" enctype="multipart/form-data">
<input type="file" name="pic">
<input type="submit" value="上傳頭像" >
</form>
</body>
</html>
效果
上傳:

下載:

以上就是SpringBoot的Web開發支持【超詳細【一篇搞定】】的全部內容,
看完如果對你有幫助,感謝點贊支持!
如果你是電腦端的話,看到右下角的 “一鍵三連” 了嗎,沒錯點它[哈哈]

加油!
共同努力!
Keafmd
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/273714.html
標籤:java
下一篇:【Java程式設計】常量與變數
