SpringBoot Series (4) ---- Desarrollo web (1)

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.
Inserte la descripción de la imagen aquí
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 webjarscosas, todo por pom.xmlrecursos 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 a classpath:/META-INF/resources/webjars/buscar recursos, webjars de jarmanera que redistribuya estática Recursos del paquete (es decir, todos podemos http://localhost:8080/webjars/xxacceder 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:
    Inserte la descripción de la imagen aquí
  • 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.jsque al acceder solo es necesario escribir el nombre del recurso en webjars.
    Inserte la descripción de la imagen aquí

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.jsencontramos 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.
    Inserte la descripción de la imagen aquí
  • Simplemente coloque Chart.min.js en una de las tres carpetas, y luego http://localhost:8080/Chart.min.jspodrá acceder a él a través de
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

Configurar el mapeo de la página de bienvenida

  • Página de bienvenida; todas las index.htmlpá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 directamente index.html, que es equivalente a nuestro SpringMVC anterior index.jsp. Puedes crearla en una de las tres carpetas de recursos estáticos index.htmly luego ejecutarla directamente. No es una demostración aquí.
  • Todos los mismos /favicon.icovalores 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.
Inserte la descripción de la imagen aquí

  • 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 Thymeleafversió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 Thymeleafgramática, experimentemos. Solo necesitamos poner la página HTML en el directorio de plantillas y se Thymeleafrenderizará automáticamente.
  • escribirHellocintroller
@Controller
public class HelloController {
    
    
    //查出数据在页面显示
    @RequestMapping("/success")
    public String success(Map<String, Object> map) {
    
    
        map.put("success", "你好");
        return "success";
    }
}
  • Al templatesescribir 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/successvisitamos la success.htmlpágina visitando, y el resultado después de visitar es el siguiente
    Inserte la descripción de la imagen aquí

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

Inserte la descripción de la imagen aquí

  • 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 ContentNegotiatingViewResolvery BeanNameViewResolverfrijoles.

    • 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.htmlSoporte estático . Acceso estático a la página de inicio

  • FaviconSoporte personalizado (ver más abajo). favicon.ico

  • Registrada automáticamente Converter, GenericConverter, Formatterde los granos.

    • Convertidor: convertidor; saludo de cadena pública (usuario usuario): utilice el convertidor para la conversión de tipos
    • FormatterFormateador; 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 ConfigurableWebBindingInitializerfrijol (ver más abajo).

    Podemos configurar uno ConfigurableWebBindingInitializerpara 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 @Configurationclase de tipo WebMvcConfigurerAdapter, pero sin @EnableWebMvc . Si desea proporcionar instancias personalizadas de RequestMappingHandlerMapping, RequestMappingHandlerAdaptero ExceptionHandlerExceptionResolverpuede declarar una WebMvcRegistrationsAdapterinstancia que proporcione dichos componentes.


Si desea tomar el control completo de Spring MVC, puede agregar su propio @Configurationarchivo 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 MyMvcConfigclase en el paquete de configuración para implementar la WebMvcConfigurerinterfaz, y puede expandir la configuración relacionada con SpringMVC en SpringBoot. WebMvcConfigurerSe 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:

    • WebMvcAutoConfigurationEs 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 WebMvcConfigurerfuncionará 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 @EnableWebMvcanotaciones 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 webjarsacceso predeterminado a los recursos estáticos, etc., fallará

@EnableWebMvc
@Configuration
public class MyMvcConfig implements WebMvcConfigurer{
    
    
//....
}

¿Por qué @EnableWebMvcfalla la configuración automática? Analicémoslo:

  • @EnableWebMvcCentro
@Import(DelegatingWebMvcConfiguration.class)
public @interface EnableWebMvc {
    
    
  • Haga clic en la DelegatingWebMvcConfigurationcategorí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 @EnableWebMvclos WebMvcConfigurationSupportcomponentes se importan en
  • WebMvcConfigurationSupportSó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 xxxConfigurerayuda en SpringBoot para ayudarnos a expandir la configuración
  • Habrá mucha xxxCustomizerayuda en SpringBoot para la configuración personalizada

Supongo que te gusta

Origin blog.csdn.net/weixin_43844418/article/details/114019081
Recomendado
Clasificación