Web개발/Spring

[Spring] 요청 명과 동일한 뷰 이름 추출하기

noobdev 2020. 1. 1. 16:17

스프링에서 JSP페이지를 브라우저에게 응답해줄 때는 ModelAndView객체에 JSP페이지를 바인딩해주고 반환한다.

이때 JSP페이지의 이름을 정해주려면 setViewName( ) 메서드를 사용해야 하는데 일일이 적어주기는 까다롭다.

아래 코드는 뷰 이름을 개발자가 일일이 코딩하지 않고 URL 요청명에서 뷰 이름을 가져오는 코드이다.

 

※코드 출처 : 자바 웹을 다루는 기술

public ModelAndView login(HttpServletRequest request, HttpServletResponse response) throws Exception {
		String userID = "";
		String password = "";
		String viewName = getViewName(request);
		ModelAndView mav = new ModelAndView();
		request.setCharacterEncoding("utf-8");
		userID = request.getParameter("userID");
		password = request.getParameter("password");
		mav.addObject("userID", userID);
		mav.addObject("password", password);
		//mav.setViewName("result");
		mav.setViewName(viewName);
		System.out.println("ViewName: " + viewName);
		return mav;
	}





public String getViewName(HttpServletRequest request) throws Exception {
		String contextPath = request.getContextPath();
		String uri = (String)request.getAttribute("javax.servlet.include.request_uri");
		if(uri == null || uri.trim().equals("")) {
			uri = request.getRequestURI(); 
		}
		
		int begin = 0;
		if(!((contextPath == null)||("".equals(contextPath)))) {
			begin = contextPath.length();
		}
		
		int end;
		if(uri.indexOf(";") != -1) {
			end = uri.indexOf(";");
		} else if(uri.indexOf("?") != -1) {
			end = uri.indexOf("?");
		} else {
			end = uri.length();
		}
		
		String fileName = uri.substring(begin, end);
		if(fileName.indexOf(".") != -1) {
			fileName = fileName.substring(0, fileName.lastIndexOf("."));
		}
		if(fileName.lastIndexOf("/") != -1) {
			fileName = fileName.substring(fileName.lastIndexOf("/"), fileName.length());
		}
		return fileName;
	}

URL값을 가져와서 indexOf, subString, lastIndexOf 등의 메서드를 이용해서 요청명을 반환한다.

예를 들어 /test/login.do로 요청 시 getViewName 메서드는 /login을 반환한다.

 

이를 String 변수에 담고 ModelAndView 객체의 setViewName의 매개변수로 넣어주면 된다.

 

 

 

본 포스팅은 필자가 공부한 내용을 정리해놓은 것으로 오류가 존재할 수 있습니다.
참고: 자바 웹을 다루는 기술