Spring Boot неправильно отображает представления - PullRequest
0 голосов
/ 13 мая 2018

Я всегда создавал веб-приложение Spring MVC, настраивая их самостоятельно, пока мне не сообщили об этом Spring Boot, который поможет вам настроить / инициализировать ваше приложение.Поэтому я решил попробовать и создал новый проект с использованием Spring Boot.Я выполнил все шаги, чтобы заставить его работать с основным классом контроллером и всеми необходимыми зависимостями.Когда я запускаю приложение, оно запускается и отвечает также на запросы HTTP.Проблема возникает, когда я пытаюсь вернуть представление.Он просто возвращает представление в виде обычного HTML-файла без рендеринга всех тегов Spring.Позвольте мне показать вам, что я сделал:

Это дерево каталогов проекта:

enter image description here

Я создал каталог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

Возвращает:

enter image description here

Что, конечно, является неожиданным результатом.

1 Ответ

0 голосов
/ 21 мая 2018

Я понял, как заставить это работать. Мне пришлось установить maven на моем macOS, а затем выполнить следующую команду, чтобы удалить папку target , скомпилировать код и также упаковать его (в моем случае в формате JAR).

mvn clean package spring-boot:repackage

После этого я могу выполнить файл JAR, используя следующую команду:

java -jar target/file_name.jar

На данный момент (если все прошло нормально) мое веб-приложение теперь работает на localhost: 8080. Я до сих пор не знаю, как заставить его работать на IntelliJ, потому что таким образом я не знаю, как его отладить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...