День добрый!
Изучаю 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;
}
}