스프링 jsp확장자 처리에 대한 궁금증 입니다

1,073 views
Skip to first unread message

JH

unread,
Aug 19, 2013, 7:21:37 AM8/19/13
to ks...@googlegroups.com
아래는 스프링 컨트롤설정인데요 어쩌다 이런 테스트를 했나는 모르겠으나
컨트롤러에서 jsp.jsp 라는 요청을 받았을때 이건 어디까지나 그냥 테스트를 위해 막 만든
중요한건 jsp.jsp 로 요청을 하면 404 에러가 나옥 
jsp.js로 하면 jsp 를 리턴해서 원하는 페이지가 나옵니다

모 제 생각엔 *.jsp를 컨트롤 이전에 누군가가 처리하는거 같은데 디스패처서블릿이 처리하나 
아무튼 우연히 테스트 하다 보니 

모 물론 저의 무지에서 나온 궁금증이긴 하지만
지나가시다가 시간되시면 잠깐 지적해 주시고 가도 되고
그냥 지나가셔도 ㅠㅡ
쿨럭 pdf나 html 파일들도 리졸버에서 어떻게 처리해 주는걸 본거 같기도 한데
간단하게 링크 걸어 주시고 가시면 감사하고요 아니라도 ㅠㅡ 괜찮고요

그냥 스프링 공부하다 쉴겸 질문을 남겨 봅니다


@RequestMapping(value = "/jsp.jsp", method = RequestMethod.GET)
public String jsp(Locale locale, Model model) {
logger.info("jsp jsp ", locale);

Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,
DateFormat.LONG, locale);

String formattedDate = dateFormat.format(date);

model.addAttribute("serverTime", formattedDate);

return "jsp";
}
@RequestMapping(value = "/jsp.js", method = RequestMethod.GET)
public String js(Locale locale, Model model) {
logger.info("jsp jsp ", locale);

Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,
DateFormat.LONG, locale);

String formattedDate = dateFormat.format(date);

model.addAttribute("serverTime", formattedDate);

return "jsp";
}

초보람보 Novice Rambo

unread,
Aug 19, 2013, 8:15:11 AM8/19/13
to ks...@googlegroups.com
재미 있는 실험을 하셨군요.
제가 속해 있던 스터디에서도 같은 경험을 하고 나름 고민만 해서 낸 결론은 다음과 같습니다.

jsp 확장자가 붙은 경우 DispatcherServlet 이 처리하기 전에 Servlet Contaioner 가 먼저 처리하게 된다는 것이죠.

디스패처서블릿도 서블릿의 일종이기에 결국 서블릿매핑에 의해 처리가 되는데 JSP 확장자인 경우에는 서블릿매핑 이전에 서블릿컨테이너가 먼저 자체적으로 처리를 하게 되기 때문이라는 것이죠.

심심풀이용 소스를 만들어서 설명해 드리자면

\JSPTest\src\main\java\com\heaven\wolf\HomeController.java
====================================
package com.heaven.wolf;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HomeController {
    @RequestMapping(value = "lion")
    @ResponseBody
    public String lion() {       
        return "<h1>Lion</h1>";
    }   
}



\JSPTest\src\main\webapp\lion.jsp
===========================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <h1>Tiger</h1>
</body>
</html>


두 개의 파일을 만들고

루트컨텍스트\lion
루트컨텍스트\lion\
루트컨텍스트\lion.do
루트컨텍스트\lion.php
루트컨텍스트\lion.asp
루트컨텍스트\lion.xyz
....

등등 jsp 이외의 확장자인 경우 사자(Lion)를 보실 수 있지만

루트컨텍스트\lion.jsp 인 경우에는 호랑이(Tiger)를 보실 수 있습니다.

본문 이미지 1

그럼 좋은 한주 되세요.

2013년 8월 19일 월요일 오후 8시 21분 37초 UTC+9, JH 님의 말:

김재형

unread,
Aug 19, 2013, 8:25:15 AM8/19/13
to ks...@googlegroups.com
와우 참 감사한 예제 이군요
즐거운 도움이 되었습니다
@ResponseBody 의 용도도 이제 알았네요
감사합니다 ^^


2013년 8월 19일 오후 9:15, 초보람보 Novice Rambo <exper...@gmail.com>님의 말:

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을 보내세요.
http://groups.google.com/group/ksug에서 그룹을 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/groups/opt_out을(를) 방문하세요.



--
BuzzerBeater JH

이용구

unread,
Aug 19, 2013, 8:48:53 AM8/19/13
to ks...@googlegroups.com

<servlet>

        <servlet-name>jsp</servlet-name>

        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>

        <init-param>

            <param-name>fork</param-name>

            <param-value>false</param-value>

        </init-param>

        <init-param>

            <param-name>xpoweredBy</param-name>

            <param-value>false</param-value>

        </init-param>

        <load-on-startup>3</load-on-startup>

    </servlet>

<servlet-mapping>

        <servlet-name>jsp</servlet-name>

        <url-pattern>*.jsp</url-pattern>

        <url-pattern>*.jspx</url-pattern>

    </servlet-mapping>


tomcat 에 web.xml 파일 보시면 이런거 있습니다.

jsp 확장자는 JspServlet 을 타도록 설정되어 있내요

즐거운 코딩 되세요~



2013/8/19 김재형 <kimj...@gmail.com>



--
YK Lee (i&combine)

Jaehong Cheon

unread,
Aug 19, 2013, 9:12:17 AM8/19/13
to ks...@googlegroups.com
JSP 스팩 (2.2) 보시면 아래와같이 설명되어 있습니다. 그러니 다른 웹 컨테이너들도 다 톰캣과 비슷하게 구현되어 있을 것으로 생각됩니다.
application의 web.xml에서 오버라이딩 가능 할 것 같은데... 혹시 테스트 해보시면 알려주세요^^

============
JSP.1.1.1 Web Containers and Web Components
...
A web component is either a servlet or a JSP page. The servlet element in a web.xml deployment descriptor is used to describe both types of web components. JSP page components are defined implicitly in the deployment descriptor through the use of an implicit .jsp extension mapping, or explicitly through the use of a jsp-group element.
Reply all
Reply to author
Forward
0 new messages