2014-01-20 4 views
0

i-Jetty에서 호스팅 될 때 Android API를 사용하는 자바 서블릿을 디버깅하는 방법을 아는 사람이 있습니까?Android (iJetty)에서 Jetty for Eclipse로 서블릿을 디버깅하는 방법은 무엇입니까?

일반 웹 사이트 (Android/i-jetty는 제외)의 경우 Debug As -> Debug On Server를 사용하여 로컬 서버에서 Eclipse EE를 사용하여 디버깅 할 수 있습니다.

Android 애플리케이션의 경우 Eclipse 용 Android 개발 도구를 사용하고 디버그 -> Android 애플리케이션을 실행합니다.

하지만이 경우 전쟁에서 Android 코드가 패키지되어 있습니다.

다음 POM.xml 파일과 maven을 사용하여 i-Jetty와 함께 사용할 war 파일을 패키지화합니다. dx 유틸리티를 실행하여 서블릿을 Java에서 Dalvik으로 변환합니다. 결과를 배포하고 Android의 i-jetty에서 실행할 수 있습니다. 그러나 LogCat 출력물을 통해 서블릿 호출을 디버깅하는 방법 이외의 다른 방법으로 서블릿 호출을 디버그하는 방법을 알 수 없습니다. 나는 Eclipse에서 i-jetty를 만들려고 노력했다. (또한 Maven으로 만들어졌다.) ADT가 서블릿으로 실행을 추적 할 수 있는지를 보았지만 그 경로가 유익한 지 확실하지 않았다.

<?xml version="1.0" encoding="UTF-8" ?> 
    <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/maven-v4_0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <parent> 
    <groupId>org.mortbay.ijetty</groupId> 
    <artifactId>example-webapps-parent</artifactId> 
    <version>3.2-SNAPSHOT</version> 
    <relativePath>../pom.xml</relativePath> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <artifactId>blahblah</artifactId> 
    <name>I-Jetty :: blahblah</name> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <url>http://maven.apache.org</url> 
    <build> 
    <plugins> 
    <plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
    <source>1.5</source> 
    <target>1.5</target> 
    <verbose>false</verbose> 
    </configuration> 
    </plugin> 
    <!-- Convert the compiled classes into a clases.dex. 
    --> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.1</version> 
    <executions> 
    <execution> 
    <id>generate-dex</id> 
    <phase>process-classes</phase> 
    <goals> 
    <goal>exec</goal> 
    </goals> 
    <configuration> 
    <!-- executable>${env.ANDROID_HOME}/platform-tools/dx</executable 
    --> 
    <executable>java</executable> 
    <arguments> 
    <!-- <argument>-JXmx1024M</argument> 
    --> 
    <argument>-jar</argument> 
    <argument>${env.ANDROID_HOME}/platform-tools/lib/dx.jar</argument> 
    <argument>--dex</argument> 
    <argument>--verbose</argument> 
    <argument>--core-library</argument> 
    <argument>--output=${project.build.directory}/classes.dex</argument> 
    <argument>--positions=lines</argument> 
    <argument>${project.build.directory}/classes/</argument> 
    </arguments> 
    </configuration> 
    </execution> 
    </executions> 
    </plugin> 
    <plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
    <execution> 
    <id>copydex</id> 
    <phase>process-classes</phase> 
    <goals> 
    <goal>run</goal> 
    </goals> 
    <configuration> 
    <tasks> 
    <mkdir dir="${project.build.directory}/${project.artifactId}-${project.version}/WEB- INF/lib" /> 
    <jar basedir="${project.build.directory}" update="true" includes="classes.dex"  destfile="${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/lib/classes.zip" /> 
    </tasks> 
    </configuration> 
    </execution> 
    </executions> 
    </plugin> 
    </plugins> 
    </build> 
<dependencies> 

<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>${servlet.version}</version> 
    <scope>provided</scope> 
    </dependency> 
    <dependency> 
    <groupId>com.google.android</groupId> 
    <artifactId>android</artifactId> 
    <version>${android.version}</version> 
    <scope>provided</scope> 
    </dependency> 
    </dependencies> 
    <repositories> 
    <repository> 
    <id>repo</id> 
    <releases> 
    <enabled>true</enabled> 
    <checksumPolicy>ignore</checksumPolicy> 
    </releases> 
    <snapshots> 
    <enabled>false</enabled> 
    </snapshots> 
    <url>file://${project.basedir}/repo</url> 
    </repository> 
    </repositories> 
    </project> 

답변

0

나는 그것이 내가 안드로이드 코드를 디버깅 로그 캣을 사용 하였다했던 방식과 서블릿 코드를 디버깅에 대한 응답에 메소드가 ServletOutputStream. 몇 가지 헬퍼 메소드를 추가 한 후 나는에 들어오는 요청에 대해 정말 상세한 JSON 형식의 출력을 얻을 수 있었다

예는 :.

private static String debugStringHeaders(HttpServletRequest request, int indent) 
{ 
    String indentString = RequestPrinter.repeat(INDENT_UNIT, indent); 
    StringBuilder sb = new StringBuilder(); 
    sb.append(indentString).append("{\n"); 
    Enumeration headerNames = request.getHeaderNames(); 
    while (headerNames.hasMoreElements()) { 
     String headerName = (String) headerNames.nextElement(); 
     Enumeration headerValues = request.getHeaders(headerName); 
     List<String> headerValuesList = new ArrayList<String>(); 
     while (headerValues.hasMoreElements()) { 
      String headerValue = (String) headerValues.nextElement(); 
      headerValuesList.add(headerValue); 
     } 
     sb. 
      append(RequestPrinter.debugStringHeader(indentString, headerName, headerValuesList)). 
      append(",\n"); 
    } 
    sb.append(indentString).append("}\n"); 
    return sb.toString(); 
} 

또한 안드로이드 로거를 가리 키도록 부두 로거를 해소 할 수 있습니다. 이렇게하면 Log.e ("TAG", "Error to log") 형식의 호출을 서블릿 코드 내에 작성하여 디버거에 표시 할 수 있습니다.

System.setProperty("org.eclipse.jetty.util.log.class", "org.mortbay.ijetty.AndroidLogger"); 
org.eclipse.jetty.util.log.Log.setLog(new AndroidLogger()); 
+0

감사합니다. 그래, 그래,하지만 난 그저 디버거를 사용하는 방법이 있기를 바라고있다. – bluesky