2011. 1. 10. 11:33
반응형

org.springframework.web.servlet.mvc.UrlFilenameViewController 을 써서 바로 view로 보내고 싶지만..
url 경로가 조금씩 틀려서 문제가 생길때 처리하기 위해 만든 Controller
Spring은 Controller에서 View에 대한 위치값을 지정하게 처리 되므로 Controller에다가 uri값을 비교해서 분기 시킨다.
Struts는 한 Controller에서 보여줄 View값을 xml에서 세팅할 수 있다.
contextPath에 대한 확장성을 두기 위해 uri.equals 대신에 uri.indexOf 를 사용했고..
int begin = uri.indexOf('/', 1); 1로 두어서 제일 첫 부분의 contextPath는 제외되게끔 처리하였다.


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 UrlController implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
     String fileName = "";
        String uri   = request.getRequestURI();
       
        if(uri.indexOf("/sssss/zzzz.do") > -1) {
         fileName = "/sssss/xxxx/zzzz";
        } else {
         fileName = etcUrl(uri);
        }
        return new ModelAndView(fileName);
    }
   
    public String etcUrl(String uri) {
     String fileName;
     int begin = uri.indexOf('/', 1);
        if (begin == -1) {
            begin = 0;
        } else {
            begin++;
        }
        int end;
        if (uri.indexOf(";") != -1) {
            end = uri.indexOf(";");
        } else if (uri.indexOf("?") != -1) {
            end = uri.indexOf("?");
        } else {
            end = uri.length();
        }
        fileName = uri.substring(begin, end);
        if (fileName.indexOf(".") != -1) {
            fileName = fileName.substring(0, fileName.lastIndexOf("."));
        }
        return fileName;
    }

}

반응형
Posted by seongsland