模块:spring-boot-starter-base-web
Web
Развитие является жизненно важной частью развития,Web
Основное содержание разработки в основном включает встроенныеServlet
контейнер иSpring MVC
. важнее,Spring Boot``为web
Разработка предоставляет быстрый и удобный способ разработки с использованием зависимых банок:spring-boot-starter-web
, предоставляет встроенный серверTomcat
так же какSpring MVC
зависимости и автоматически настраиваютсяweb
Связанную конфигурацию можно просмотретьorg.springframework.boot.autoconfigure.web
.
Web
Связанные основные функции:
-
Thymeleaf
шаблонизатор -
Web
Связанная конфигурация -
Tomcat
настроить -
Favicon
настроить
1. Конфигурация шаблона
1.1 Принцип и анализ исходного кода
Spring Boot
Предоставляет большое количество шаблонизаторов, в том числеFreeMarker
,Groovy
,Thymeleaf
,Velocity和Mustache
,Spring Boot
рекомендуется в
использоватьThymeleaf
в качестве шаблонизатора, потому чтоThymeleaf
обеспечивает идеальноеSpring MVC
служба поддержки.
существуетSpring Boot
изorg.springframework.boot.autoconfigure.thymeleaf
Автоматическая настройка реализована в рамках пакета следующим образом:
ThymeleafAutoConfiguration
Исходный код:
@Configuration
@EnableConfigurationProperties(ThymeleafProperties.class)
@ConditionalOnClass({ TemplateMode.class, SpringTemplateEngine.class })
@AutoConfigureAfter({ WebMvcAutoConfiguration.class, WebFluxAutoConfiguration.class })
public class ThymeleafAutoConfiguration {
//配置TemplateResolver
@Configuration
@ConditionalOnMissingBean(name = "defaultTemplateResolver")
static class DefaultTemplateResolverConfiguration {
...
}
//配置TemplateEngine
@Configuration
protected static class ThymeleafDefaultConfiguration {
...
}
//配置SpringWebFluxTemplateEngine
@Configuration
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnProperty(name = "spring.thymeleaf.enabled", matchIfMissing = true)
static class ThymeleafWebMvcConfiguration {
...
}
//配置thymeleafViewResolver
@Configuration
@ConditionalOnWebApplication(type = Type.REACTIVE)
@ConditionalOnProperty(name = "spring.thymeleaf.enabled", matchIfMissing = true)
static class ThymeleafWebFluxConfiguration {
...
}
...
}
ThymeleafAutoConfiguration
автозагрузкаWeb
нужныйTemplateResolver
,TemplateEngine
,SpringWebFluxTemplateEngine
так же какthymeleafViewResolver
, и пройтиThymeleafProperties
провестиThymeleaf
конфигурация свойства. Подробности смотрите в официальном исходном коде.
ThymeleafProperties
Исходный код:
//读取application.properties配置文件的属性
@ConfigurationProperties(prefix = "spring.thymeleaf")
public class ThymeleafProperties {
private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8;
public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";
/**
*Web模板文件前缀路径属性,Spring boot默认路径为classpath:/templates/
*/
private String prefix = DEFAULT_PREFIX;
/**
* Web模板文件后缀属性,默认为html
*/
private String suffix = DEFAULT_SUFFIX;
/**
* Web模板模式属性,默认为HTML
*/
private String mode = "HTML";
/**
* Web模板文件编码属性,默认为UTF_8
*/
private Charset encoding = DEFAULT_ENCODING;
....
}
Доступна сThymeleafProperties
видел в,Thymeleaf
настройка по умолчанию, и может быть указана с помощью префиксаspring.thymeleaf
изменение свойстваThymeleaf
выделение по умолчанию.
1.2 Пример
1).По умолчаниюThymeleaf
конфигурация, вsrc/main/resources/
вниз, создатьstatic
папка для статических файлов в стиле скрипта иtemplates
В папке хранятся страницы с суффиксом html следующим образом:
2) страница index.html
<!DOCTYPE html>
<!-- 导入xmlns: th=http://www.thymeleaf.org命名空间 -->
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首面详细</title>
</head>
<body>
<div class="user" align="center" width="400px" height="400px">
message:<span th:text="${user.message}"/><br/>
用户名:<span th:text="${user.username}"/><br/>
密码:<span th:text="${user.password}"/>
</div>
</body>
</html>
3).controller
Конфигурация:
@Controller
public class LoginController {
@Autowired
private LoginService loginService;
/**
* 将首页设置为登陆页面login.html
* @return
*/
@RequestMapping("/")
public String startIndex() {
return "login";
}
/**
* 登陆验证
* @param username
* @param password
* @param model
* @return
*/
@RequestMapping("/login")
public String login(@RequestParam("username") String username, @RequestParam("password") String password, Model model) {
UserDTO userDTO = loginService.login(username, password);
model.addAttribute("user", userDTO);
return "index";
}
}
2. web
Связанная конфигурация
согласно сWebMvcAutoConfiguration
так же какWebMvcProperties
пониматьSpring Boot
Обеспечивает принцип автоматической настройки.
2.1 ViewResolver
и статические ресурсы
Spring boot
Автоматическая конфигурацияViewResolver
:
-
ContentNegotiatingViewResolver
(высший приоритетOrdered.HIGHEST_PRECEDENCE
) BeanNameViewResolver
InternalResourceViewResolver
статические ресурсы:
addResourceHandlers
Метод определен по умолчанию/static
,/public
,/resources
а также/METAINF/resources
Статические файлы в папке напрямую отображаются как/**
2.2 Преобразователи типов Formatter и Converter
addFormatters
метод будет загружен автоматическиConverter
,GenericConverter
так же какFormatter
Класс реализации зарегистрирован в Spring MVC, поэтому пользовательскому преобразователю типов нужно наследовать только три его интерфейса.
настроитьFormatter
:
/**
* 将格式为 ccww:ccww88转为UserDTO
*
* @Auther: ccww
* @Date: 2019/10/4 16:25
* @Description:
*/
public class StringToUserConverter implements Converter<String, UserDTO> {
@Nullable
public UserDTO convert(String s) {
UserDTO userDTO = new UserDTO();
if (StringUtils.isEmpty(s))
return userDTO;
String[] item = s.split(":");
userDTO.setUsername(item[0]);
userDTO.setPassword(item[1]);
return userDTO;
}
}
2.3 HttpMessageConverters
(HTTP request
(просьба) иresponse
(ответ конвертеру)
configureMessageConverters
Метод автоматически настраивает HttpMessageConverters:
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
this.messageConvertersProvider.ifAvailable((customConverters) -> converters
.addAll(customConverters.getConverters()));
}
при загрузкеHttpMessageConvertersAutoConfiguration
ОпределенныйHttpMessageConverters
, который автоматически зарегистрирует сериюHttpMessage Converter
классы, такие какSpring MVC
По умолчанию:
ByteArrayHttpMessageConverter
StringHttpMessageConverter
ResourceHttpMessageConverter
SourceHttpMessageConverter
AllEncompassingFormHttpMessageConverter
настроитьHttpMessageConverters
, просто нужно быть в кастомеHttpMessageConverters
изBean
Зарегистрировать пользовательскийHttpMessageConverter
Вот и все.
следующим образом:
зарегистрировать пользовательскийHttpMessageConverter
:
@Configuration
public class CustomHttpMessageConverterConfig {
@Bean
public HttpMessageConverters converter(){
HttpMessageConverter<?> userJsonHttpMessageConverter=new UserJsonHttpMessageConverter();
return new HttpMessageConverters(userJsonHttpMessageConverter);
}
}
настроитьHttpMessageConverter
:
public class UserJsonHttpMessageConverter extends AbstractHttpMessageConverter<UserDTO> {
private static Charset DEFUALT_ENCODE=Charset.forName("UTF-8");
public UserJsonHttpMessageConverter(){
super(new MediaType("application", "xxx-ccww", DEFUALT_ENCODE));
}
protected boolean supports(Class aClass) {
return UserDTO.class == aClass;
}
protected UserDTO readInternal(Class aClass, HttpInputMessage httpInputMessage) throws IOException, HttpMessageNotReadableException {
String message = StreamUtils.copyToString(httpInputMessage.getBody(), DEFUALT_ENCODE);
String[] messages = message.split("-");
UserDTO userDTO = new UserDTO();
userDTO.setUsername(messages[0]);
userDTO.setMessage(messages[1]);
return userDTO;
}
protected void writeInternal(UserDTO userDTO, HttpOutputMessage httpOutputMessage) throws IOException, HttpMessageNotWritableException {
String out = "ccww: " + userDTO.getUsername() + "-" + userDTO.getMessage();
httpOutputMessage.getBody().write(out.getBytes());
}
}
Точно так же Servlet, Filter и Listener могут быть зарегистрированы относительно друг друга.
2.4 Конфигурация, связанная с MVC
Добавить пользовательский класс конфигурации MVC@EnableWebMvc
будет отброшен наSpring boot
Конфигурация по умолчанию, полностью контролируемая вамиMVC
конфигурации, но обычно是Springboot
Конфигурация по умолчанию + необходимые дополненияMVC
Конфигурация, нужно только настроить наследование классовWebMvcConfigurerAdapter
Только что
2.5 Tomcat
настроить
Можно двумя способамиTomcat
свойства конфигурации
- существует
application.properties
Вы можете настроить свойства,Tomcat
да"server.tomcat
"Конкретные свойства конфигурации с префиксом ", общие - ""server
"в качестве префикса; - путем реализации
WebServerFactoryCustomizer
Можно использовать класс конфигурации пользовательского атрибута интерфейса, и соответствующий интерфейс может быть реализован другими серверами таким же образом.
application.properties
Свойства конфигурации:
#通用Servlet容器配置
server.port=8888
#tomcat容器配置
#配置Tomcat编码, 默认为UTF-8
server.tomcat.uri-encoding = UTF-8
# Tomcat是否开启压缩, 默认为关闭off
server.tomcat.compression=off
выполнитьWebServerFactoryCustomizer
Настройка интерфейса:
/**
* 配置tomcat属性
* @Auther: ccww
* @Date: 2019/10/5 23:22
* @Description:
*/
@Component
public class CustomTomcatServletContainer implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
public void customize(ConfigurableServletWebServerFactory configurableServletWebServerFactory) {
((TomcatServletWebServerFactory)configurableServletWebServerFactory).addConnectorCustomizers(new TomcatConnectorCustomizer() {
public void customize(Connector connector) {
Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
protocol.setMaxConnections(200);
protocol.setMaxThreads(200);
protocol.setSelectorTimeout(3000);
protocol.setSessionTimeout(3000);
protocol.setConnectionTimeout(3000);
protocol.setPort(8888);
}
});
}
}
заменятьspring boot
По умолчаниюServle
т контейнерtomcat
, исключить непосредственно в зависимости и импортировать соответствующийServlet
Зависимости контейнера:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starterweb</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-startertomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starterjetty</artifactId>
</dependency
2.6 НастройкаFavicon
настроитьFavicon
Просто поставь свойfavicon.ico
(Имя файла изменить нельзя) Файл помещается в корневой каталог пути к классам, путь к классамMETA-INF/resources/
вниз, путь к классамresources/
вниз, путь к классамstatic/
вниз или путь к классамpublic/
Вниз.
> Можешь смотреть офицеров? Если вам это нравится, проведите пальцем, чтобы нажать 💗, нажмите, чтобы подписаться! ! Спасибо за поддержку! > > Добро пожаловать в общедоступный аккаунт [**Ccww Technology Blog**], оригинальная техническая статья будет запущена в первый раз