2014-01-13 5 views
1

저는 localhost web/websocket 응용 프로그램을 uber jar 파일에 묶어서 작성하고 있습니다.uber jar 내의 HttpServlet은 jar 파일 안에있는 페이지를 보낼 수 있습니까?

단일 페이지 사이트이고 HttpServlet은 WebSocket 서버와 통신하는 html을 보냅니다. 페이지가 항아리 안에 남아 있고 거기에서 HttpServlet을로드하고 클라이언트에게 보낼 수있게하고 싶습니다.

이것이 가능합니까? 그렇다면 어떻게?

+0

이 방법으로 그것을 할 수 있습니다 - 페이지 사이트 ... 또한 uber jar는 무엇입니까? –

+0

@ElliottFrisch Elliot Frisch를 찾아 주셔서 감사합니다! 내 응용 프로그램은 자체 포함 된 webapp입니다. 'HttpServlet'은 css, javascript 등의 모든 HTML 파일을 사용자에게 보내어 사용자가 서버의 WebSocket 측에 연결하고 상호 작용할 수 있도록합니다. 즉, 사용자가 항아리를 실행하고 브라우저를 열고 'https : // localhost'(또는 필요한 경우 다른 포트)로 이동하여 모든 것을 한 번에 할 수 있기를 바랍니다. 이것은 uber 항아리입니다 : http://stackoverflow.com/questions/11947037/what-is-an-uber-jar –

답변

0

HttpServlet은 원하는대로 반환 할 수 있으므로 응답에서 원하는 것을 설정하면됩니다. 나는 당신이 실제로 찾고있는 답을 추측하고있어

당신이 무엇을 요구 분명하지 않다

public class MyServlet extends HttpServlet { 
    public void doGet(HttpServletRequest request, HttpServletResponse response) { 
     PrintWriter out = response.getWriter(); 
     InputStream input = this.class.getResourceAsStream("/path/to/this.html"); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(input)); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      out.println(line); 
     } 
    } 
} 
+0

그 대답의 대부분이었습니다. JAR 내부의 모든 파일에 리소스로 액세스 할 수 있습니다. 응답의 4/5 행에는 관련 코드 (getResourceAsStream 및 BufferedReader에 배치)가 있습니다. –

+1

@Gracchus 실제로는 특정 JAR이 아닌 클래스 경로를 참조합니다. classpath 안에있는 모든 JAR에 /path/to/this.html을 넣을 수 있습니다. 그러면로드됩니다. http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResourceAsStream%28java.lang.String%29가 유용 할 수 있습니다. –

0

하지만이 같이 보입니다.

당신이 (항아리에 예를 들어) 클래스 경로에서 파일을로드하려는 경우, 당신은 하나에 있다면 당신은 페이지를 보내지한다

public class Test { 

    public static void main(String[] args) { 
     InputStream resourceAsStream = Test.class.getResourceAsStream("/test.html"); 
     // use the stream here... 
     System.out.println(resourceAsStream); 
    } 
}