2010-05-09 3 views

답변

5

ServletContext#getResource()을 사용할 수 있습니다.

URL resource = getServletContext().getResource("/WEB-INF/file.ext"); 
File file = new File(resource.getPath()); 
// ... 

당신은 직접 InputStream 얻을 ServletContext#getResourceAsStream()를 사용할 수 있습니다

당신이 예에서 볼 수 있듯이
InputStream input = getServletContext().getResourceAsStream("/WEB-INF/file.ext"); 
// ... 

ServletContext 상속 된 GenericServlet#getServletContext() 방법으로 서블릿에서 사용할 수 있습니다.


문구 나는 사용자가 내 자원의에 직접 액세스 할 수 싶지 않아, 말했다.은 약간 모순입니다. 어쨌든 서블릿으로 리소스를 제공하고 있습니까? 서블릿은 URL로 직접 액세스 할 수 있습니다. "직접 액세스"와 다른 점은 무엇입니까? 또는 일부 조건에 따라 액세스를 제어하고 싶습니까? 나는 Filter이이 작업에 더 적합하다고 말하고 싶습니다.

일반적으로 JSP 파일은 직접 액세스하지 못하도록합니다. MVC 패턴에 따라 전면 제어기 역할을하는 서블릿에서 ServletRequest#getRequestDispatcher()으로 차례로 얻을 수있는 RequestDispatcher#forward()을 사용하여 JSP 파일로 요청을 전달할 수 있습니다.

request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response); 
+0

원래 질문에 "사용자가 직접 URL을 입력하여 브라우저에서 리소스를 볼 수 없도록하고 싶습니다."라고 생각했습니다. WEB-INF 로의 "직접 접근"을 방지하고 서블릿이 자원에 접근하게하는 파일을 저장하는 것은 나에게 "최상의 방법"과 같이 들린다. – WineSoaked

+0

@WineSoaked : MVC로 제어되는 완전한 애플리케이션에서보기를 숨기고 싶기 때문에 일반적으로 JSP 파일에만 관심이 있습니다. CSS/HTML/Images/JS와 같은 정적 리소스의 경우? 아닙니다. 문제는 다르게 해결되어야합니다. 실제 기능 요구 사항이 불분명하기 때문에 분명하지 않습니다. – BalusC

+0

당신은 좋은 지적입니다. 하지만 서블릿이 런타임에 리소스를 생성하는 경우 (내 경험에 대해 전례가 없지만). 이 CSS/HTML/JS/등의 조각이있는 경우. 서블릿을 통해 처리되는 것은 그럴듯한 용도입니다. 그러나 WEB-INF의 바이트를 아무 것도하지 않고 브라우저로 퍼널하는 경우 서블릿은 프록시 역할을 수행하고있어 적합하지 않습니다. – WineSoaked

0

최종 사용자에게 jsp를 숨길 수 있습니다. CSS 파일을 사용하지 않는 /됩니다
http://tomcat.apache.org/tomcat-5.5-doc/jasper-howto.html#Web%20Application%20Compilation

을 및 HTML /의 JS를 숨길 수있는 유일한 방법 : 사실, 당신도 당신의 웹 응용 프로그램과 함께 원래의 JSP 파일을 배포 할 필요가 없습니다, 당신은 그들을 미리 컴파일 할 수 있습니다. 브라우저로 전송 된 내용은 모두 여기에서 볼 수 있습니다.

관련 문제