新手搭建springboot框架的时候走过的坑

新手搭建springboot微服务框架的时候,出现的一个小问题及如何解决的记录下来,分享给大家。

一、springboot与视图引擎


新手搭建springboot框架的时候走过的坑_第1张图片

新建一个controller,这样最基本的加上@Controller和@RequestMapping,这时候启动程序访问页面是不行的。

Spring Boot提供了默认配置的模板引擎主要有以下几种:Thymeleaf FreeMarker Velocity Groovy Mustache

springboot中推荐使用Thymeleaf,这里是因为缺少了视图引擎的配置,所以启动不成功。在pom.xml中引入

       


    org.springframework.boot
    spring-boot-starter-thymeleaf
即可。

二、解决thymeleaf的html5严格语法校验

还需要说明一下 使用thymeleaf的时候,会对html进行严格的语法校验,实际并没有什么必要,如下是解决方法:

      


  net.sourceforge.nekohtml
  nekohtml
  1.9.22
同时在配置文件application.properties中进行如下配置:
spring.thymeleaf.mode=LEGACYHTML5

将spring.thymeleaf.mode默认值为“HTML5”的严格模式,改为“LEGACYHTML5”非严格模式;LEGACYHTML5的使用需要与nekohtml依赖相搭配搭配。

页面html标签必须引入xmlns:th="http://www.thymeleaf.org" 


页面中其他thymeleaf的标签作用请自行百度。

三、控制器上添加@RequestMapping注解后,在跳转的页面加载静态资源时,在静态资源的访问路径下自动加上了@RequestMapping的值

Spring Boot 默认的处理方式就已经足够了,默认情况下Spring Boot 使用WebMvcAutoConfiguration中配置的各种属性。

建议使用Spring Boot 默认处理方式,需要自己配置的地方可以通过配置文件修改。

但是如果你想完全控制Spring MVC,你可以在@Configuration注解的配置类上增加@EnableWebMvc,增加该注解以后WebMvcAutoConfiguration中配置就不会生效,你需要自己来配置需要的每一项。这种情况下的配置方法建议参考WebMvcAutoConfiguration类。

以下内容针对Spring Boot 默认的处理方式

Spring Boot 默认配置的/**映射到/static

新手搭建springboot框架的时候走过的坑_第2张图片

如果你所有的静态资源文件都是在static文件夹下的,那么springboot默认的配置已经足够用了。但是如果你新建了文件夹的话 就需要自己去配置

注意:上面的/static等目录都是在classpath:下面。

如果你想增加如/mystatic/**映射到classpath:/mystatic/,你可以让你的配置类继承WebMvcConfigurerAdapter,然后重写如下方法:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/mystatic/**").addResourceLocations("classpath:/mystatic/");
}

这种方式会在默认的基础上增加/mystatic/**映射到classpath:/mystatic/,不会影响默认的方式,可以同时使用。

注意

index.html中该如何引用上面的静态资源 呢


注意:JS前面要带上斜杠,表示去到默认的static目录下面去找js目录下的jquery文件。

如果不带的话,给controller的@RequestMapping的注解,访问页面的时候静态资源路径就会带上这个值.切记!切记!

四、使用AOP控制全局异常的处理

在pom.xml中引入aop配置:


 
      org.springframework.boot
      spring-boot-starter-aop
 

建立GlobalExceptionHandler类处理全局异常

@ControllerAdvice
public class GlobalExceptionHandler {
    private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(value = RuntimeException.class)
    public ModelAndView tipException(Exception e) {
        LOGGER.error("find exception:e={}",e.getMessage());
        e.printStackTrace();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("common/500");//返回自定义渲染页面
        return modelAndView;
    }


    @ExceptionHandler(value = Exception.class)
    public ModelAndView exception(Exception e){
        LOGGER.error("find exception:e={}",e.getMessage());
        e.printStackTrace();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("common/404");//返回自定义渲染页面
        return modelAndView;
    }
}
@ControllerAdvice + @ExceptionHandler 进行全局的 Controller 层异常处理

  • 优点:将 Controller 层的异常和数据校验的异常进行统一处理,减少模板代码,减少编码量,提升扩展性和可维护性。
  • 缺点:只能处理 Controller 层未捕获(往外抛)的异常,对于 Interceptor(拦截器)层的异常,Spring 框架层的异常,就无能为力了

五、Druid监控

pom.xml配置



   com.alibaba
   druid
   1.0.18
配置Druid配置

@Configuration
public class DruidConfig {

    @Bean
    public ServletRegistrationBean druidServlet() {

        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        //登录查看信息的账号密码.

        servletRegistrationBean.addInitParameter("loginUsername","admin");

        servletRegistrationBean.addInitParameter("loginPassword","123456");
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}
Druid是阿里巴巴开源的一个项目,是当前性能最高的DBCP,也可以对数据库访问情况,日志,缓存等进行实时监控。

项目运行起来,访问

http://localhost:8085/druid
登录账号密码admin-123456即可查看项目运行情况



有什么问题欢迎大家留言,也可以给我发邮件[email protected]如果看到会及时回复的,谢谢。

你可能感兴趣的:(springboot)