spring boot web相关配置

  • 80436

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注解修改),创建方式如下:

  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配置的映射是/*,创建方式如下:

  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配置

  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的映射

  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文件,例如:

  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代码的形式:

  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接口,并将它装配起来即可,如下:

  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. }

还可以这样:

  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

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

  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. php程序突然不能用file_get_contents()访问远程网址了?

    php程序用file_get_contents("http://www.***.com"),一直以来好好的,突然间就不能链接远程网址了,在shell下可以ping通远程网址,可是用 ...

  2. Confluence 6 自动添加用户到用户组

    默认组成员(Default Group Memberships) 选项在 Confluence 3.5 及后续版本和 JIRA 4.3.3 及后续版本中可用.这字段将会在你选择 'Read Only, ...

  3. cas Cas20ProxyReceivingTicketValidationFilter

    Cas20ProxyReceivingTicketValidationFilter  继承AbstractTicketValidationFilter,这里有几个模板方法.例如getTicketVal ...

  4. CAS 服务端数据库认证

    CAS-服务端数据库认证 数据认证需要相关的jar包: cas-server-support-jdbc-x.x.x.jar MySQL-connector-Java-x.x.x-bin.jar 修改C ...

  5. html-中文字体在CSS中的显示(Unicode编码)(转载)

    为了方便需要的朋友快速使用,下表中列出了一些常用中文字体的Unicode编码: 宋体                   SimSun     \5B8B\4F53黑体                ...

  6. c#输出指定信息到文本文件中(追加方式)

    /// <summary> /// 输出指定信息到文本文件 /// </summary> /// <param name="msg">输出信息& ...

  7. Flask初级(五)flash在模板中使用继承,模板的模板

    Project name :Flask_Plan templates:templates static:static 继续上一篇文章. 我们不希望每个页面都写一遍引入js,css,导航条……………… ...

  8. html <meta>设置自动刷新或者几秒内跳转到指定页面

    指定时间自动刷新: <meta http-equiv="refresh" content="2"/> 指定时间跳转到指定页面: <meta h ...

  9. Word文档加密小技巧

    文件菜单设置: 1.打开需要加密的Word文档. 2.选“文件”的“另存为”,出现“另存为”对话框,在“工具”中选“常规选项”,出现“保存”选项卡. 3.分别在“打开权限密码”和“修改权限密码”中输入 ...

  10. Jmeter BeanShell 从数据库中获取数据并创建一个requesBody

    一.前言 在测试接口的时候常常会使用到数据库中的数据,当要使用大量的数据时,仅仅使用数据库查询是不够的.还需要使用自动化让操作更简便. 下面以一个简单的例子阐述一下如何使用beanShell让代码更简 ...