2013-06-05 2 views
3

정적 HTML 페이지와 서블릿을 제공하기 위해 Android 플랫폼에서 Jetty를 실행 중입니다. 지금은 JSP 페이지에 대한 지원을 추가하기 위해 노력했습니다하지만 난 어떤 JSP를 요청할 때 나는이 예외를 가지고 : 여기 Android (Jetty 임베디드)에서 JSP 컴파일

HTTP ERROR 500 

Problem accessing /time.jsp. Reason: 

    Server Error 

Caused by: 

org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP 

PWC6199: Generated servlet error: 
The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files 

PWC6199: Generated servlet error: 
The type java.lang.Throwable cannot be resolved. It is indirectly referenced from required .class files 

PWC6199: Generated servlet error: 
The type java.lang.String cannot be resolved. It is indirectly referenced from required .class files 

PWC6199: Generated servlet error: 
org.apache.jasper.runtime.HttpJspBase cannot be resolved to a type 

PWC6199: Generated servlet error: 
org.apache.jasper.runtime.JspSourceDependent cannot be resolved to a type 

PWC6199: Generated servlet error: 
JspFactory cannot be resolved to a type 

PWC6199: Generated servlet error: 
JspFactory cannot be resolved 

PWC6199: Generated servlet error: 
java.util.List cannot be resolved to a type 

PWC6199: Generated servlet error: 
Syntax error, parameterized types are only available if source level is 1.5 or greater 

PWC6199: Generated servlet error: 
String cannot be resolved to a type 

PWC6199: Generated servlet error: 
org.glassfish.jsp.api.ResourceInjector cannot be resolved to a type 

PWC6199: Generated servlet error: 
java.util.List cannot be resolved to a type 

PWC6199: Generated servlet error: 
Syntax error, parameterized types are only available if source level is 1.5 or greater 

PWC6199: Generated servlet error: 
String cannot be resolved to a type 

PWC6199: Generated servlet error: 
_jspx_dependants cannot be resolved to a variable 

PWC6199: Generated servlet error: 
HttpServletRequest cannot be resolved to a type 

PWC6199: Generated servlet error: 
HttpServletResponse cannot be resolved to a type 

PWC6199: Generated servlet error: 
java.io.IOException cannot be resolved to a type 

PWC6199: Generated servlet error: 
ServletException cannot be resolved to a type 

PWC6199: Generated servlet error: 
PageContext cannot be resolved to a type 

PWC6199: Generated servlet error: 
HttpSession cannot be resolved to a type 

PWC6199: Generated servlet error: 
ServletContext cannot be resolved to a type 

PWC6199: Generated servlet error: 
ServletConfig cannot be resolved to a type 

PWC6199: Generated servlet error: 
JspWriter cannot be resolved to a type 

PWC6199: Generated servlet error: 
Object cannot be resolved to a type 

PWC6199: Generated servlet error: 
JspWriter cannot be resolved to a type 

PWC6199: Generated servlet error: 
PageContext cannot be resolved to a type 

PWC6199: Generated servlet error: 
_jspxFactory cannot be resolved 

PWC6199: Generated servlet error: 
_jspx_resourceInjector cannot be resolved to a variable 

PWC6199: Generated servlet error: 
org.glassfish.jsp.api.ResourceInjector cannot be resolved to a type 

PWC6197: An error occurred at line: 3 in the jsp file: /time.jsp 
PWC6199: Generated servlet error: 
java.util.Date cannot be resolved to a type 

PWC6199: Generated servlet error: 
Throwable cannot be resolved to a type 

PWC6199: Generated servlet error: 
SkipPageException cannot be resolved to a type 

PWC6199: Generated servlet error: 
ServletException cannot be resolved to a type 

PWC6199: Generated servlet error: 
_jspxFactory cannot be resolved 


    at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:129) 
    at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:299) 
    at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:392) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:453) 
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:625) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:492) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:457) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 
    at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 
    at org.eclipse.jetty.server.Server.handle(Server.java:370) 
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) 
    at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949) 
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011) 
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644) 
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) 
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) 
    at java.lang.Thread.run(Thread.java:856) 

Powered by Jetty:// 

이 주요 활동에서 내 구성 코드 :

public void startServer() 
{ 
     server = new Server(8080); 

     System.setProperty("org.apache.jasper.compiler.disablejsr199", "true"); 

     // Create a resource handler for static content. 
     ResourceHandler staticResourceHandler = new ResourceHandler(); 
     staticResourceHandler.setResourceBase(Environment.getExternalStorageDirectory().getAbsolutePath() + "/web/static/"); 
     staticResourceHandler.setDirectoriesListed(false); 

     // Create context handler for static resource handler. 
     ContextHandler staticContextHandler = new ContextHandler(); 
     staticContextHandler.setContextPath("/static"); 
     staticContextHandler.setHandler(staticResourceHandler); 

     // Create WebAppContext for JSP files. 
     WebAppContext webAppContext = new WebAppContext(); 
     webAppContext.setContextPath("/"); 
     webAppContext.setResourceBase(Environment.getExternalStorageDirectory().getAbsolutePath() + "/web/"); 
     webAppContext.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false"); 

     // Create servlet context handler for main servlet. 
     ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); 
     servletContextHandler.setContextPath("/servlet"); 
     servletContextHandler.setResourceBase(Environment.getExternalStorageDirectory().getAbsolutePath() + "/web/servlet/"); 

     terminalServlet = new TerminalServlet(this); 
     networkServlet = new NetworkDrawerServlet(this); 
     servletContextHandler.setClassLoader(Thread.currentThread().getContextClassLoader()); 
     servletContextHandler.addServlet(new ServletHolder(terminalServlet),"/terminal"); 
     servletContextHandler.addServlet(new ServletHolder(networkServlet),"/topology"); 
     //servletContextHandler.addServlet(new ServletHolder(new DefaultServlet()), "/*"); 

     // Create a handler list to store our static, jsp and servlet context handlers. 
     HandlerList handlers = new HandlerList(); 
     handlers.setHandlers(new org.eclipse.jetty.server.Handler[] { staticContextHandler, webAppContext, servletContextHandler }); 

     // Add the handlers to the server and start jetty. 
     server.setHandler(handlers); 
    try { 
     server.start(); 
    } catch (Exception e) { 
    } 
} 

나는를 배치 extarnal 스토리지의 "/ web /"디렉토리 아래에있는 웹 서버 파일 (정적 컨텐츠 및 JSP 파일) (정적 컨텐츠의 경우 작동합니다. 매니페스트 파일에서 읽기 및 쓰기 권한을 설정했습니다).

나는 안드로이드에서 일반적인 confgiuration 문제라고 생각한다. 데스크탑에서 컴파일되고 실행되는 동일한 코드가 잘 동작하기 때문이다.

답변

4

Android에서 JSP를 사용할 수 없습니다.

또는 더 정확하게 말하면 Android 장치에서 JSP를 컴파일 할 수 없습니다.

기존 JspServlet 구현은 *.class 파일로 디렉토리에 *.java 소스를 컴파일하려고합니다, 표준 javac은 존재하지 않는, 그래서 당신은 심지어이이 작업을 수행하기 위해 이클립스에 의해 작성된 JDT 구현에 의지 할 수 있다고 생각하지만 것 몇 가지 기본적인 이유로 작동하지 않습니다.

  1. 기본 클래스 라이브러리는 JDT 컴파일러가 찾는 표준 위치에 없습니다. 이것이 모든 "해결할 수 없음"오류를 보는 이유입니다.
  2. *.class으로 컴파일하는 파일은 실제 Android 기기 자체가 *.class 파일을 인식하지 못하기 때문에 android에서 무의미합니다. Java가 아니라 Dalvik입니다. 개발/빌드시 Java에서 호환됩니다.
  3. Android의 Dalvik VM은 중독 된 바이트 코드를 예상합니다. JDT 컴파일러는이를 생성 할 수 없습니다.
  4. 나는이 마지막 단계를 수행 할 수있는 장치 분리 도구, 라이브러리 또는 유틸리티가 없음을 알고 있습니다. 존재하는 경우,이 추가 단계를 포함하도록 JSP 구현을 포크 및 수정해야합니다.
    1. 당신의 web.xml 또는 webdefault.xml에서 JspServlet을 제거

    당신이 JSP로 개발하고 안드로이드에 웹 애플리케이션을 원한다면

  5. , 이것은 당신이해야 할 것입니다. 어쨌든 Android에서는 사용할 수 없습니다.
  6. 개발 컴퓨터에서 JSP를 사전 컴파일하십시오.
  7. 컴파일 된 JSP 참조를 포함하도록 WEB-INF/web.xml을 업데이트하십시오. 다양한 JSPC 도구를 살펴보면이 개념을 모두 포함 할 수 있습니다 (포함 할 XML 조각 또는 기존 WEB-INF/web.xml을 직접 수정하여 표현할 수 있음)
  8. i에서 설명한 기술을 사용하여 컴파일 된 WAR 파일을 제외시킵니다. -jetty 프로젝트.

이 당신이 아니라 원시 *.jsp 파일 자체로, JSP를 함께 개발하고 안드로이드에 사용할 수 있지만 것보다는 (다음 안드로이드 바이트 코드 형식으로 dexified된다) 컴파일 된 *.class files

+0

는 없었다. 거기서 잘 잡는다. 모든 일을하고 있지만 놀랍습니다. – stu

관련 문제