2011-08-18 6 views
1

jsp를 실행하기 전에 유효성을 검사해야하는 몇 가지 매개 변수가 필요한 JSP를 구현 중입니다.JSP에서 매개 변수의 유효성을 검사하는 가장 좋은 방법은 무엇입니까?

  1. 제안은 : Taglibraries에게
  2. 제안을 사용하여 JSP 내부 매개 변수의 유효성을 검사 : 필터

당신은 어떻게 생각에서 매개 변수를 사전 분석? 편집

은 좋은 답변 주셔서 감사합니다,하지만 난 당신이 매개 변수를 확인하는 것을 기대할 수는 없다 구글 차트 API와 같은 서비스를 제공하는 경우에 가장 좋은 방법 일 것입니다 무슨 궁금 해서요 그들이 보내기 전에 양식에 의해. 예 : https://chart.googleapis.com/chart?cht= CHD = & & & CHS = ... ... additional_parameters

답변

6

것도 좋은 방법 없습니다 JSR-303 스타일의 매개 변수 검증을 등록합니다. 컨트롤러/비즈니스 로직은 JSP (태그)에 속하지 않습니다. 필터는 거의 훌륭하지만 충분히 구체적인 것은 아닙니다. 이 작업은 서블릿에 의해 수행되어야합니다. 후 처리를 위해 서블릿에 양식을 제출하는 것입니까? 당신이 이미 그렇게하고 있지 않은 것처럼 들리지만, 그 대답은 그렇지 않으면 매우 직설적이었을 것입니다.

our servlets tag wiki page에서 서블릿과 함께 JSP를 사용하여 양식 제출을 후 처리하는 좋은 접근 방식의 예를 찾을 수 있습니다. 여기에 관련성의 추출물이다 :

<input id="name" name="name" value="${fn:escapeXml(param.name)}"> 
<span class="error">${messages.name}</span> 

또한

String name = request.getParameter("name"); 
if (name == null || name.trim().isEmpty()) { 
    messages.put("name", "Please enter name"); 
} 

// ... 

request.getRequestDispatcher("/WEB-INF/hello.jsp").forward(request, response); 

으로는, 모든 상용구를 제거 MVC 프레임 워크가 존재 등, 사용 사례의 이런 종류의 서블릿 코드 (/ 반복되는 중복) JSF, Spring MVC, Wicket, Stripes, Struts2 등과 같은 것들이다. 예를 들어 JSF과 같이 보일 것이다.

<h:inputText id="name" value="#{bean.name}" required="true" requiredMessage="Please enter name" /> 
<h:message for="name" /> 

그게 전부입니다. JSF의 FacesServlet 컨트롤러 서블릿은 사용자 정의 Java 코드가 필요없이 채워 졌는지 확인하고 주어진 위치에 (구성 가능) 메시지를 표시합니다. 모델로 옮길 수도 있습니다. JSF는 JSR303 bean 검증을 투명하게 지원합니다. 예 :

<h:inputText id="name" value="#{bean.name}" /> 
<h:message for="name" /> 

@NotNull(message="Please enter name") 
private String name; 

업데이트 귀하의 편집에 따라

:

이 좋은 답변 주셔서 감사합니다,하지만 가장 좋은 방법 일 것입니다 무슨 궁금 해서요 예를 들어 Google 차트 API와 같은 서비스를 제공하는 경우 s는 전송되기 전에 양식에 의해 점검됩니다. 예 : https://chart.googleapis.com/chart?cht=&chd=&chs=&...additional_parameters ...

같은 방식으로 서블릿을 사용하면됩니다. 유일한 차이점은 doPost() 대신 doGet()에 작업을 구현하고 필요한 경우 오류에 HTTP 400을 반환해야한다는 것입니다. 다시 한 번, our servlets tag wiki page을 확인하여 용도를 더 잘 이해합니다. 또는 JAX-WS 또는 JAX-RS와 같은 웹 서비스 프레임 워크를 대신 사용하여 HTML 페이지에 대해 MVC 프레임 워크처럼이 작업을 투명하게 수행 할 수 있습니다.

+0

아주 좋은 대답, 그냥 위키를 체크 아웃하고 그것이 많이 도움이되었습니다. 당신의 대답 중 많은 것도 마음에 들었습니다.하지만 한가지는 저를 조금 혼란스럽게합니다. jax-ws 또는 jax-rs와 같은 웹 서비스 프레임 워크가 SOAP, JSON 또는 XML을 제공하지 않아야합니까? 그들도 html을 제공 할 수 있습니까? 추측에 의한 편집에 대해 죄송합니다. 우연히 반환합니다. – Zounadire

+0

그들은 HTML을 제공 할 수도 있지만 그게 유일한 의도는 아닙니다. Google 차트 API를 예로 들었습니다. 그것은 이미지를 반환하는 웹 서비스입니다. – BalusC

+0

아, 이제 알겠습니다. 감사합니다. – Zounadire

5

사용 MVC 프레임 워크 (스프링 MVC, 줄무늬 등 스트럿 2)와 컨트롤러 클래스 파라미터를 검증. 모든 MVC 프레임 워크는 매개 변수 유효성 검사를 지원하므로 문제를 완전히 분리 할 수 ​​있습니다.

예 : (당신은 JSR-303 공급 업체, 예를 들어, 최대 절전 모드 - 검사기가있는 경우 클래스 패스에) 스프링 MVC가 자동으로 모두의 when using mvc:annotation-driven

+0

+1 아무 제안도 좋은 자리가 아닙니다. 뷰와 로직을 분리해야합니다. 논리는 유효성 검사가 수행되어야하며 무언가가 유효하지 않을 때 뷰를 올바르게 업데이트하는 곳입니다. –

+0

@ 에이미 나는 OP의 제안 중 어느 것도 좋은 장소가 아님을 의미한다고 생각합니다. –

+0

예. 죄송합니다. 나는 OP에 대한 코멘트를 쓰고 있다고 생각했다. D' oh –

관련 문제