2011-08-18 3 views
0

첫 번째 시도 :서블릿과 JSP간에 데이터를 전송하는 가장 좋은 방법은 무엇입니까?

나는 서블릿에서 데이터를 생성하고 속성으로 요청을 설정하고 다음과 같이 RequestDispatcher의를 호출하여 JSP하는 그 요청을 보내 해요 :

request.setAttribute("data",data); 
request.getRequestDispatcher("/page.jsp").forward(request, response); 

지금 JSP에 액세스 및 데이터를 표시합니다.

잘 작동하지만 사용자가 페이지를 새로 고침 할 때마다 양식을 다시 제출하고 확인을 요청하는 알림이 표시됩니다. 이것은 성가신 일입니다.

두 번째 시도 : 세션에서

넣고 데이터 액세스 JSP 페이지에서 해당. 이러한 방식으로 데이터 양이 많을수록 세션은 매우 무거워집니다.

내 질문은 입니다. 서블릿에서 JSP로 데이터를 전달하는 가장 좋은 방법은 무엇입니까? 여기서 데이터는 개체 목록입니다.

+0

POST 대신 * GET을 사용하여 데이터를 검색합니다. 또한 서블릿 태그 위키 페이지를 참조하십시오. http://stackoverflow.com/tags/servlets/info – BalusC

답변

2

첫 번째 해결 방법이 좋습니다. 세션을 사용하여 단일 요청에 특정한 데이터를 보유하는 것은 좋은 습관이 아닙니다. 사용자가 확인 메시지를 받는다는 사실은 데이터가 서블릿에서 JSP로 전달되는 방식과 아무 관련이 없습니다. 그것은보고있는 페이지와 새로 고치는 페이지가 POST 요청의 결과라는 사실과 관련이 있습니다.

이 문제를 방지하려면 Redirect after Post (or Post-Redirect-Get) pattern을 사용하십시오.

예를 들어, 새 제품을 저장한다고 가정하고 제품을 저장 한 후 (POST 요청을 사용하여) 제품의 카테고리 페이지를 표시하려고합니다. ? URL을 productCategory 카테고리 ID = 456로 리디렉션을 보내 데이터베이스 형태

  • 저장 제품을

    1. 는 "저장 제품"을 제출, ADN의 범주 ID (456)
    2. 를 얻을 : 그것은이 길을 갈 것입니다
    3. 사용자가 자동으로 위의 URL로 이동
    4. 요청 속성이 데이터를 넣어 데이터베이스
    5. 에서 카테고리 (456)에 대한 데이터를 얻고하여 productCategory.jsp 페이지를 전달
    6. 사용자는 방금 저장 한 신제품으로 제품 범주 페이지를 볼 수 있습니다. 사용자가 새로 고치면 확인없이 카테고리를 다시 표시하고 '제품 저장'양식을 다시 제출하지 않아도됩니다.
  • +0

    URL에 데이터를 표시하지 않고 보낼 수 있습니까? 즉, (예를 든다면)'categoryId'를'productCategory' 서블릿에 보내고 url에는 보내지 않습니다. 왜냐하면 사용자는 브라우저 URL에서 그것을 볼 수 있기 때문에 그것을 가지고 놀 수 있습니다. 그래서 거기에 어떤 해결책이 있습니까? –

    +0

    아니요, 리디렉션하고 게시물을 올릴 수 없습니다. 숨기려면 AJAX에서이 모든 작업을 수행해야하지만 보안에 대한 잘못된 인식 만 제공합니다. POST 또는 AJAX 요청을 사용하는 경우에도 누구나 페이지를 마우스 오른쪽 단추로 클릭하고 소스를보고 수정하고 다시 제출할 수 있습니다. 서버 측에서 특정 범주를 볼 권한이없는 사용자는 액세스가 금지되어 있는지 확인하십시오. 요청 매개 변수를 암호화/해독 할 수 있지만 보호 된 리소스를 실제로 보호해야합니다. 모호함을 통한 보안이 작동하지 않습니다. –

    +0

    @Mark : 요청 매개 변수로 "재생"하는 것이 정확히 어떻게 문제가됩니까? 특정 카테고리가 해당 사용자에게 표시되지 않도록 하시겠습니까? 그런 다음 해당 문제를 다르게 해결해야합니다 (POST를 사용하더라도 최종 사용자가 POST 요청의 매개 변수로 "재생"할 수 있기 때문에 여전히 문제가됩니다). – BalusC

    관련 문제