1.当文件放在WEB-INF文件下如何访问
首先说明一下将文件放在WB-INF文件下,文件相对安全,一般情况会将较重要的文件放在里面
首先说明的是静态资源的释放(在该目录下所有的文件浏览器是不能直接访问的,需要转发):
1.新建java类继承 WebMvcConfigurationSupport 重写父类的 addResourceHandlers 方法,在方法中添加可以释放的静态资源文件
2.1代码如下(方式一)
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/WEB-INF/page/**").
addResourceLocations("/WEB-INF/page/");
}
2.2代码如下(方式二)(这种方式非常推荐)
新建java类继承 WebMvcConfigurationSupport 重写父类的 addResourceHandlers 方法,同时在SpringMvcConfig配置类中定义视图解析器(注意该配置只要放在可以被扫描的地方都可以)
@Bean
public ViewResolver viewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF");
resolver.setSuffix("");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/WEB-INF/page/**").
addResourceLocations("/WEB-INF/page/");
}
2.拦截器
2.1首先创建一个拦截器类,实现 该 HandlerInterceptor 接口,重写该接口的三个方法,同时添加注解便于SpringMvc扫描,如果不想被扫描,可以导入到SpringMvc配置类中。
代码如下:
@Component
public class ProjectInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("我进来了");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
2.2 接下来创建类继承 WebMvcConfigurationSupport 接口,重写方法 addInterceptors
拦截器可以拦截文件和请求同时也可以要求放行文件和请求
代码如下:
注意:
/** * 第一个参数: * HandlerInterceptor handlerInterceptor * 传递的是创建的拦截器(该拦截器创建时交给容器管理,此时自动注入即可) * 第二个参数: * List<String> patterns * 需要添加拦截的路径() * 第三个参数: * List<String> patterns * 需要添加被释放的路径(释放的目录下面若有多个一般 /目录/**) */
protected void addInterceptors(InterceptorRegistry registry) {
/**
* 第一个参数:
* HandlerInterceptor handlerInterceptor
* 传递的是创建的拦截器(该拦截器创建时交给容器管理,此时自动注入即可)
* 第二个参数:
* List<String> patterns
* 需要添加拦截的路径()
* 第三个参数:
* List<String> patterns
* 需要添加被释放的路径(释放的目录下面若有多个一般 /目录/**)
*/
registry.addInterceptor(urlincterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/css/**","/js/**","/images/","/pages/**",
"/code/getCode","/user/SearchOne","/user/SelectList");
}
3.文件的上传和下载
3.1 首先需要引入相关的jar包依赖,在pom.xml添加依赖
<!-- 两个下载是需要的依赖jar包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
3.2 SpringMVC ⽤的是 的MultipartFile来进⾏⽂件上传 所以我们⾸先要配置MultipartResolver:⽤于处理表单中的文件,接下来在SpringMvc配置类中定义文件上传下载的bean
代码如下:
/**
* 文件上传解析器
* @return
*/
@Bean
public MultipartResolver multipartResolver(){
return new StandardServletMultipartResolver();
}
3.3 在web配置类中配置
代码如下:
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setMultipartConfig(new MultipartConfigElement("")
);
}
3.4 请求发送
function f() {
axios({
method:"post",
url:"",
data:new FormData($("form")[0]),
processData:false,
contentType:false
})
}
3.5 接受
public String show(MultipartFile file, String name, String password){
String originalFilename = file.getOriginalFilename();
System.out.println(originalFilename);
return "";
}