67,513
社区成员
发帖
与我相关
我的任务
分享
package com.spring16.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ImportResource;
import org.springframework.stereotype.Controller;
@Configuration
// 配置扫描路径,管理除了controller以外的其他内容
@ComponentScan(value = "com.spring16",
excludeFilters = { @Filter(type = FilterType.ANNOTATION, classes = Controller.class) })
@ImportResource("/WEB-INF/applicationContext.xml")
public class RootConfig
{
}
package com.spring16.config;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.FilterType;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Controller;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
// 配置包扫描,只管理和controller有关的类
@ComponentScan(value = "com.spring16",
includeFilters = { @Filter(type = FilterType.ANNOTATION, value = Controller.class) })
// 启用MVC注解驱动,相当于<mvc:annotation-driven/>
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer
{
// 配置jsp视图解析器
@Bean
public InternalResourceViewResolver viewResolver()
{
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/jsp");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters)
{
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
List<MediaType> mediaTypes = new ArrayList<>();
MediaType type = new MediaType(MediaType.TEXT_HTML, StandardCharsets.UTF_8);
mediaTypes.add(type);
type = new MediaType(MediaType.APPLICATION_JSON, StandardCharsets.UTF_8);
mediaTypes.add(type);
jsonConverter.setSupportedMediaTypes(mediaTypes);
converters.add(jsonConverter);
}
}
package com.spring16.config;
import javax.servlet.Filter;
import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
@Configuration
public class WebAppInit extends AbstractAnnotationConfigDispatcherServletInitializer
{
@Override
protected Class<?>[] getRootConfigClasses()
{
return new Class<?>[] { RootConfig.class };
}
// 指定mvc配置类,取代servlet.xml
@Override
protected Class<?>[] getServletConfigClasses()
{
return new Class<?>[] { WebMvcConfig.class };
}
// 配置拦截的请求类型,相当于web.xml中的<url-pattern>配置
@Override
protected String[] getServletMappings()
{
return new String[] { "/" };
}
// 配置文件上传参数,限制
@Override
protected void customizeRegistration(Dynamic registration)
{
// 上传路径
String uploadPath = "d:/upload/";
// 单个文件最大20mb
Long fileMax = (long) (20 * Math.pow(2, 20));
// 总上传文件最大200mb
Long totalMax = (long) (200 * Math.pow(2, 20));
registration.setMultipartConfig(new MultipartConfigElement(uploadPath, fileMax, totalMax, 0));
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException
{
Filter filter = new CharacterEncodingFilter("utf-8", true);
servletContext.addFilter("encodingFilter", filter).addMappingForUrlPatterns(null, false, "/");
super.onStartup(servletContext);
}
}
package com.spring16.controller;
import java.io.File;
import java.io.IOException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
@Controller
@RequestMapping("/r")
public class RoleController
{
@RequestMapping(value = "/upload")
public ModelAndView upload(@RequestParam("uploadFile") MultipartFile file)
{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setView(new MappingJackson2JsonView());
try
{
String fileName = file.getOriginalFilename();
File dest = new File(fileName);
file.transferTo(dest);
modelAndView.addObject("成功标识", true);
modelAndView.addObject("msg", "上传成功");
} catch (IllegalStateException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
return modelAndView;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="./r/upload" method="post" enctype="multipart/form-data">
<h1>
<input type="file" name="uploadFile" value="请选择上传文件">
<input type="submit" value="提交">
</h1>
</form>
</body>
</html>
这没问题的