博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet 3.0 新特性 无 web.xml配置
阅读量:5756 次
发布时间:2019-06-18

本文共 4486 字,大约阅读时间需要 14 分钟。

hot3.png

Servlet 3.0 新特性详解:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html

ServletContainerInitializer :http://blog.csdn.net/songhaifengshuaige/article/details/54138023

Spring Web工程web.xml零配置即使用Java Config + Annotation

https://my.oschina.net/521cy/blog/702864

 

在现有项目写demo是,可能会遇到自己引入的servlet-api是3.0 但是实际使用的servlet-api是2.5的情况,导致教程中的方法不能使用。到时这个问题的原因可能是maven依赖中其他jar包依赖的servlet 2.5 导致导入了2.5的jar包,只需要找到是哪个jar包导入了2.5的到排除依赖即可。

idea在pom中右键Diagrams 搜索servlet 找到依赖2.5的包排除依赖

javax.servlet.jsp.jstl
jstl-api
1.2
javax.servlet
servlet-api
org.glassfish.web
jstl-impl
1.2
javax.servlet
servlet-api

使用WebApplicationInitializer替代web.xml 配置servlet filter listener,其实就是将servlet对象的实例,add到servletcontext中。

public class WebProjectConfigInitializer implements WebApplicationInitializer {    @Override    public void onStartup(ServletContext container) {        initializeSpringConfig(container);        initializeLog4jConfig(container);        initializeSpringMVCConfig(container);        registerServlet(container);        registerListener(container);        registerFilter(container);    }    private void initializeSpringConfig(ServletContext container) {        // Create the 'root' Spring application context        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();        rootContext.register(AppConfiguration.class);        // Manage the life cycle of the root application context        container.addListener(new ContextLoaderListener(rootContext));    }    private void initializeSpringMVCConfig(ServletContext container) {        // Create the spring rest servlet's Spring application context        AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();        //使用java config配置spring mvc        dispatcherContext.register(RestServiceConfiguration.class);        //使用xml配置spring mvc        // dispatcherContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");        // Register and map the spring rest servlet        ServletRegistration.Dynamic dispatcher = container.addServlet("SpringMvc",                new DispatcherServlet(dispatcherContext));        dispatcher.setLoadOnStartup(2);        dispatcher.setAsyncSupported(true);        dispatcher.addMapping("/springmvc/*");    }    private void initializeLog4jConfig(ServletContext container) {        // Log4jConfigListener        container.setInitParameter("log4jConfigLocation", "file:${rdm.home}/log4j.properties");        container.addListener(Log4jConfigListener.class);        PropertyConfigurator.configureAndWatch(System.getProperty("rdm.home") + "/log4j.properties", 60);    }    private void registerServlet(ServletContext container) {        initializeStaggingServlet(container);    }    private void registerFilter(ServletContext container) {        initializeSAMLFilter(container);    }    private void registerListener(ServletContext container) {        container.addListener(RequestContextListener.class);    }    private void initializeSAMLFilter(ServletContext container) {        FilterRegistration.Dynamic filterRegistration = container.addFilter("SAMLFilter", DelegatingFilterProxy.class);        filterRegistration.addMappingForUrlPatterns(null, false, "/*");        filterRegistration.setAsyncSupported(true);    }    private void initializeStaggingServlet(ServletContext container) {        StaggingServlet staggingServlet = new StaggingServlet();        ServletRegistration.Dynamic dynamic = container.addServlet("staggingServlet", staggingServlet);        dynamic.setLoadOnStartup(3);        dynamic.addMapping("*.stagging");    }}

 中有非常完整的示例,但是平时在使用spring mvc是静态文件处理

default
*.css

怎么实现呢?  可以看到servlet mapping中的servlet name 为default,可以推测有一个默认的servlet呗祖册到了servletcontext。

servletcontext可以使用addServlet配置servlet,在servletcontext源码中可以看到getServletRegistration方法返回ServletRegistration

112534_OvTs_3714931.png

在这里可以配置mapping,

servletContext.getServletRegistration("default").addMapping("*.css");

和web.xml配置会实现相同的效果。

ServletRegistration.Dynamic是ServletRegistration得实现类可以进一步配置servlet的属性

112758_PYBy_3714931.png

 

转载于:https://my.oschina.net/u/3714931/blog/1593983

你可能感兴趣的文章
软件安全访谈:ZipSlip、NodeJS安全性和BBS攻击
查看>>
W3C发布DRM作为推荐方案
查看>>
基于Kubernetes构建现代大数据管道
查看>>
切图仔的一点工作经验
查看>>
JS内置对象-Array数组对象的一些常用方法区分
查看>>
jvm调优-命令篇
查看>>
javascript排序问题探究
查看>>
切图崽的自我修养-[TOOL] 用MockJs模拟数据
查看>>
《CSS揭秘》:单侧投影
查看>>
Comment2Wechat —— Typecho 插件
查看>>
精益 React 学习指南 (Lean React)- 4.2 react patterns
查看>>
Swift 现在可用于所有的 ARMv6 树莓派 (1,Zero)
查看>>
TCP/UDP常用端口列表
查看>>
PHP设计模式(三):封装
查看>>
[译] LLDB 基础
查看>>
用了OneAPM CT,宕机早知道!
查看>>
2015年值得关注的8款跨平台开发工具(界面类)
查看>>
Apache下.htaccess文件配置及功能介绍
查看>>
如何有效地记录 Java SQL 日志?
查看>>
Magento XML cheatsheet
查看>>