Я всегда создавал веб-приложение Spring MVC, настраивая их самостоятельно, пока мне не сообщили об этом Spring Boot, который поможет вам настроить / инициализировать ваше приложение.Поэтому я решил попробовать и создал новый проект с использованием Spring Boot.Я выполнил все шаги, чтобы заставить его работать с основным классом контроллером и всеми необходимыми зависимостями.Когда я запускаю приложение, оно запускается и отвечает также на запросы HTTP.Проблема возникает, когда я пытаюсь вернуть представление.Он просто возвращает представление в виде обычного HTML-файла без рендеринга всех тегов Spring.Позвольте мне показать вам, что я сделал:
Это дерево каталогов проекта:
Я создал каталогwebapp / WEB-INF / view, в который я помещаю jsp файлы, соответствующие представлениям.Пока у меня есть только один, helloWord.jsp, который довольно прост:
<!DOCTYPE html>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<html lang="en">
<body>
<div>
<div>
<h2>Hello ${name}</h2>
</div>
</div>
</body>
</html>
SpringBootHelloWorldApplication - это основной класс, содержащий следующий код:
@SpringBootApplication
@ComponentScan(basePackages={"com.example.springboothelloworld"})
public class SpringBootHelloWorldApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootHelloWorldApplication.class, args);
}
}
ApplicationCofigurerAdapter настраивает InternalResourceViewResolver следующим образом:
@Configuration
@EnableWebMvc
public class ApplicationConfigurerAdapter extends WebMvcConfigurerAdapter{
@Bean
public ViewResolver internalResourceViewResolver() {
InternalResourceViewResolver bean = new InternalResourceViewResolver();
bean.setViewClass(JstlView.class);
bean.setPrefix("/WEB-INF/view/");
bean.setSuffix(".jsp");
return bean;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
HelloWorldController - это контроллер, который обрабатывает все запросы HTTP
@Controller
@RequestMapping("/home")
public class HelloWorldController {
@RequestMapping("/hello")
@ResponseBody
public String hello(){
return "hello";
}
@RequestMapping("/hello/{name}")
public String helloView(@PathVariable("name") String name, Model model){
model.addAttribute("name", name);
return "helloWorld";
}
}
И внутри application.properties Я поместил эти строки, но я не знаю, действительно ли они мне нужны, потому что они уже присутствуют в ApplicationConfigurerAdapter.
spring.mvc.view.prefix= /WEB-INF/view/
spring.mvc.view.suffix= .jsp
Когда я отправляю этот запрос HTTP GET: http://localhost:8080/home/hello/Stefano
Возвращает:
Что, конечно, является неожиданным результатом.