Directorio de artículos
Listo para trabajar
A continuación, usaremos SpringBoot para desarrollar una aplicación relajante. Primero, usamos el asistente de creación de ideas para ayudarnos a crear una aplicación SpringBoot y verificar los módulos que necesitamos. Aquí todavía solo verificamos una escena web, y luego agregamos lo que necesitamos. Necesito más tarde.
SpringBoot ya ha configurado estos escenarios de forma predeterminada. Solo necesita especificar una pequeña cantidad de configuración en el archivo de configuración para ejecutar, y solo debe prestar atención al código comercial.
Reglas de configuración de mapeo de SpringBoot para recursos estáticos
Usar webjars
- Un hombre llamado First SpringBoot de las
webjars
cosas, todo porpom.xml
recursos estáticos introducidos en/webjars/**
el siguiente (esto se puede encontrar en el recurso estático de la clase de autoconfiguración), es decir, SpringBoot irá automáticamente aclasspath:/META-INF/resources/webjars/
buscar recursos, webjars dejar
manera que redistribuya estática Recursos del paquete (es decir, todos podemoshttp://localhost:8080/webjars/xx
acceder a los recursos estáticos correspondientes) - ¿Cómo importar recursos estáticos a través de pom.xml? Podemos ir a la biblioteca de recursos de webjars para encontrar, básicamente, todos los frascos de recursos estáticos se pueden encontrar aquí. Importamos las siguientes dependencias en el proyecto:
<!-- 引入jquery-webjar -->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.4.1</version>
</dependency>
- Después de que presentamos JQuery, bajo el paquete de dependencia de JQuery, puede ver el contenido de los webjars:
- Introducidos los recursos estáticos de jQuery, comencemos el proyecto, e intentemos acceder a él a través de la ruta correspondiente, la ruta que utilicé aquí es
http://localhost:8080/webjars/jquery/3.4.1/jquery.js
que al acceder solo es necesario escribir el nombre del recurso en webjars.
Utilizar recursos
- ¿Qué pasa si queremos usar nuestros propios recursos estáticos y no queremos usar webjars?
"/**"
Para acceder a cualquier recurso del proyecto actual nos dirigimos a la (carpeta de recursos estáticos) para encontrar el mapeo, es decir,http://localhost:8080/xxx.js
encontramos xxx en la carpeta de recursos estáticos, si no lo configuramos iremos a lo siguiente carpetas de forma predeterminada Buscar en- "Classpath: / META-INF / resources /",
- "Classpath: / resources /",
- "Classpath: / static /",
- "Classpath: / public /"
- "/": La ruta raíz del proyecto actual
Es decir, a través de “/**”
los recursos estáticos a los que se accede, SpringBoot irá a lo anterior para buscar recursos, que son las carpetas de recursos estáticos por defecto de SpringBoot
- Crea dos carpetas públicas y recursos para almacenar recursos estáticos para volver a demostrarlo.
- Simplemente coloque Chart.min.js en una de las tres carpetas, y luego
http://localhost:8080/Chart.min.js
podrá acceder a él a través de
Configurar el mapeo de la página de bienvenida
- Página de bienvenida; todas las
index.html
páginas de la carpeta de recursos estáticos ; están"/**"
asignadas; - Es decir, podemos
http://localhost:8080/
acceder directamente a la carpeta de recursos estáticos directamenteindex.html
, que es equivalente a nuestro SpringMVC anteriorindex.jsp
. Puedes crearla en una de las tres carpetas de recursos estáticosindex.html
y luego ejecutarla directamente. No es una demostración aquí. - Todos los mismos
/favicon.ico
valores predeterminados se encuentran en recursos estáticos. Por supuesto, si no queremos usar la carpeta de recursos estáticos predeterminada de SpringBoot, también podemos definir la asignación de recursos estáticos en el archivo de configuración , de la siguiente manera
spring.web.resources.static-locations=classpath:/cz/,classpath:/hello/
spring.web.resources.static-locations es equivalente a una matriz. Cuando hay varias carpetas, solo use comas para separarlas.
Si define la asignación de recursos estáticos usted mismo, las carpetas predeterminadas no tendrán efecto, lo que equivale a los métodos de acceso originales no surtirán efecto.
Motor de plantillas
JSP, Velocity, Freemarker, Thymeleaf, etc., la idea esencial del motor de plantillas es la misma, pero la sintaxis no es muy consistente. Por ejemplo, tome freemarker como ejemplo, como se muestra en la siguiente figura.
- Thymeleaf recomendado por SpringBoot no usa JSP, porque Thymeleaf tiene una sintaxis más simple y funciones más poderosas. Cómo importarlo depende de lo siguiente:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
- Lo que se presenta aquí es la
Thymeleaf
versión de dependencia predeterminada de SpringBoot . Si queremos cambiar la versión, la forma de cambiar es la siguiente, más el número de versión correspondiente.
<properties>
<thymeleaf.version></thymeleaf.version>
<thymeleaf-layout-dialect.version></thymeleaf-layout-dialect.version>
</properties>
Utilice la sintaxis de Thymeleaf
- Antes de usar la
Thymeleaf
gramática, experimentemos. Solo necesitamos poner la página HTML en el directorio de plantillas y seThymeleaf
renderizará automáticamente. - escribir
Hellocintroller
@Controller
public class HelloController {
//查出数据在页面显示
@RequestMapping("/success")
public String success(Map<String, Object> map) {
map.put("success", "你好");
return "success";
}
}
- Al
templates
escribir páginas exitosassuccess.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>成功</h1>
<!--th:text 将div里面的文本内容设置为 -->
<div th:text="${success}"></div>
</body>
</html>
xmlns:th="http://www.thymeleaf.org"
El espacio de nombre introducido, de modo que cuando escribimos el código, la idea tendrá un mensaje
- Después de escribir, comenzamos el proyecto,
localhost:8080/success
visitamos lasuccess.html
página visitando, y el resultado después de visitar es el siguiente
Reglas gramaticales
Para el uso específico de la gramática Thymeleaf, puedes consultar la documentación oficial de Thymeleaf , solo hablaré de las de uso común.
th:text
; Cambiar el contenido del texto en el elemento actual;
-th
: cualquier atributo html; para reemplazar el valor del atributo original
- expresión
Simple expressions:(表达式语法)
Variable Expressions: ${...}:获取变量值;OGNL;
1)、获取对象的属性、调用方法
2)、使用内置的基本对象:
#ctx : the context object.
#vars: the context variables.
#locale : the context locale.
#request : (only in Web Contexts) the HttpServletRequest object.
#response : (only in Web Contexts) the HttpServletResponse object.
#session : (only in Web Contexts) the HttpSession object.
#servletContext : (only in Web Contexts) the ServletContext object.
${session.foo}
3)、内置的一些工具对象:
#execInfo : information about the template being processed.
#messages : methods for obtaining externalized messages inside variables expressions, in the same way as they would be obtained using #{…} syntax.
#uris : methods for escaping parts of URLs/URIs
#conversions : methods for executing the configured conversion service (if any).
#dates : methods for java.util.Date objects: formatting, component extraction, etc.
#calendars : analogous to #dates , but for java.util.Calendar objects.
#numbers : methods for formatting numeric objects.
#strings : methods for String objects: contains, startsWith, prepending/appending, etc.
#objects : methods for objects in general.
#bools : methods for boolean evaluation.
#arrays : methods for arrays.
#lists : methods for lists.
#sets : methods for sets.
#maps : methods for maps.
#aggregates : methods for creating aggregates on arrays or collections.
#ids : methods for dealing with id attributes that might be repeated (for example, as a result of an iteration).
Selection Variable Expressions: *{...}:选择表达式:和${}在功能上是一样;
补充:配合 th:object="${session.user}:
<div th:object="${session.user}">
<p>Name: <span th:text="*{firstName}">Sebastian</span>.</p>
<p>Surname: <span th:text="*{lastName}">Pepper</span>.</p>
<p>Nationality: <span th:text="*{nationality}">Saturn</span>.</p>
</div>
Message Expressions: #{...}:获取国际化内容
Link URL Expressions: @{...}:定义URL;
@{/order/process(execId=${execId},execType='FAST')}
Fragment Expressions: ~{...}:片段引用表达式
<div th:insert="~{commons :: main}">...</div>
Literals(字面量)
Text literals: 'one text' , 'Another one!' ,…
Number literals: 0 , 34 , 3.0 , 12.3 ,…
Boolean literals: true , false
Null literal: null
Literal tokens: one , sometext , main ,…
Text operations:(文本操作)
String concatenation: +
Literal substitutions: |The name is ${name}|
Arithmetic operations:(数学运算)
Binary operators: + , - , * , / , %
Minus sign (unary operator): -
Boolean operations:(布尔运算)
Binary operators: and , or
Boolean negation (unary operator): ! , not
Comparisons and equality:(比较运算)
Comparators: > , < , >= , <= ( gt , lt , ge , le )
Equality operators: == , != ( eq , ne )
Conditional operators:条件运算(三元运算符)
If-then: (if) ? (then)
If-then-else: (if) ? (then) : (else)
Default: (value) ?: (defaultvalue)
Special tokens:
No-Operation: _
Configuración automática SpringMVC
- SpringBoot integra SpringMVC, por lo que las dependencias básicas de la operación SpringMVC se configuran automáticamente en él. ¿Entonces SpringBoot introduce esas dependencias de SpringMVC? Aquí daré una introducción general. Spring Boot proporciona una configuración automática para Spring MVC, que puede funcionar perfectamente con la mayoría de las aplicaciones. Puede ir al documento oficial para ver
La siguiente es la configuración predeterminada de SpringBoot a SpringMVC: ( WebMvcAutoConfiguration
)
-
Inclusión de
ContentNegotiatingViewResolver
yBeanNameViewResolver
frijoles.- ViewResolver se configura automáticamente (ver resolver: obtener el objeto de vista (Ver) de acuerdo con el valor de retorno del método, y el objeto de vista determina cómo renderizar (reenviar, redirigir))
- ContentNegotiatingViewResolver: combina todos los resolutores de vista;
- Cómo personalizar: podemos agregar un solucionador de vistas al contenedor nosotros mismos, combinarlo automáticamente;
-
Compatibilidad con el servicio de recursos estáticos, incluida la compatibilidad con WebJars (ver más abajo). Ruta de carpeta de recursos estáticos, webjars
-
index.html
Soporte estático . Acceso estático a la página de inicio -
Favicon
Soporte personalizado (ver más abajo). favicon.ico
-
Registrada automáticamente
Converter
,GenericConverter
,Formatter
de los granos.- Convertidor: convertidor; saludo de cadena pública (usuario usuario): utilice el convertidor para la conversión de tipos
Formatter
Formateador; 2021.01.01 == Fecha;
El convertidor formateador agregado por nosotros mismos, solo necesitamos ponerlo en el contenedor
@Bean
@ConditionalOnProperty(prefix = "spring.mvc", name = "date-format")//在文件中配置日期格式化的规则
public Formatter<Date> dateFormatter() {
return new DateFormatter(this.mvcProperties.getDateFormat());//日期格式化组件
}
-
Soporte para
HttpMessageConverters
(ver más abajo).-
HttpMessageConverter: SpringMVC se utiliza para convertir solicitudes y respuestas Http; User-Json;
-
HttpMessageConverters
Se determina a partir del contenedor; obtenga todos los HttpMessageConverter;Agregue al contenedor usted mismo
HttpMessageConverter
, simplemente registre sus propios componentes en el contenedor (@Bean,@Component
)
-
-
Registro automático de
MessageCodesResolver
(ver más abajo) Definir reglas de generación de códigos de error -
Uso automático de un
ConfigurableWebBindingInitializer
frijol (ver más abajo).Podemos configurar uno
ConfigurableWebBindingInitializer
para reemplazar el predeterminado; (agregar al contenedor)
Inicializar WebDataBinder;
solicitar datos ===== JavaBean;
org.springframework.boot.autoconfigure.web: todas las escenas automáticas de la web;
Si desea mantener las características de Spring Boot MVC, y solo desea agregar una configuración MVC adicional (interceptores, formateadores, controladores de vista, etc.), puede agregar su propia
@Configuration
clase de tipoWebMvcConfigurerAdapter
, pero sin@EnableWebMvc
. Si desea proporcionar instancias personalizadas deRequestMappingHandlerMapping
,RequestMappingHandlerAdapter
oExceptionHandlerExceptionResolver
puede declarar unaWebMvcRegistrationsAdapter
instancia que proporcione dichos componentes.
Si desea tomar el control completo de Spring MVC, puede agregar su propio@Configuration
archivo anotado con@EnableWebMvc
.
Extienda SpringMVC
- Escriba un archivo de configuración springmvc:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:view-controller path="/hello" view-name="success"></mvc:view-controller>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/hello"/>
<bean></bean>
</mvc:interceptor>
</mvc:interceptors>
</beans>
- Cree una
MyMvcConfig
clase en el paquete de configuración para implementar laWebMvcConfigurer
interfaz, y puede expandir la configuración relacionada con SpringMVC en SpringBoot.WebMvcConfigurer
Se puede usar para extender las funciones de SpringMVC y qué métodos deben implementarse en él. Por ejemplo, podemos extender el convertidor de vista de la siguiente manera
@Configuration
public class MyMvcConfig implements WebMvcConfigurer{
@Override
public void addViewControllers(ViewControllerRegistry registry) {
// super.addViewControllers(registry);
//浏览器发送 /cz 请求来到 success
registry.addViewController("/cz").setViewName("success");
}
}
Visitar localhost: 8080 / cz saltará a la página de éxito, que no solo conserva la configuración original, sino que también puede usar nuestra propia forma de expandir la configuración
-
principio:
WebMvcAutoConfiguration
Es la clase de configuración automática de SpringMVC- Se importará al realizar otra configuración automática
@Import(**EnableWebMvcConfiguration**.class)
- Todo en el contenedor
WebMvcConfigurer
funcionará en conjunto; - También se llamará a nuestra clase de configuración;
-
Efecto : funcionarán tanto la configuración automática de SpringMVC como nuestra configuración extendida;
Si añadimos @EnableWebMvc
anotaciones a la clase de configuración , ¿qué significa? Es decir, nos encargaremos de la configuración de SpringMVC en SpringBoot. Todas las configuraciones por defecto de SpringMVC en SpringBoot serán inválidas. Necesitamos configurarnos nosotros mismos, como por ejemplo lo anterior. El webjars
acceso predeterminado a los recursos estáticos, etc., fallará
@EnableWebMvc
@Configuration
public class MyMvcConfig implements WebMvcConfigurer{
//....
}
¿Por qué @EnableWebMvc
falla la configuración automática? Analicémoslo:
@EnableWebMvc
Centro
@Import(DelegatingWebMvcConfiguration.class)
public @interface EnableWebMvc {
- Haga clic en la
DelegatingWebMvcConfiguration
categoría para ver
@Configuration
public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
- Luego mire la clase de configuración automática de SpringMVC.
@Configuration
@ConditionalOnWebApplication
@ConditionalOnClass({
Servlet.class, DispatcherServlet.class,
WebMvcConfigurerAdapter.class })
//容器中没有这个组件的时候,这个自动配置类才生效
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({
DispatcherServletAutoConfiguration.class,
ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration {
- Podemos encontrar que
@EnableWebMvc
losWebMvcConfigurationSupport
componentes se importan en WebMvcConfigurationSupport
Sólo las funciones más básicas de SpringMVC son importados ;
Cómo modificar la configuración predeterminada de SpringBoot
- Cuando SpringBoot configura automáticamente muchos componentes, primero observe si hay configurados por el usuario en el contenedor (
@Bean、@Component
) Si los hay, use el configurado por el usuario, si no, se configurará automáticamente; si algunos componentes pueden tener múltiples(ViewResolver)
configuraciones de usuario y Combinación autoconfigurada de - Habrá mucha
xxxConfigurer
ayuda en SpringBoot para ayudarnos a expandir la configuración - Habrá mucha
xxxCustomizer
ayuda en SpringBoot para la configuración personalizada