Компонент с областью действия весеннего загрузочного сеанса

#java #spring-boot

Вопрос:

Я пытаюсь понять, как работает компонент с областью действия сеанса, и попробовал пример отсюда.

HelloMessageGenerator.java

 public class HelloMessageGenerator {
    private String message;

    public HelloMessageGenerator() {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

}
 

HelloMessageBean.java

 @Configuration
public class HelloMessageBean {
    @Bean
    @Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
    public HelloMessageGenerator requestScopedBean() {
        System.out.println("bean created");
        return new HelloMessageGenerator();
    }
}
 

HelloMessageController.java

 @Controller
public class HelloMessageController {
    @Resource(name = "sessionScopedBean")
    HelloMessageGenerator sessionScopedBean;

    @RequestMapping("/scopes/session")
    public String getSessionScopeMessage(final Model model) {
        model.addAttribute("previousMessage", sessionScopedBean.getMessage());
        sessionScopedBean.setMessage("Good afternoon!");
        model.addAttribute("currentMessage", sessionScopedBean.getMessage());
        return "scopesExample";
    }

}
 

Когда я иду в http://localhost:8080/scopes/session Я получаю сообщение об ошибке.

scopesExample.html

 <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
          xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
    <head>
        <title>Hello World!</title>
    </head>
    <body>
    
    <p th:text="${previousMessage}">previous message</p>
    <p th:text="${currentMessage}">current message</p>
    
    </body>
    </html>
 

Ошибка, которую я получаю, выглядит так, как будто отображения не существовало бы:

 This application has no explicit mapping for /error, so you are seeing this as a fallback. There was an unexpected error (type=Not Found, status=404).
 

Комментарии:

1. Пожалуйста, опубликуйте, какую ошибку вы получаете ?

2. Я добавил ошибку в исходный запрос @NiceBooks

3. Что такое код ошибки http 404, 403, 503… ? В случае ошибок 5xx (внутренние ошибки сервера), пожалуйста, опубликуйте всю трассировку стека.

4. Это 404-й. Произошла неожиданная ошибка (тип=Не найден, статус=404). Спасибо @NiceBooks за то, что изучили это.

Ответ №1:

Мне не хватало зависимости от тимелифа в пом.

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
 

Вот почему я получал 404 при переходе на локальный хост:8080/области/запрос

После добавления зависимости thymeleaf область действия компонента работала должным образом. Для компонента области сеанса компонент создается только один раз за сеанс или после заданного тайм-аута сеанса. Для компонента области запроса он создается для каждого запроса (т. Е. каждый раз, когда один попадает в конечную точку).