소스코드 다운받기

명강의다 두고두고 계속 봐야겠다

11-1 스프링 MVC 구조 살펴보기

<!-- web.xml -->

<servlet>
    <servlet-name>appServlet</servlet-name>

    <!-- 2 -->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <!-- 5 -->
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    
    <!-- 1 -->
    <url-pattern>/</url-pattern>
</servlet-mapping>
// HomeController.java

// 이 어노테이션을 붙여야 Controller임을 알 수 있다
@Controller
public class HomeController {
    // 생략

    // 3 사용자가 / 주소로 get으로 요청을 보내면 다음의 메서드를 실행해라
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model){
        //생략
        // 4
        return "home";
    }
}
  1. 사용자가 `/ 으로시작하는 url을 요청하면 (모든 요청을 뜻한다)
  2. DispatcherServlet으로 보내라
  3. 사용자의 url에 따라 적절한 컨트롤러로 보낸다
  4. 컨트롤러에서 실행후 “home”을 리턴한다
  5. 리턴된 “home”은 servlet-context.xml으로 전달된다

<!-- servlet-context.xml -->

<resources mapping="/resources/**" location="/resources/" />

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 2 -->
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>

<!-- 1 -->
<context:componenent-scan base-package="com.javalec.spring_ex_pjt" />
  1. servlet-context.xml에서는 com.javalec.spring_ex_pjt 패키지에 있는 파일을 스캔한다
  2. 컨트롤러에서 리턴받은 “home” 에 접두사 접미사를 붙여서 /WEB-INF/views/+뷰이름+.jsp 의 형태로 만들어준다
  3. /WEB-INF/views/home.jsp로 연결된다

11-2 resources 폴더 이해하기

  • 이미지를 넣을 때 경로 설정을 어떻게 해줘야 할까?
  • story.png를 src/main/webapp/resources 폴더 안에 넣어준다
  • 사용할 땐 resources/파일이름
  • resources 앞에 슬래시를 넣지 말자
<!-- home.jsp -->
<img src="resources/story.png">

이미지가 잘 나온다

  • 다른폴더에 넣으면 똑같을까?
  • src/main/webapp/ 에 myResources 폴더를 만든다
  • story.png를 myResources 폴더 안에 넣어준다
<img src="myResources/story.png">

이미지가 나오지 않는다.

  • servlet-context.xml 파일을 다시 살펴보자
<!-- servlet-context.xml -->

<!-- 여기!! -->
<resources mapping="/resources/**" location="/resources/" />

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:componenent-scan base-package="com.javalec.spring_ex_pjt" />
  • resources/ 로시작하는 url이 들어오면
  • 예외적으로 DispatcherServlet로 전달하지 말고
  • resources/ 폴더에서 찾아라 라는 뜻이다

그렇다면? myResources 폴더도 설정해주자

<resources mapping="/myResources/**" location="/myResources/" />

재실행하면 이미지가 뜨는 것을 확인할 수 있다.

참고자료