▶ 뭉충닷컴
 
mungchung.com login
Site Search
My Space
주절주절...
공부방
쥔장소개
Board
자유게시판
유용한 정보
자료실
Programming
강좌 & Articles
Spring 3.0
프로그래밍 Tip
   -ASP
   -PHP
   -JavaScript
   -HTML
   -Java/JSP
   -Database
   -Crystal Report
   -Visual Basic
   -이클립스
   -리눅스
   -기타
Windows API (VB)
Spread Sheet 7.0
컴퓨터활용 Tip
Other things
StarCraft 전략
StarCraft 문서
김용(金庸)
Son Q & Dieda

Spring은 HandlerMapping을 이용해서 jsp 파일과 Bean 파일을 일일이 연결시켜줘야하는데

상당히 귀찮은 작업이다.

 

예를 들면 아래와 같다.

어제 세션을 이용한 로그인 예제를 만들면서 사용했던 Controller쪽 소스코드이다.

 @Controller
public class LoginController {
    @Autowired
    private LoginBO loginBO;
    // 세션 사용 안하는 화면
    @RequestMapping("page1")
    public String page1() {
        return "page1";
    }
    // 세션 사용 안하는 화면
    @RequestMapping("page2")
    public String page2() {
        return "page2";
    }
    // 로그인 화면
    @RequestMapping("login")
    public String login() {
        return "login";
    }
    ...
}

샘플 jsp 페이지를 login.jsp, page1.jsp, page2.jsp 이렇게 만들었다.

page1.jsp와 page2.jsp는 굳이 Bean이 없어도 되는 파일인데 불필요하게 컨트롤러에서 mapping처리 해줬다.

지금이야 파일수가 적어서 일일이 이렇게 처리 했지만(사실 이 땐 잘 몰라서 이렇게 했다 -_-)

파일수 많아지면 엄청 귀찮은 작업이다. 그래서 조금 더 알아보니 아래와 같이 조금 더 간단하게 처리하는 방법이 있었다.

 

page1을 예시로 든다면 return문에 jsp파일명 반환할 필요 없이 그냥 새로운 ModelAndView객체 반환하면 된다.

 @RequestMapping
public ModelAndView page1() {
    return (new ModelAndView());
}

위 방법은 역시 근본적인 해결책은 못된다. 여전히 파일명으로 메서드를 만들어야하는 불편함이 있다.

이런 불편함을 해소하기 위해서 박재성씨의 spring 프레임워크 워크북이나 블로그에서

이를 해결한 예제 소스코드가 있다.

 

근본 개념은 간단하다.

컨트롤러에 mapping된 URL이 있으면 해당 컨트롤러를 이용하고

그렇지 않은 URL("일반 jsp, html등등 굳이 Bean과 연동할 필요 없는 페이지들)은 공통컨트롤러를 이용해

URL 과 동일한 디렉토리의 jsp파일을 호출하도록 하는것이다.

 

소스코드는 다음과 같다.

 

StaticViewController.java

 package com.mungchung.sample.login;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class StaticViewController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String ctxRoot = request.getContextPath();
        String uri = request.getRequestURI();
        int len = 0;

        if(ctxRoot != null && ctxRoot.length() > 0) {
            len = uri.indexOf(ctxRoot) + ctxRoot.length();
        }
        uri = uri.substring(len);
        if(uri.split("/").length < 2) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
            return null;
        }
        return new ModelAndView(uri.substring(1));
    }
}

root-context.xml
 <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

<bean id="staticViewController" class="com.mungchung.sample.login.StaticViewController" />
<bean id="staticHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="order"><value>1</value></property>
    <property name="mappings">
        <value>
            /**=staticViewController
        </value>
    </property>
</bean>


servlet-context.xml

<annotation-driven />

<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>

위와 같이 소스코드 수정 한 후에 LoginController.java 파일에서

page1(), page2(), login() 3개의 메서드는 삭제처리하고나서 실행해보면 문제없이 잘 동작한다.

참고로,  servlet-context.xml은 수정할 필요 없다. <annotation-driven /> 선언이 필요함을 강조하기 위해서 위에 코드적어둔것이다. 

 

 

**) 소스코드에 대한 자세한 설명은 자바지기 블로그 의 글을 참고하면 된다. -_-

     

 

문서 첨부 제한 : 0Byte/ 2.00MB
파일 크기 제한 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 Spring 3.0 게시판 뭉충닷컴 2011-08-07 4498
25 Spring Controller의 메서드에 사용될수 있는 파라미터 종류 뭉충닷컴 2012-11-01 7241
24 Spring에서 requestURL 가져올때 URL을 /WEB-INF/views/.. 로 가져오는 이유 뭉충닷컴 2012-10-31 7401
23 Spring의 어노테이션 정보 읽기 뭉충닷컴 2012-10-29 5737
22 Spring MVC 기본 흐름 file 뭉충닷컴 2012-10-23 6762
21 custom taglib 만들때 spring bean 사용하기 뭉충닷컴 2012-08-29 8708
20 STS에서 한글에 String literal is not properly closed by a double-quote 오류가 날 경우 file 뭉충닷컴 2012-07-03 4184
19 Spring @Transactional 어노테이션을 이용한 트랜잭션 예제 file 뭉충닷컴 2012-06-04 8315
18 Spring @Transactional 사용시 rollback이 안될 경우 뭉충닷컴 2012-06-03 13377
17 한글때문에 xml 파싱시 오류날 경우 (URI$MalformedURIException 오류) file 뭉충닷컴 2012-06-02 5354
16 maven에 ojdbc14 추가하기 뭉충닷컴 2012-06-01 5361
15 HandlerInterceptor 간단한 사용 예제 file 뭉충닷컴 2012-03-08 9048
14 Spring Template Project 이용시 maven 빌드를 제대로 못할경우 file [1] 뭉충닷컴 2012-03-07 6051
13 Spring에서 Quartz 이용하기 (스케줄이용방법) file [1] 뭉충닷컴 2012-03-06 13660
12 Spring AOP (Aspect Oriented Programming) 뭉충닷컴 2012-03-05 2694
11 Spring의 HandlerMapping 종류및 사용방법 file 뭉충닷컴 2012-03-04 5843
10 maven을 이용해 배포(Deploy) 대상에 따라서 환경설정(resources) 다르게 적용하기 file [1] 뭉충닷컴 2012-03-03 36114
9 일반 Spring 프로젝트를 Web 프로젝트로 변경하기 file 뭉충닷컴 2012-03-03 4596
» URL과 Controller 간단하게 연결해주는 HandlerMapping 처리 방법 뭉충닷컴 2012-03-03 4649
7 Spring에서 Session을 이용한 로그인 처리 예제 file [12] 뭉충닷컴 2012-03-02 65175
6 뷰 컨트롤러에서 ModelAndView 개체를 직접 생성하는 방법 뭉충닷컴 2012-03-01 7062
5 Root Application Context와 Servlet Context file 뭉충닷컴 2012-02-29 10507
4 STS의 Spring Template Project를 이용한 간단한 Spring MVC 웹 프로젝트 file [15] 뭉충닷컴 2012-02-29 13871
3 스테레오타입 어노테이션을 이용한 자동 빈 등록 file 뭉충닷컴 2012-02-28 2715
2 Spring에서 Bean 등록 여러가지 방법 뭉충닷컴 2012-02-28 4728
1 component:context-scan으로 설정되어있는 Bean들 확인하는 방법 file 뭉충닷컴 2012-02-24 3048