아파치 톰캣 버전에 따른 서블릿, jsp 스펙.
https://tomcat.apache.org/whichversion.html
WEB-INF 안에 view폴더에 jsp가 만들어진다.
WEB-INF 안에 있으면 브라우저에서 직접 접근할수 없고 webapp까지만 접근 가능하다. 따라서 jsp는 이제 직접 접근할수 없다. (MVC패턴 자체가 서블릿에서 jsp요청하는것이다.
Spring bean Configuration 파일 만든것이 저 두 파일로 자동으로 만들어진다.
context-param과 init-param 차이점
context-param은 전역 변수처럼 init-param은 로컬변수처럼
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Spring에서 Bean을 등록하려고 한다.
1. web 기술과 비web 환경에서 사용하는 bean모두를 하나의 xml. 즉 Servlet-context.xml에 저장한다.
2.web 에 해당하는 것은 Servlet-context.xml에 비web에 해당하는 것은 root-context에 저장한다.
자동으로 만들어주는 HomeController. @Controller, @RequestMapping을 사용해서 만들어주는데 우리는 삭제한다.
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home";
}
}
Spring MVC 패턴
여러 빈 등록 web.xml수정. paramvalue
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/appServlet/servlet-context.xml
/WEB-INF/spring/appServlet/hello-context.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
xml이 많으면 퉁칠수있다.
<param-value>
/WEB-INF/spring/appServlet/*-context.xml
</param-value>
혹은 *.xml로 만들면 모든 xml파일을 참조한다.
콘솔창에 이렇게 매핑값이 나오면 컨트롤러는 문제없는것. 안나오면 xml에 등록되어있는지 확인.
INFO : Mapped URL path [/list] onto handler 'controller'
INFO : org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping - Mapped URL path [/list.*] onto handler 'controller'
INFO : org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping - Mapped URL path [/list/] onto handler 'controller'