spring boot集成了servlet容器,当我们在pom文件中增加spring-boot-starter-web的maven依赖时,不做任何web相关的配置便能提供web服务,这还得归于spring
boot 自动配置的功能(因为加了EnableAutoConfiguration的注解),帮我们创建了一堆默认的配置,以前在web.xml中配置,现在都可以通过spring bean的方式进行配置,由spring来进行生命周期的管理,大多数情况下,我们需要重载这些配置(例如修改服务的启动端口,contextpath,filter,listener,servlet,session超时时间等)

1. servlet配置

当应用只有默认的servlet(即DispatcherServlet)时,映射的url为/,存在其他的servlet时,映射的路径为servlet的注册的beanname(可通过@Component注解修改),创建方式如下:

[java] view
plain
copy

  1. @Component("myServlet")
  2. public class MyServlet implements Servlet{
  3. /**
  4. *
  5. * @see javax.servlet.Servlet#destroy()
  6. */
  7. @Override
  8. public void destroy() {
  9. System.out.println("destroy...");
  10. }
  11. /**
  12. * @return
  13. * @see javax.servlet.Servlet#getServletConfig()
  14. */
  15. @Override
  16. public ServletConfig getServletConfig() {
  17. return null;
  18. }
  19. /**
  20. * @return
  21. * @see javax.servlet.Servlet#getServletInfo()
  22. */
  23. @Override
  24. public String getServletInfo() {
  25. return null;
  26. }
  27. /**
  28. * @param arg0
  29. * @throws ServletException
  30. * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
  31. */
  32. @Override
  33. public void init(ServletConfig arg0) throws ServletException {
  34. System.out.println("servlet init...");
  35. }
  36. /**
  37. * @param arg0
  38. * @param arg1
  39. * @throws ServletException
  40. * @throws IOException
  41. * @see javax.servlet.Servlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
  42. */
  43. @Override
  44. public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException,
  45. IOException {
  46. System.out.println("service...");
  47. }

2. filter配置

filter配置的映射是/*,创建方式如下:

[java] view
plain
copy

  1. @Component("myFilter")
  2. public class MyFilter implements Filter{
  3. /**
  4. *
  5. * @see javax.servlet.Filter#destroy()
  6. */
  7. @Override
  8. public void destroy() {
  9. System.out.println("destroy...");
  10. }
  11. /**
  12. * @param arg0
  13. * @param arg1
  14. * @param arg2
  15. * @throws IOException
  16. * @throws ServletException
  17. * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
  18. */
  19. @Override
  20. public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
  21. throws IOException,
  22. ServletException {
  23. System.out.println("doFilter...");
  24. arg2.doFilter(arg0, arg1);
  25. }
  26. /**
  27. * @param arg0
  28. * @throws ServletException
  29. * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
  30. */
  31. @Override
  32. public void init(FilterConfig arg0) throws ServletException {
  33. System.out.println("filter init...");
  34. }
  35. }<span style="font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13.3333330154419px; line-height: 17.3333339691162px; background-color: transparent;">   </span>

3. listener配置

[java] view
plain
copy

  1. @Component("myListener")
  2. public class MyListener implements ServletContextListener{
  3. /**
  4. * @param arg0
  5. * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
  6. */
  7. @Override
  8. public void contextDestroyed(ServletContextEvent arg0) {
  9. System.out.println("contextDestroyed...");
  10. }
  11. /**
  12. * @param arg0
  13. * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
  14. */
  15. @Override
  16. public void contextInitialized(ServletContextEvent arg0) {
  17. System.out.println("listener contextInitialized...");
  18. }
  19. }

如果觉得控制力度不够灵活(例如你想修改filter的映射),spring boot还提供了 ServletRegistrationBean,FilterRegistrationBean,ServletListenerRegistrationBean这3个东西来进行配置

修改filter的映射

[java] view
plain
copy

  1. @Configuration
  2. public class WebConfig {
  3. @Bean
  4. public FilterRegistrationBean filterRegistrationBean(MyFilter myFilter){
  5. FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
  6. filterRegistrationBean.setFilter(myFilter);
  7. filterRegistrationBean.setEnabled(true);
  8. filterRegistrationBean.addUrlPatterns("/bb");
  9. return filterRegistrationBean;
  10. }
  11. }

4. 配置servlet 容器

可以通过两种方式配置servlet容器,一种是通过properties文件,例如:

[java] view
plain
copy

  1. server.port=8081
  2. server.address=127.0.0.1
  3. server.sessionTimeout=30
  4. server.contextPath=/springboot

完整的配置信息可以看这 http://github.com/spring-projects/spring-boot/tree/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java

另一种方式是java代码的形式:

[java] view
plain
copy

  1. @Component
  2. public class MyCustomizationBean implements EmbeddedServletContainerCustomizer  {
  3. /**
  4. * @param container
  5. * @see org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer#customize(org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer)
  6. */
  7. @Override
  8. public void customize(ConfigurableEmbeddedServletContainer container) {
  9. container.setContextPath("/sprintboot");
  10. container.setPort(8081);
  11. container.setSessionTimeout(30);
  12. }
  13. }

5. error 处理

spring boot 提供了/error映射来进行错误处理,它会返回一个json来对错误信息进行描述(包含了http状态和异常信息),例如404的错误

当然可以定制错误页面,通过实现ErrorController接口,并将它装配起来即可,如下:

[java] view
plain
copy

  1. @Controller
  2. public class ErrorHandleController implements ErrorController {
  3. /**
  4. * @return
  5. * @see org.springframework.boot.autoconfigure.web.ErrorController#getErrorPath()
  6. */
  7. @Override
  8. public String getErrorPath() {
  9. return "/screen/error";
  10. }
  11. @RequestMapping
  12. public String errorHandle(){
  13. return getErrorPath();
  14. }
  15. }

还可以这样:

[java] view
plain
copy

  1. @Component
  2. private class MyCustomizer implements EmbeddedServletContainerCustomizer {
  3. @Override
  4. public void customize(ConfigurableEmbeddedServletContainer container) {
  5. container.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/screen/error"));
  6. }
  7. }

6.模板引擎

spring boot 会自动配置 FreeMarker,Thymeleaf,Velocity,只需要在pom中加入相应的依赖即可,例如应用Velocity

[html] view
plain
copy

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-velocity</artifactId>
  4. </dependency>

默认配置下spring boot会从src/main/resources/templates目录中去找模板

7.
jsp限制

如果要在spring boot中使用jsp,得将应用打包成war,这里有配置的example https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp

spring boot web相关配置的更多相关文章

  1. 转-spring boot web相关配置

    spring boot web相关配置 80436 spring boot集成了servlet容器,当我们在pom文件中增加spring-boot-starter-web的maven依赖时,不做任何w ...

  2. 【转】spring boot web相关配置

    spring boot集成了servlet容器,当我们在pom文件中增加spring-boot-starter-web的maven依赖时,不做任何web相关的配置便能提供web服务,这还得归于spri ...

  3. Spring Boot SSL [https]配置例子

    前言 本文主要介绍Spring Boot HTTPS相关配置,基于自签证书实现: 通过本例子,同样可以了解创建SSL数字证书的过程: 本文概述 Spring boot HTTPS 配置 server. ...

  4. Springboot 系列(六)Spring Boot web 开发之拦截器和三大组件

    1. 拦截器 Springboot 中的 Interceptor 拦截器也就是 mvc 中的拦截器,只是省去了 xml 配置部分.并没有本质的不同,都是通过实现 HandlerInterceptor ...

  5. Spring Boot 2.0 配置图文教程

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 ...

  6. Springboot 系列(五)Spring Boot web 开发之静态资源和模版引擎

    前言 Spring Boot 天生的适合 web 应用开发,它可以快速的嵌入 Tomcat, Jetty 或 Netty 用于包含一个 HTTP 服务器.且开发十分简单,只需要引入 web 开发所需的 ...

  7. spring boot @ConditionalOnxxx相关注解总结

    Spring boot @ConditionalOnxxx相关注解总结 下面来介绍如何使用@Condition public class TestCondition implements Condit ...

  8. Spring Boot 外部化配置(一)- Environment、ConfigFileApplicationListener

    目录 前言 1.起源 2.外部化配置的资源类型 3.外部化配置的核心 3.1 Environment 3.1.1.ConfigFileApplicationListener 3.1.2.关联 Spri ...

  9. Spring Boot的自动配置

    Spring Boot的自动配置 --摘自https://www.hollischuang.com/archives/1791 随着Ruby.Groovy等动态语言的流行,相比较之下Java的开发显得 ...

随机推荐

  1. CodeForces 189A 166E 【DP ·水】

    非常感谢 Potaty 大大的援助使得我最后A出了这两题DP ================================== 189A : 求切分后的ribbon最多的数目,不过要求切分后只能存 ...

  2. Python 2.7 学习笔记 内置语句、函数、标准库

    使用任何开发语言进行软件开发,都离不开语言提供的内置库(或Api),甚至说内置库的强大及使用是否方便都会影响大家对开发语言的选择. python语言,一样提供了很多内置的功能,可供开发时使用.主要有如 ...

  3. docker学习笔记13:Dockerfile 指令 WORKDIR介绍

    Dockerfile中的WORKDIR指令用于指定容器的一个目录, 容器启动时执行的命令会在该目录下执行. 相当于设置容器的工作目录了.我们来看一个dockerfile文件 #test FROM ub ...

  4. 【HTTP 2】简介(Introduction)

    前情提要 在上一篇文章<[HTTP 2.0] 序言>中,我们简要介绍了 HTTP 2 协议的概要和协议状态. 在本篇文章中,我们将会了解到 HTTP 2 协议简介(Introduction ...

  5. 【每日一摩斯】-Shared Pool优化和Library Cache Latch冲突优化 (1523934.1)-系列3

    减轻Shared Pool负载 Parse一次并执行多次        在OLTP类型的应用中,最好的方法是只让一个语句被解析一次,然后保持这个cursor的打开状态,在需要的时候重复执行它.这样做的 ...

  6. 基于visual Studio2013解决算法导论之054图的邻接矩阵表示

     题目 图的邻接矩阵表示 解决代码及点评 // 图的邻接矩阵表示.cpp : 定义控制台应用程序的入口点. // #include <iostream> #include <l ...

  7. #AzureChat - 自动伸缩和虚拟机

    我们很高兴地推出再一次 #AzureChat,这是 @WindowsAzure 团队为您精心打造的一个在 Twitter 上进行的聊天活动! #AzureChat 专注于云计算的各个方面以及云开发的最 ...

  8. 使用Powershell 脚本发送邮件乱码问题?

    最近在使用Powershell 编码的时候发现一个问题,只要邮件中有中文字符的邮件执行脚本以后,我们发现收到邮件都是乱码,状况如下: 对比下Powershell脚本,我们将邮件的·ENCODING 加 ...

  9. Http的操作(不传递参数)

    ttpResponse  httpResponse = null;       HttpEntity  httpEntity = null; HttpGet httpGet = new HttpGet ...

  10. python 3.4 装matplotlib numpy

    为了装个matplotlib包,搞了好久:   python3.4,官方没有对应版本的包,只能去下面这个地方下对应的版本: http://www.lfd.uci.edu/~gohlke/pythonl ...