栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring MVC 用起来还是很香的

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring MVC 用起来还是很香的

之前我有篇博文已经说过不推荐使用 Spring Boot,如今我再深挖 Spring MVC,更发掘出 Spring MVC 不俗的潜力。

零配置:去除所有 xml

消灭 XML 配置这个话题不新鲜,老早就有,但完全去掉 xml 好像不行。不管怎么样我们先朝着这个方向走。

配置 Spring MVC

首先是 WebApplicationInitializer,实现该接口的类会在 Servlet 容器启动时自动加载并运行。在其 onStartup(ServletContext servletCxt) 事件中,配置 MVC,主要是一个 Listener 和一个 Servlet。

servletCxt.addListener(new ContextLoaderListener()); // 监听器

相当于


		org.springframework.web.context.ContextLoaderListener

其次是 Dispatcher 的 Servlet。

ServletRegistration.Dynamic registration = servletCxt.addServlet("dispatcher", new DispatcherServlet(new GenericWebApplicationContext()));
registration.addMapping("/");
registration.setLoadOnStartup(1);

通过上述方法你完全可以抛弃 web.xml 配置。

注入组件

旧的方式是在 applicationContext.xml 注入组件,你仍然可以那样子用,指定 xml 路径:

servletCxt.setInitParameter("contextConfigLocation", "classpath:applicationContext.xml");

同时也可以用代码和注解来代替,例如。

如果不想在 WebApplicationInitializer 当前类中注入,可以另设一个类专门注入组件。

AnnotationConfigWebApplicationContext webCxt = new AnnotationConfigWebApplicationContext();// spring mvc 的配置
webCxt.register(WebConfig.class);
ServletRegistration.Dynamic registration = servletCxt.addServlet("dispatcher", new DispatcherServlet(webCxt));
Spring MVC 的配置

等价代替。

旧方式:




	
	

	
	
	StandardServletMultipartResolver resolver = new StandardServletMultipartResolver();
	resolver.setResolveLazily(true);// resolveLazily属性启用是为了推迟文件解析,以在在 UploadAction 中捕获文件大小异常

	return resolver;
}

然后要配置一下,否则不起效。多数文章介绍在 web.xml 里面配置的,这里介绍一个零配置的方法:registration.setMultipartConfig(new MultipartConfigElement("c:/temp", 50000000, 50000000, 0))。


然后写一个控制器接受上传:

import java.io.File;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import net.bingosoft.clouldapp.data_service.api.baseApiController;

@RestController
@RequestMapping("/api
@Bean
public WebMvcConfigurer corsConfigurer() {
	return new WebMvcConfigurer() {
		@Override
		public void addCorsMappings(CorsRegistry registry) {
			registry.addMapping("
public class CorsFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        allowCORS((HttpServletResponse) resp);
        chain.doFilter(req, resp);
    }

    @Override
    public void init(FilterConfig arg0) {
    }

    @Override
    public void destroy() {
    }

    
    public static void allowCORS(HttpServletResponse resp) {
        
        resp.setHeader("Access-Control-Allow-Origin", "*");
        
        resp.setHeader("Access-Control-Allow-Methods", "*");
        
        resp.setHeader("Access-Control-Max-Age", "3600");
        
        resp.setHeader("Access-Control-Allow-Headers", "*");
        
        resp.setHeader("Access-Control-Allow-Credentials", "true");
    }

    
    public static void forTestCrossDomain(HttpServletResponse resp) {
        if (Version.isDebug)
            allowCORS(resp);
    }
}

不用 web.xml 登记过滤器。

// 全部允许跨域
FilterRegistration.Dynamic filterReg = servletCxt.addFilter("Cors", new CorsFilter());
filterReg.addMappingForUrlPatterns(null, true, "/*");
UTF-8 编码

老问题,

FilterRegistration.Dynamic filterReg = servletCxt.addFilter("InitMvcRequest", new CharacterEncodingFilter("UTF-8"));
filterReg.addMappingForUrlPatterns(null, true, "/*");
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/737172.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号