第16章 Web应用程序

16.3 MVC和Spring MVC介绍

16.3.3 Spring MVC WebApplicationContext层次结构

在Spring MVC中,DispatcherServlet是接受请求并将它们分发给相应控制器的中央servlet。在Spring MVC应用程序中,可以有多种用于不同目的的DispatcherServlet实例,并且每个DispatcherServlet都有自己的WebApplicationContext配置,该配置定义了servlet级别的特性。在servlet级别的WebApplicationContext配置下,Spring MVC维护者一个根WebApplicationContext,其中包含应用级别的配置。根WebApplicationContext可以供所有servlet级别的WebApplicationContext使用。

16.3.4 Spring MVC请求生命周期

TODO

Spring MVC应该深入学习

  • 过滤器
  • 调度程序servlet,DispatcherServlet
  • 通用服务,包括国际化、主题、文件上传等
  • 处理映射,HandlerMapping
  • 处理程序拦截器
  • 处理程序异常解析器,HandlerExceptionResolver,@ExceptionHandler
  • 视图解析,ViewResolver

16.3.5 Spring MVC配置

要想使用基于代码的配置,必须开发实现org.springframework.web.WebApplicationInitializer接口的类。可以实现抽象类org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer(接口的子类)。

实现了WebApplicationInitializer接口的类都会被org.springframework.web.SpringServletContainerInitializer(实现了Servlet3.0的javax.servlet.ServletContainerInitializer接口)自动检测到,该类可以在任何Servlet3.0容器中自动启动。

16.3.6 在Spring MVC中创建第一个视图

JSPX是格式良好的XML格式的JSP。

16.3.7 配置DispatcherServlet

org.springframework.web.servlet.config.annotation.WebMvcConfigurer通过定义回调方法为Spring MVC定义了通过@EnableWebMvc启用的基于Java的配置。

16.9 实现歌手信息视图

16.9.5 启用JSR-349(bean验证)

要在Web数据绑定过程中启用JRS-349验证,需要将@Valid注解应用于Controller类的方法入参上。

为了提供JRS-349验证,需要定义一个验证器bean,例如使用LocalValidatorFactoryBean。

16.10 使用jQuery和jQuery UI

16.10.6 在服务器端启用分页

org.springframework.data.repository.PagingAndSortingRepository

16.11 处理文件上传

很长一段时间,标准的servlet规范不支持文件上传。因此,Spring MVC需要与其他库(最常见的是Apache Commons FileUpload库)一起使用。SpringMVC内置了对Apache Commons FileUpload的支持。

但是,从Servlet3.0开始,文件上传成为Web容器的一项内置功能。Spring支持Servlet3.0文件上传功能。

16.11.1 配置文件上传支持

org.springframework.web.multipart.MultipartResolver

org.springframework.web.servlet.support.AbstractDispatcherServletInitializer#customizeRegistration

javax.servlet.MultipartConfigElement

// ------------WebMvcConfigurer --------------- //
public class WebConfig implements WebMvcConfigurer {
@Bean
StandardServletMultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
} // ------------WebApplicationInitializer--------------- //
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setMultipartConfig(getMultipartConfigElement());
} private MultipartConfigElement getMultipartConfigElement() {
return new MultipartConfigElement(
null, MAX_FILE_SIZE, MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD);
}
}

16.12 用Spring Security保护Web应用程序

16.12.1 配置Spring安全性

在Spring4.0中,引入了

org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer,可以通过扩展该类配置Spring安全性。

在Spring3之前,默认的登录URL为/j_spring_security_check,并且身份验证密钥的默认名称为j_username和j_password。从Spring4开始,默认的登录URL为/login,身份验证密钥的默认名称是username和password。

16.13 使用Spring Boot创建Spring Web应用程序

Thymeleaf是一个XML/XHTML/HTML5模板引擎,可以在Web和非Web环境中使用。是Spring最适合的模板引擎,是Spring的创造者和项目负责人启动的项目,目的是为Spring MVC提供应有的模板引擎。是JSP和Tiles的实用替代方案。

16.16 使用Thymeleaf扩展

使用webjars

创建Web网页的最常用框架可以以不同方式使用,方法是将它们作为依赖项添加到应用程序中,并打包为Jar(成为webjars)。

<link href="../../public/css/bootstrap.min.css"
th:href="@{/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css}"
rel="stylesheet" media="screen"/>
<script src="http://cdn.jsdelivr.net/webjars/jquery/3.2.1/jquery.min.js" th:src="@{/webjars/jquery/3.2.1/jquery.min.js}"></script>

20191105 《Spring5高级编程》笔记-第16章的更多相关文章

  1. C#高级编程9 第16章 错误和异常

    C#高级编程9 第16章 错误和异常 了解这章可以学会如何处理系统异常以及错误信息. System.Exception类是.NET运行库抛出的异常,可以继承它定义自己的异常类. try块代码包含的代码 ...

  2. C#高级编程笔记之第二章:核心C#

    变量的初始化和作用域 C#的预定义数据类型 流控制 枚举 名称空间 预处理命令 C#编程的推荐规则和约定 变量的初始化和作用域 初始化 C#有两个方法可以一确保变量在使用前进行了初始化: 变量是字段, ...

  3. C#高级编程笔记之第一章:.NET体系结构

    1.1 C#与.NET的关系 C#不能孤立地使用,必须与.NET Framework一起使用一起考虑. (1)C#的体系结构和方法论反映了.NET基础方法论. (2)多数情况下,C#的特定语言功能取决 ...

  4. 20191105 《Spring5高级编程》笔记-【目录】

    背景 开始时间:2019/09/18 21:30 Spring5高级编程 版次:2019-01-01(第5版) Spring5最新版本:5.1.9 CURRENT GA 官方文档 Spring Fra ...

  5. 读《C#高级编程》第1章问题

    读<C#高级编程>第1章 .Net机构体系笔记 网红的话:爸爸说我将来会是一个牛逼的程序员,因为我有一个梦,虽然脑壳笨但是做事情很能坚持. 本章主要是了解.Net的结构,都是一些概念,并没 ...

  6. Android高级编程笔记(四)深入探讨Activity(转)

    在应用程序中至少包含一个用来处理应用程序的主UI功能的主界面屏幕.这个主界面一般由多个Fragment组成,并由一组次要Activity支持.要在屏幕之间切换,就必须要启动一个新的Activity.一 ...

  7. java JDK8 学习笔记——第16章 整合数据库

    第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...

  8. C#高级编程9 第18章 部署

    C#高级编程9 第18章 部署 使用 XCopy 进行部署 本主题演示如何通过将应用程序文件从一台计算机复制到另一台计算机来部署应用程序. 1.将项目中生成的程序集复制到目标计算机,生成的程序集位于项 ...

  9. C#高级编程9 第17章 使用VS2013-C#特性

    C#高级编程9 第17章 使用VS2013 编辑定位到 如果默认勾选了这项,请去掉勾选,因为勾选之后解决方案的目录会根据当前文件选中. 可以设置项目并行生成数 版本控制软件设置 所有文本编辑器行号显示 ...

随机推荐

  1. PAT Advanced 1007 Maximum Subsequence Sum (25 分)

    Given a sequence of K integers { N​1​​, N​2​​, ..., N​K​​ }. A continuous subsequence is defined to ...

  2. Linux如何配置ftp服务器、给ftp服务器添加访问用户

    本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...

  3. Django【第16篇】:Django之Form组件自定义验证规则

    自定义验证规则以及中间件简单介绍 1.python2和python3中的区别 对于python2内置的字符串类型有str和unicode 比如:"abc"是字符串,u"你 ...

  4. eclipse中export 的jar file与 runnable jar file的区别

    (1)直接运行 .class的方法     java  -cp .  com.guangfa.demo1  , 不用加.class后缀 .-cp 是 -classpath 缩写,是指定类运行所依赖其他 ...

  5. 【LuoguP4916】魔力环

    题目链接 题意 求出 \(n\) 个珠子的在旋转同构意义下的手 环 个数,满足以下条件: 恰好有 \(m\) 个黑色珠子,其余为白色. 黑色珠子形成的最长连续段不能超过 \(k\) 个. Sol 考虑 ...

  6. Python---进阶---捕获异常

    一.编写一个计算减法的方法,当第一个数小于第二个数时,抛出“被减数不能小于减数”的异常 ------------------------------------------------- def ji ...

  7. 阿里云视频云正式支持AV1编码格式 为视频编码服务降本提效

    今天我们要说的 AV1 可不是我们平时说的 .AVI 文件格式,它是由AOM(Alliance for Open Media,开放媒体联盟)制定的一个开源.免版权费的视频编码格式,可以解决H.265昂 ...

  8. 如何在MySQL中使用explain查询SQL的执行计划?

    1.什么是MySQL执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解. MySQL本身的功能架构分为三个部分,分别是 应用层.逻辑层.物理层,不只是MyS ...

  9. vim插件cscope使用方法

    一.安装cscope 安装方式比较多样,可以在各自linux软件管理工具中安装,也可以去官网下载安装. sudo apt-get install cscope 二.插件安装 这里选择的是Vundle来 ...

  10. POJ 1252 Euro Efficiency ( 完全背包变形 && 物品重量为负 )

    题意 : 给出 6 枚硬币的面值,然后要求求出对于 1~100 要用所给硬币凑出这 100 个面值且要求所用的硬币数都是最少的,问你最后使用硬币的平均个数以及对于单个面值所用硬币的最大数. 分析 :  ...