1. Аннотация
В проекте spring-boot+spring mvc иногда нам нужно самостоятельно настроить некоторые параметры проекта, и будут задействованы эти три.Итак, какая между ними связь? Прежде всего, @EnableWebMvc=WebMvcConfigurationSupport, использование аннотации @EnableWebMvc эквивалентно расширению WebMvcConfigurationSupport, но без переопределения каких-либо методов.
Итак, есть несколько способов его использования:
- @EnableWebMvc+extends WebMvcConfigurationAdapter, просто перепишите метод родительского класса в расширенном классе, таким образом защитите настройки в @EnableAutoConfiguration Springboot
- расширяет WebMvcConfigurationSupport, просто перепишите метод родительского класса в расширенном классе, таким образом защитите настройки в @EnableAutoConfiguration Springboot
- расширяет WebMvcConfigurationAdapter, просто перепишите метод родительского класса в расширенный класс, этот метод по-прежнему использует настройки в @EnableAutoConfiguration Springboot
Какой метод подходит, зависит от индивидуальных потребностей проекта и степени контроля.
Существуют некоторые настройки по умолчанию для обоих способов WebMvcConfigurationSupport (@EnableWebMvc) и @EnableAutoConfiguration А WebMvcConfigurationAdapter — это абстрактный класс
Для получения подробной информации о том, как персонализировать настройки в классе, вы можете обратиться к следующим статьям:
Spring Boot: пользовательские преобразователи HTTP-сообщений Официальная документация EnableWebMvc
- Используя аннотацию @EnableWebMvc, вам необходимо программно указать конфигурацию, связанную с файлом представления.
/**
* Web MVC 配置适配器
* @ClassName: WebAppConfigurer
* @Description:
* @author OnlyMate
* @Date 2018年8月28日 下午2:39:31
*
* WebAppConfigurer extends WebMvcConfigurerAdapter 在Spring Boot2.0版本已过时了,用官网说的新的类替换
*
*/
@Configuration
public class WebAppConfigurer implements WebMvcConfigurer {
/**
* springmvc视图解析
* @Title: viewResolver
* @Description: TODO
* @Date 2018年8月28日 下午4:46:07
* @author OnlyMate
* @return
*/
@Bean
public InternalResourceViewResolver viewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
// viewResolver.setViewClass(JstlView.class); // 这个属性通常并不需要手动配置,高版本的Spring会自动检测
return viewResolver;
}
/**
* SpringBoot设置首页
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
WebMvcConfigurer.super.addViewControllers(registry);
registry.addViewController("/").setViewName("index");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
}
}
- Используйте аннотацию @EnableAutoConfiguration, чтобы прочитать конфигурацию в файле application.properties или application.yml.
Посмотреть
## 视图
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
или
spring:
http:
encoding:
charset: UTF-8
enabled: true
force: true
messages:
encoding: UTF-8
profiles:
active: dev
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
2. Шаблонный движок
Spring boot по умолчанию интегрирует ContentNegotiatingViewResolver и BeanNameViewResolver в преобразователь представлений springmvc, а также интегрировал автоматически настраиваемый механизм шаблонов в механизм представления следующим образом:
- FreeMarker
- Groovy
- Thymeleaf
- Velocity (deprecated in 1.4)
- Mustache
Spring boot с технологией JSP официально не рекомендуется по трем причинам:
- На tomcat jsp не может быть проанализирован во вложенном контейнере tomcat, т.е. не может быть проанализирован при упаковке в исполняемый jar
- Вложенные контейнеры Jetty не поддерживают jsp
- Undertow
Другие механизмы шаблонов поддерживаются Spring Boot и по умолчанию будут искать механизм шаблонов в шаблонах пути к классам.Здесь, если мы используем механизм шаблонов freemarker
- Теперь pom.xml запускает представление механизма шаблонов freemarker.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
- Определите суффикс шаблона ftp, обратите внимание, что он находится в каталоге шаблонов пути к классам
@Controller
public class HelloWorldController {
private Logger logger = LoggerFactory.getLogger(HelloWorldController.class);
@Value("${question}")
private String question;
@Value("${answer}")
private String answer;
@Value("${content}")
private String content;
@ResponseBody
@RequestMapping("/hello")
public String index() {
return "hello world";
}
@ResponseBody
@RequestMapping(value="/hello1")
public String index1() {
return question + answer;
}
@ResponseBody
@RequestMapping(value="/hello2")
public String index2() {
return content;
}
@RequestMapping(value="/hello3")
public String index3(Model model) {
try {
model.addAttribute("question", question);
model.addAttribute("answer", answer);
} catch (Exception e) {
logger.info("HelloWorldController ==> index3 method: error", e);
}
return "/hello";
}
}
Если вы используете @RestController, @Responsebody будет добавлен к каждому методу по умолчанию, а возвращаемое значение метода будет напрямую преобразовано httpmessageconverter.Если вы хотите напрямую вернуть представление, вам нужно указать modelAndView напрямую.
public class HelloWorldController{
private Logger logger = LoggerFactory.getLogger(HelloWorldController.class);
@Value("${question}")
private String question;
@Value("${answer}")
private String answer;
@Value("${content}")
private String content;
@RequestMapping("/hello3")
public ModelAndView hello3() {
try {
model.addAttribute("question", question);
model.addAttribute("answer", answer);
} catch (Exception e) {
logger.info("HelloWorldController ==> index3 method: error", e);
}
return new ModelAndView("hello");
}
}
- Настроить дом
/**
* Web MVC 配置适配器
* @ClassName: WebAppConfigurer
* @Description:
* @author OnlyMate
* @Date 2018年8月28日 下午2:39:31
*
* WebAppConfigurer extends WebMvcConfigurerAdapter 在Spring Boot2.0版本已过时了,用官网说的新的类替换
*
*/
@Configuration
public class WebAppConfigurer implements WebMvcConfigurer {/**
* SpringBoot设置首页
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
WebMvcConfigurer.super.addViewControllers(registry);
registry.addViewController("/").setViewName("index");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
}
}
Хотя технология jsp, spring boot официально не рекомендуется, но, учитывая, что это широко используемая технология, мы также интегрируем здесь технологию jsp.
- Во-первых, вам нужно добавить в свой проект стандартную папку веб-проекта webapp.
-
Настройте префикс и суффикс jsp
См. заголовок «Описание аннотации».
-
вернуть представление в контроллере
Третий шаг с Freemaker
-
Настроить дом
Четвертый шаг с фримейкером 5. Доступhttp://localhost:8088/springboot
Уведомление
Если механизм шаблонов freemarker и технология jsp существуют одновременно, springmvc вернет конкретное представление в соответствии с приоритетом анализатора.По умолчанию приоритет FreeMarkerViewResolver выше, чем у InternalResourceViewResolver, поэтому, если они существуют одновременно , будет возвращен вид freemarker