Практика Spring Boot - разрешение просмотра SpringMVC

Spring Boot

1. Аннотация

  В проекте spring-boot+spring mvc иногда нам нужно самостоятельно настроить некоторые параметры проекта, и будут задействованы эти три.Итак, какая между ними связь? Прежде всего, @EnableWebMvc=WebMvcConfigurationSupport, использование аннотации @EnableWebMvc эквивалентно расширению WebMvcConfigurationSupport, но без переопределения каких-либо методов.

Итак, есть несколько способов его использования:

  1. @EnableWebMvc+extends WebMvcConfigurationAdapter, просто перепишите метод родительского класса в расширенном классе, таким образом защитите настройки в @EnableAutoConfiguration Springboot
  2. расширяет WebMvcConfigurationSupport, просто перепишите метод родительского класса в расширенном классе, таким образом защитите настройки в @EnableAutoConfiguration Springboot
  3. расширяет 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, а также интегрировал автоматически настраиваемый механизм шаблонов в механизм представления следующим образом:

  1. FreeMarker
  2. Groovy
  3. Thymeleaf
  4. Velocity (deprecated in 1.4)
  5. Mustache

Spring boot с технологией JSP официально не рекомендуется по трем причинам:

  1. На tomcat jsp не может быть проанализирован во вложенном контейнере tomcat, т.е. не может быть проанализирован при упаковке в исполняемый jar
  2. Вложенные контейнеры Jetty не поддерживают jsp
  3. Undertow

Другие механизмы шаблонов поддерживаются Spring Boot и по умолчанию будут искать механизм шаблонов в шаблонах пути к классам.Здесь, если мы используем механизм шаблонов freemarker

  1. Теперь pom.xml запускает представление механизма шаблонов freemarker.
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
  1. Определите суффикс шаблона ftp, обратите внимание, что он находится в каталоге шаблонов пути к классам

3. Вернуть путь просмотра на контроллере

@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");
    }
}
  1. Настроить дом
/**
 * 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);
    }
    
}
  1. доступhttp://localhost:8088/springboot

Хотя технология jsp, spring boot официально не рекомендуется, но, учитывая, что это широко используемая технология, мы также интегрируем здесь технологию jsp.

  1. Во-первых, вам нужно добавить в свой проект стандартную папку веб-проекта webapp.

  1. Настройте префикс и суффикс jsp

    См. заголовок «Описание аннотации».

  2. вернуть представление в контроллере

    Третий шаг с Freemaker

  3. Настроить дом

Четвертый шаг с фримейкером 5. Доступhttp://localhost:8088/springboot

Уведомление

Если механизм шаблонов freemarker и технология jsp существуют одновременно, springmvc вернет конкретное представление в соответствии с приоритетом анализатора.По умолчанию приоритет FreeMarkerViewResolver выше, чем у InternalResourceViewResolver, поэтому, если они существуют одновременно , будет возвращен вид freemarker