@ilavio

Java Spring MVC не видит представления, почему?

День добрый!
Изучаю java. Перешел к спринг. Уперся в стену, вот уже 1.5 мес. Работаю через Eclipse. Скачал tomcat. Открыл видео про java spring MVC, начал повторять за преподавателем, он работал в Intel idea. В итоге мое web приложение открывает только файл index.isp созданное maven.
Ладно, думаю сделал косяк попробую другой урок. Нашел сайт где пошагово делают простой Spring MVC. Тупо по шагам копирую каждое действие. Итог тот же. Гуглю, вычитал что если не правильно настроен контроллер, то он ищет альтернативу для отображения, АГА! Удаляю этот index.jsp и ОТОБРАЖАЕТСЯ это же страница! Страница которой нет в проекте! Адругие представления не видит!!!
Что надо настроить? или подправить код? В какую сторону дышать?
Выложил все в Github: https://github.com/ilavio/SpringMVC_lesson3

https://github.com/ilavio/SpringLesson2
Для удобства тестирования.

Вот код основных классов:
Класс конфигурационный:
package com.javabycode.config;

import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;


@SuppressWarnings("deprecation")
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "springmvc.src.main.java.com.javabycode")
public class MyWebConfig extends WebMvcConfigurerAdapter {
	
	@Bean
	public ViewResolver viewResolver() {
		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
		viewResolver.setViewClass(JstlView.class);
		viewResolver.setPrefix("/WEB-INF/views/");
		viewResolver.setSuffix(".jsp");
		return viewResolver;
	} //
	
	
	@Bean
	public MessageSource messageSource() {
	    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
	    messageSource.setBasename("messages");
	    return messageSource;
	}
 
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
	    registry.addResourceHandler("/static/**").addResourceLocations("/static/");
	}
	
}


Класс сервелет:
package com.javabycode.config;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

public class ServletInitializer implements WebApplicationInitializer {

	public void onStartup(ServletContext container) throws ServletException {
		// TODO Auto-generated method stub
		AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
		ctx.register(MyWebConfig.class);
		ctx.setServletContext(container);
 
		ServletRegistration.Dynamic servlet = container.addServlet(
				"dispatcher", new DispatcherServlet(ctx));
 
		servlet.setLoadOnStartup(1);
		servlet.addMapping("/");
	}
	
	
	
}


Класс контроллер:
package com.javabycode.springmvc;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.javabycode.model.Employee;



@Controller
@RequestMapping("/")
public class MyController {
	
	/*
	 * This method will serve as default GET handler.
	 */
	@RequestMapping(method = RequestMethod.GET)
	public String newProfile(ModelMap model) {
		Employee employee = new Employee();
		model.addAttribute("employee", employee);
		return "employee";
	}
 
	/*
	 * This method will be called on form submission, handling POST request It
	 * also validates the user input
	 */
	@RequestMapping(method = RequestMethod.POST)
	public String saveProfile(Employee employee,
			BindingResult result, ModelMap model) {
 
		if (result.hasErrors()) {
			return "employee";
		}
 
		model.addAttribute("success", "Dear " + employee.getFirstName()
				+ " , your profile completed successfully");
		model.addAttribute("employee",employee);
		return "success";
	}
 
 
	/*
	 * Method used to populate the country list in view. Note that here you can
	 * call external systems to provide real data.
	 */
	@ModelAttribute("countries")
	public List<String> initializeCountries() {
 
		List<String> countries = new ArrayList<String>();
		countries.add("USA");
		countries.add("Canada");
		countries.add("France");
		countries.add("Indonesia");
		countries.add("Australia");
		countries.add("Other");
		return countries;
	}

}
  • Вопрос задан
  • 1748 просмотров
Решения вопроса 1
@ilavio Автор вопроса
Все РАЗРЕШИЛ! Данный вопрос (не прошло и года) : Когда стал заново просматривать уроки по Spring, подумал а вдруг проблемы не у меня в коде а в неверной настройке Eclipse или встроеного Tomcat. И Установил другой сервер JBOSS (WildFly); Настроил (НЕ подсоединял к Eclipse), полез в проект залез в папку target а ТАМ нет WAR архива. Или я чего то не понимаю, или эта система как то должна по другому работать (Ведь для работы в сервере нужен архив .war). Ну ладно, хорошо, что я установил штатный maven. Открыл командную строку перешол в проек. Дал команду на создание архива .war " mvn package ". Этот архив засунул в папку сервера wildfly-22.0.0.Final\standalone\deployments .
Запустил сервер: для винды это фаил - standalone.bat. И вуаля все заработало! Мой проект запустился!

После попытался подсоединить WildFly к Eclipse и что вы думаете. Эта прога (Eclipse) не хочет ставить JBOSS tool для работы с сервером WildFly. Во общем трындец какой-то! Сопротивляется! Буду вручную устанавливать в сервак архивы .war
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@zdezak
Пара ошибок в файле MyConfig.java
1.@ComponentScan(basePackages = "springmvc.src.main.java.com.javabycode"). Должно быть от папки Java и выглядеть следующим образом - @ComponentScan(basePackages = "com.javabycode").
2. Строка viewResolver.setPrefix("/WEB-INF/views/"); на GitHub выглядит как viewResolver.setPrefix("/WEB-INF/views/*");.
Звездочка в конце не нужна.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы