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의 매개변수로 넣어주면 된다.
본 포스팅은 필자가 공부한 내용을 정리해놓은 것으로 오류가 존재할 수 있습니다.
참고: 자바 웹을 다루는 기술