2014-07-10 3 views
0

JSP 페이지에서 InputStream 형식으로 가져온 일부 이미지를 인쇄해야합니다.jsp에서 서블릿으로 InputStream을 전달하는 방법

${requestScope.VariableContainingInputStream} 

사람 : 난 그의 InputStream을 얻기 위해이가 내 JSP 페이지에서

request.setAttribute("Image", InputStream); 
request.getRequestDispatcher(pagename).include(request, response); 

:

우선 나는,이 방법 JSP 페이지에 InputStream를 포함하는 변수를 전달 서블릿을 그 InputStream을 이미지로 바꾼다. 나는 서블릿을 다음과 같이 사용해야한다 :

<img src="ServletName"> 

그 InputStream을 해당 서블릿에 전달할 수 있습니까?

답변

1

어떻게 그 InputStream을 해당 서블릿에 전달할 수 있습니까?

그렇지 않을 수도 있습니다. JSP는 임시 (또는 영구) 파일을 생성하고 InputStream의 내용을이 파일에 씁니다. 그런 다음 해당 파일의 컨텐츠를 제공하는 엔드 포인트를 제공하십시오.

그러면 JSP의 <img> 요소에 해당 끝점에 대한 URL을 제공하게됩니다.

+0

결과 바이트 배열을 서블릿에 base64로 인코딩하고 이미지 태그를 MHTML 데이터 결과와 함께 JSP로 가져옵니다. 이미지가 충분히 작 으면 약간의 성능 저하가 발생할 수 있습니다. – Tap

+0

파일이 임시 파일 인 경우 둘 이상의 단일 요청에 대해 가용성을 유지해야하며 영구적 인 경우 일정 기간 후에 파일을 수집하지 않은 경우 파일을 제거 할 방법을 제공해야합니다. –

0

InputStream으로 얻으면 이미지가 동적으로 생성되거나 일반적으로 이라는 매개 변수의 수에 따라 이미지가 생성된다고 가정합니다.

당신은 정상 (또는 바보 ...) 브라우저가 작동하는 방법에 대해 생각해야합니다, 링크를

  • 사용자의 클릭 버튼을 제출하거나 ADRESS 바
  • 브라우저에 URL을 전달합니다 해당 요청을 생성하고 서버가 (일반적으로 HTML)를 생성
  • 서버 페이지 이미지 링크를 포함 로 전송하고 브라우저가 페이지를 해석하고, FO 별도의 요청을 전송
  • 브라우저로 다시 보낸다 R 이미지가
  • 서버가 각 요청에 대해
  • 브라우저 화면 전체 페이지가 포함 된 이미지

이미지를 다시 전송

(당신은 CSS 페이지, JS scrips에, 또는 다른 어떤 자원이 이미지를 대체 할 수있다)

그래서 당신은 때 브라우저가 될 HTML 페이지를 구성하지만 <image source=/ImageServlet_url?params_for_current_image/>

그 다음에 쓰기 위해 JSP를 실행시에 입력 스트림을하지 한다 이미지를 요청하면 이미지 서블릿은 InputStream을 요청하고 응답 헤더에 올바른 유형의 응답 본문을 직접 넣습니다.

이것은 문제를 해결하는 가장 강력한 방법입니다.실제로 옵션이 아니며 InputStream은 jsp를 실행하는 순간에만 무효화됩니다. 세션 속성에 넣어야합니다. 그런 다음 ImageServlet이 호출되면 세션에서 해당 내용을 찾아 보냅니다. 문제는 InputStream이 반드시 Serializable이 아니며 직렬화 할 수없는 항목을 세션에 두는 것이 안전하지 않다는 것입니다. 그래서 당신은해야한다 :

  • 앱 어딘가에 글로벌 Hash<String, InputStream>을 설정
  • 실제로 InputStream 세션에 넣어 (고유 키) 해시에 넣어 및 세션
  • 의 키를 저장하려고 세션에서 InputStream을 가져올 때
  • 이 ...

를 세션에서 키를 얻고 해시에서 InputStream를 가져 ... 그것은 해시를 형성 제거하는 것을 잊지 마세요 나는강하게 조언을하면 HTML 페이지의 요청과 이미지 사이의 말하기 또는 네트워크 오류 또는 정전이 아닌 첫 번째 해결 방법을 고수 할 것입니다 ...

관련 문제