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. 《算法导论》读书笔记之图论算法—Dijkstra 算法求最短路径

    自从打ACM以来也算是用Dijkstra算法来求最短路径了好久,现在就写一篇博客来介绍一下这个算法吧 :) Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的 ...

  2. 人人都用 Retina 屏幕的 MacBook Pro 笔记本电脑

    自从今年年初 Apple 官网产品降价我立即买了 13 寸的 Retina 屏 MacBook Pro(rMBP)之后, 这款苹果的笔记本电脑就成了我在公司和家里的唯一电脑(就是这一款). 使用苹果的 ...

  3. cocos2dx进阶学习之CCObject

    继承关系 CCObject -> CCCopying 类定义 class CC_DLL CCObject : public CCCopying { public: // object id, C ...

  4. hdu 1528 Card Game Cheater ( 二分图匹配 )

    题目:点击打开链接 题意:两个人纸牌游戏,牌大的人得分.牌大:2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < T < J < ...

  5. ListBox控件

    主要介绍:自定义数据.绑定数据库数据 前台代码: <div> <asp:ListBox ID=" Width ="100px"> <asp: ...

  6. BZOJ 1704: [Usaco2007 Mar]Face The Right Way 自动转身机( 贪心 )

    贪心...先枚举k, 然后从左往右扫一遍, 发现位置p的牛的状态不符合就将 [p, p + k ) 的牛都转身, 假如p + k - 1 已经超过了最右边牛的位置那这个k就不符合要求. 符合要求的就可 ...

  7. Selenium Grid跨浏览器-兼容性测试

    Selenium Grid跨浏览器-兼容性测试 这里有两台机子,打算这样演示: 一台机子启动一个作为主点节的hub 和 一个作为次节点的hub(系统windows 浏览器为ie) ip为:192.16 ...

  8. MONGODB的内部构造 FROM 《MONGODB THE DEFINITIVE GUIDE》

    今天下载了<MongoDB The Definitive Guide>电子版,浏览了里面的内容,还是挺丰富的.是官网文档实际应用方面的一个补充.和官方文档类似,介绍MongoDB的内部原理 ...

  9. duck

    http://bjdw.artgooo.com/event/rubber/duck.shtml

  10. FindChildControl与FindComponent

    前两天编码遇到了要使用FindChildControl方法获取指定名称的TSpeedButton按钮,结果折腾了半天就是没得结果(基础不扎实,呵呵),于是赶紧搜索了下,补习关于这两个方法的用法. TW ...