나는 2 개의 필터를 가지고 있으며, 예제에서했던 것처럼 그 중 하나에 코드를 사용했습니다. 필터가 처음 호출될 때, 나는 문제없이 몸을 읽을 수 있지만, call chain.doFilter 래퍼가 다시 호출되고,이 시간 (두 번째 시간) 라인 “동안 …” 스트림이 닫혀 있기 때문에 예외를 throw합니다. 버퍼링 리더가 닫혀 있고 모든 것이 잘 작동하는 라인을 주석달았습니다. 그래서, 나는 래퍼가 두 번 호출 된 이유를 알고 싶습니다? 그리고 생성자에서 전달 된 가까운 입력 스트림없이 버퍼리더를 닫는 방법은 무엇입니까? ServletInputStream은 서블릿이 헤더 다음에 요청의 모든 입력을 읽을 수 있도록 하는 InputStream입니다. 예를 들어 ServletInputStream을 사용하여 POST 인수에서 들어오는 제출을 읽을 수 있습니다. 예제를 빌드하는 데 사용하는 기술을 살펴보겠습니다. 이 예제에서는 지정된 매개 변수의 값을 반환 하는 getParameter() 메서드의 사용을 보여 주었습니다. 이 예제에서는 JUnit 및 모키토를 사용하여 HttpServletRequest를 테스트합니다. 우리는이 튜토리얼에서 모키토 프레임 워크의 사용을 보았다.

최신 버전에 대한 링크와 이 웹 사이트는 자습서의 참조 섹션을 방문하십시오. 이제 사용할 기술을 정의했습니다. 예제의 설정을 시작해 보겠습니다. 파이프라인의 서볼은 추가 계산된 정보로 요청에 추가를 추가하는 방법으로 특성을 사용할 수 있습니다. 예를 들어 파이프라인의 서블릿은 요청에서 쿠키를 읽고, 해당 쿠키에 해당하는 세션 개체를 찾고, 파이프라인의 후속 서블릿에서 해당 세션 개체를 사용할 수 있도록 하는 책임을 담당할 수 있습니다. servlet잘 알려진 특성 이름을 사용 하 여 특성으로 세션 개체를 추가 하 여이 작업을 수행할 수 있습니다. 후속 서블릿은 해당 이름을 사용하여 세션 개체를 추출할 수 있습니다. requestURI 브라우저에서 보낸 URL을 처리 합니다. 예를 들어, 이제 우리는 우리의 예제의 빈 Maven 프로젝트와 함께 준비. 그러나 코딩을 시작하기 전에 pom.xml 파일에 몇 줄을 추가해야합니다. 메서드 getParameter(), getParameterValues(및 getParameterNames())는 이러한 인수에 액세스하는 방법으로 제공됩니다.

예를 들어 info=intro의 쿼리 문자열이 있는 GET 요청에서 호출 getParameter(“info”)는 소개를 반환합니다. 이 자습서에서는 Mockito 프레임워크에서 JUnit을 사용하는 방법을 설명했습니다. 그것은 우리가 서볼레 예제를 통해 HttpServlet 클래스를 테스트하는 데 도움이됩니다. 이 클래스 캡은 입력 스트림을 두 번 읽는 예제로 볼 수 있지만 그렇지 않습니다. contextPath, servletPath 및 pathTranslated에는 추가 정보가 필요합니다. 예를 들어 pathInfo에서 번역된 경로를 확인하려면 웹 서버는 문서 루트가 무엇인지 알아야 합니다. 웹 서버는 응용 프로그램의 application.xml 파일을 사용하여 contextPath를 인식합니다. 또는 pathInfo에서 servletPath를 분할하려면 웹 서버는 /personal과 같이 특별히 처리해야 하는 접두사를 알아야 합니다. 다른 요청에는 컨텍스트Path 또는 servletPath가 없을 수 있으며 pathInfo가 전혀 분할되지 않습니다. MyServletDemo.java 이 서볼릿 클래스에서는 getParameter() 메서드를 사용하여 매개 변수의 값을 얻고 있으며이 메서드는 ServletRequest 인터페이스에 속합니다.

이 예제에서는 httpServletRequest doGet() 메서드의 매개 변수로 httpServlet, HttpServletRequest 는 getParameter() 메서드를 req 개체에 사용할 수 있는 이유인 ServletRequest 인터페이스를 확장합니다. 파이프라인의 모든 서블릿은 동일한 ServletInputStream을 공유하므로 하나의 서블릿이 스트림에서 읽는 경우 읽은 데이터는 다른 서블릿에서 더 이상 사용할 수 없습니다. 특정 작업은 ServletInputStream에서 암시적 읽기도 수행합니다. 예를 들어 POST 요청에서 getParameter 반환 값이 게시된 데이터에서 가져온 호출이 앞에서 언급되었습니다. 이는 게시된 데이터가 이미 읽혀졌으며 ServletInputStream을 통해 더 이상 사용할 수 없음을 의미합니다.