Tag Archives: 스프링

[Spring] ServletRequestUtils

스프링 프레임워크에 포함되어있는 ServletRequestUtils 클래스에 대해 적어볼까 합니다. 저도 이런 존재를 몰랐었는데 기선님의 블로그에서 보고 처음 알게되었고, 아주 잘 사용하고 있습니다^^

그러고 보니 제 지식은 기선님 지식 카피본으로 채워져 있는게 아닐까 하는 생각도 드네요 -_-a

기존에 페이징 처리를 위해 이런 코드가 있었다고 치죠.
[code]if (request.getParameter(“page”) == null)
{
 nowPage = 1;
} else {
 String parsePage = request.getParameter(“page”);
 nowPage = Integer.parseInt(parsePage.equals(“”) ? “1” : parsePage);
}[/code]

위의 코드는 모두들 이해하실것이라 생각됩니다. page라는 이름의 파라미터값을 읽어와서 값이 없을 경우 nowPage에 1을, 값이 있을 경우에는 그 값을 page에 대입하는 과정입니다.

위의 소스도 제 나름대로 줄인다고 줄여본건데 다음의 ServletRequestUtils를 사용한 소스를 한번 보시죠.
[code]ServletRequestUtils.getIntParameter(request, “page”, 1)[/code]

저게 끝입니다. 첫번째 인자로 request를 넣어주고, 두번째 인자는 가져온 파라미터의 이름, 세번째는 값이 없을 경우 사용할 디폴트 값입니다. 세번째 인자는 없어도 됩니다.

page의 값이 있다면 그것을 int형으로 변환해 넘겨줄것이고 없다면 1을 리턴할 것입니다.

getIntParameter뿐만 아니라 getStringParameter등등, 모든 형대로 메서드가 구현되어있습니다. 필요한 녀석을 골라 사용하시면 되겠네요. 그런데 한글은 인코딩 문제가 있네요. 왜 인코딩 처리는 안한건지;

[Spring] SimpleFormController – Spring Form Tags 활용

스프링 프레임워크는 정말 뛰어난 프레임워크지만 개발자가 부족한 시점에서는 애물단지가 되는 프레임워크 인것 같습니다.

하나의 페이지를 만들기 위해 XML수정부터 Controller, View, Service, Dao, 각종 Bean들 까지 만들고 있다 보면 내가 이 간단한것을 하기 위해 무엇을 하고 있는것인가 생각이 들곤 합니다.

그래서 간단하게 SimpleFormController를 사용할 수 있는 방법을 찾아보았습니다. 무의식중에 이렇게 개발하고 있었는데 외국의 사이트에서도 같은 형식으로 개발하는것을 많이 찾아볼 수 있더군요.

잘못된 방법은 아닌거 같습니다.

SimpleFormController
[code]public class SpringFormTestController extends SimpleFormController
{
  private MemoService memoService;

  public void setMemoService(MemoService memoService)
  {
    this.memoService = memoService;
  }

  public SpringFormTestController()
  {
    setCommandName(“testForm”);
    setCommandClass(TestForm.class);
    setFormView(“form”);
    setSuccessView(“result”);
  }

  @Override
  protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception
  {

    TestForm testForm = (TestForm) command;

    MemoData memoData = new MemoData();

    memoData.setName(testForm.getName());
    memoData.setEmail(testForm.getEmail());
    memoData.setMemo(testForm.getMemo());

    SimpleDateFormat formatter = new SimpleDateFormat(“yy년MM월dd일 HH시mm분ss초”);
    String date = formatter.format(new Date());

    memoData.setDate(date);

    memoService.insertMemo(memoData);

    return new ModelAndView(getSuccessView()).addObject(“memoData”, memoData);
  }

  @Override
  protected Object formBackingObject(HttpServletRequest request) throws Exception
  {
    // 빈 객체를 생성하여 넘겨준다.
    // 폼안에 내용이 필요할 경우 값을 이 메서드에서 추가하여 넘겨주면 된다.
    return new TestForm();
  }

}[/code]

JSP
[code]<%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%>
<%@ taglib prefix=”form” uri=”http://www.springframework.org/tags/form”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.1//EN” “http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd“>
<html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”ko”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
<title>Spring Form Controller Test</title>
</head>
<body>
<!–
 컨트롤러의 setCommandName와 아래 form의 commandName이 일치하여야 함
 form:input 의 path명은 setCommandClass에서 지정한 POJO빈 클래스의 맴버 변수명과 일치해야 함
 –>
<form:form commandName=”testForm” method=”post”>
<span>이름 : <form:input path=”name”/></span>
<span>이메일 : <form:input path=”email”/></span>
<span>메모 :  <form:input path=”memo”/></span>
<span><input type=”submit” value=”확인”/></span>
</form:form>
</body>
</html>[/code]

여기서 중요한점은 Controller와 Form태그의 데이터들이 완벽하게 1:1로 매핑 된다는것입니다.

formBackingObject 메서드를 이용해, 페이지가 처음으로 로드될때도 빈데이터를 매핑시켜야 합니다. 없을 경우 에러가 뜹니다.

만약에 데이터 수정창이었다면 데이터를 읽어와서 그 데이터를 리턴하면 됩니다. 바로 값이 뜨게 됩니다.

또한 Controller의 commandName과 Form태그의 commandName이 같아야 합니다. Controller에서는 setCommandName으로 설정하고 있습니다.

commandClass의 내부 변수명과 Form태그의 path명은 일치하여야 합니다.

commandClass에는 validate등의 기능을 구현할 수 있습니다.

1262697483.war