[读书笔记]《Spring Boot 2企业应用实战》第三章

第3章

3.1 Spring Boot的Web开发支持

  • spring-boot-starter-web为Web开发提供支持,其中包含一些预定义的常用依赖包,提供嵌入式Tomcat以及Spring MVC的依赖。
  • 与Web相关的配置保存在spring-boot-autoconfigure.jar的org.springframework.boot.autoconfigure.web下面,重要的配置如下:
    • HttpEncondingAutoConfiguration和HttpEncodingProperties用来自动配置http的编码
    • JacksonHttpMessageConvertersConfiguration用来自动配置Jackson相关的Converter
    • MutipartAutoConfiguration和MultipartProperties用来自动配置上传文件的属性
    • ServerPropertiesAutoConfiguration和ServerProperties用来自动配置内嵌的Servlet容器
    • WebMvcAutoConfiguration和WebMvcProperties用来自动胚子Spring MVC功能

      3.2 Thymeleaf 模板引擎

  • Thymeleaf是面向Web和独立环境的现代服务器端Java模板引擎,能够处理HTML、XML、JavaScript、CSS甚至纯文本,可以作为MVC Web应用层的View层显示数据。
  • Thymeleaf是一个扩展性很强的模板引擎,允许开发者自定义模板,并且很好的处理细节。
  • Thymeleaf标准方言中大多数处理器都是属性处理器。这样,即使在模板未被处理之前,浏览器也可以正确地显示HTML模板文件,因为浏览器将简单地忽略其不识别的属性。
  • 引入Thymeleaf:要像如下所示改写标签
      <html xmlns:th:"htpp://www.thymeleaf.org">
    
    这样才可以在其他标签里面使用th:*这样的语法。
    通过xmlns:th:"htpp://www.thymeleaf.org"命名空间,引入Thymeleaf模板引擎,将静态页面转换为动态页面。需要进行动态处理的元素都使用"th:"为前缀。

    3.3 Spring和Thymeleaf 的整合

  • Thymeleaf与Spring整合后,可以在Spring MVC应用中完全替代JSP文件
    • 使用Spring MVC的@Controller注解来映射Thymeleaf的模板文件
    • 在模板中使用SpringEL表达式来替换OGNL
    • 在模板中创建的表单,完全支持Beans和结果的绑定,包括使用PropertyEditor、转换和验证等
    • 可以通过Spring来管理国际化文件显示国际化信息
  • Thymeleaf的Spring方言中还有以下特点:
    • Thymeleaf不适用于OGNL,而是SpringELse实现变量表达式
    • 访问应用context中的Beans可以使用SpringEL语法:${@myBean.doSomething()}
    • 基于表格处理的新属性:th:field、th:errors和th:errorclass,此外还有一个th:object的新实现,允许它使用表单命令选择器
    • 在Spring5.0集成中提供多个新的表达式
  • Thymeleaf提供一个org.thymeleaf.spring4.SpringTemplateEngine类,用来执行在Spring MVC中使用Thymeleaf模板引擎,另外还提供一个TemplateResolver用来设置通用的模板引擎。

    3.4 Spring Boot的Thymeleaf 支持

  • Spring Boot通过org.springframework.boot.autoconfiguration.thymeleaf包对Thymeleaf进行自动配置。
  • Thymeleaf包下最重要的类是ThymeleafAutoConfiguration和ThymeleafProperties
    • ThymeleafAutoConfiguration类对集成所需要的Beans进行自动配置,包括templateEngine和templateResolver的配置
    • ThymeleafProperties类读取application.properties配置文件,设置Thymeleaf的属性以及默认配置

      3.5 Spring Boot的Web开发实例

  • pom.xml文件引入thymeleaf依赖
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-thymeleaf</artifactId>
      </dependency>
    
  • 响应Thymeleaf表达式(以表达式访问数据为例)
    • index.html中的超链接:
        <a th=href="@{regexptest?loginName=Jemi5un&amp;password=123456}">测试表达式访问数据</a>
      
    • IndexController.java实现跳转:
        //指示该类为一个控制器
        @Controller
        public class IndexController{
            //用于映射请求的URL
            @RequestMapping("/")
            public String index(){
                return "index";
            }
        }
      
    • ThymeleafController.java来响应index.html中的请求:
        @Controller
        public class ThymeleafController{
            @RequestMapping("/regexptest")
            public String regexptest(HttpServletRequest request,HttpSession session){
            // 保存数据到request作用范围域当中
            request.setAttribute("book", "疯狂Spring Boot讲义");
            // 保存数据到session作用范围域当中
            session.setAttribute("school", "疯狂软件");
            // 保存数据到ServletContext(application)作用范围域当中
            request.getServletContext().setAttribute("name", "Thymeleaf模板引擎");
            return "success1";
            }
        }
      
      success1.html接收参数:
            <p><font color="red">${param.x}将返回一个名为x的请求参数</font></p><br/>
            访问页面传递的参数:<span th:text="${param.loginName[0]}">登录名</span>&nbsp;<span th:text="${param.password[0]}">密码</span>
            <p><font color="red">${x}将返回存储在Thymeleaf上下文中的变量x或作为请求Request作用范围域中的属性。</font></p><br/>
            访问request作用范围域中的变量:<span th:text="${book}">图书信息</span><br/>
            <p><font color="red">${session.x}将返回一个名为x的会话HttpSession作用范围域中的属性。</font></p><br/>
            访问session作用范围域中的变量:<span th:text="${session.school}">培训中心</span><br/>
            <p><font color="red">${application.x}将返回一个名为x的全局ServletContext上下文作用范围域中的属性。</font></p><br/>
            访问application作用范围域中的变量:<span th:text="${application.name}">动态页面模板</span><br/>
      

      3.6 Spring Boot对Jsp的支持

      添加JSP支持
      像先前一样创建Maven项目,选定webapp配置,修改pom.xml添加启动器、spring-boot-starter-web模块依赖、Servlet依赖、JSTL依赖以及Tomcat依赖。创建application.properties配置文件,添加页面配置信息:
      # 页面默认前缀目录
      spring.mvc.view.prefix=/WEB-INF/JSP/
      # 响应页面默认后缀
      spring.mvc.view.suffix=.jsp
      

      3.7 Spring Boot处理JSON数据

  • Spring Boot内置了JSON解析功能,默认使用Jackson来自动完成(开发中也可以吧Jackson换成阿里的Fastjson或者其他的JSON解析器),当Controller返回的是一个Java对象或者是List集合时,Spring Boot自动将其转换成JSON数据,使用起来非常简单。

    3.8 Spring Boot文件上传下载

  • 为了能上传文件,必须将表单的method设置为post,并将enctype设置为multipart/form-data。
  • Servlet3.0规范已经提供相关方法来处理文件上传,需要在Servlet中完成。Spring MVC使用Apache Commons FileUpload技术实现了一个MultipartResolver实现类:CommonsMultipartResolver来封装。而Spring Boot的spring-boot-starter-web集成了Spring MVC。
  • MultipartFile对象重点方法如下:
    • byte[] getByte():获取文件数据。
    • String getContentType():获取文件MIME类型,如image/jpeg等。
    • InputStream getInputStream():获取文件流。
    • String getName():获取表单中文件组件的名字。
    • String getOriginalFilename():获取上传文件的原名。
    • long getSize():获取文件的字节大小,单位为byte。
    • boolean isEmpty():是否有上传的文件。
    • void transferTo(File dest):将上传文件保存到一个目标文件当中。
  • 默认上传文件大小是1MB,当上传文件超过1MB时就会报错。可以在application.properties中设置上传文件的参数。
      //设置单个文件的大小
      spring.http.multipart.maxFileSize=50MB
      //设置总上传的数据大小
      spring.http.multipart.maxRequestSize=50MB
    

    3.9 Spring Boot的异常处理

  • 在异常抛出的时候,Controller会使用@ExceptionHandler注解的方法去处理异常,而不会抛出给 Servlet 容器
#读书笔记##笔记#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务