到目前为止,我试图使样品Android应用到嵌入式Android的Jetty Web服务器能够从谷歌code运行样品HELLO-3.1.war。虽然我在Eclipse中运行HELLO-3.1则空指针异常已经发生。
HTTP错误500问题访问/hello-3.1/sayit。原因: 内部服务器错误致:显示java.lang.NullPointerException 在org.mortbay.ijetty.hello.HelloWorld.init(HelloWorld.java:29) 在org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440) 在org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) 在org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 在org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401) 在org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 在org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 在org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) 在org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450) 在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在org.mortbay.jetty.Server.handle(Server.java:326) 在org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 在org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:928) 在org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549) 在org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 在org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 在org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) 在org.mortbay.thread.QueuedThreadPool $ PoolThread.run(QueuedThreadPool.java:582)技术码头://
您好-3.1的Web应用程序的编码:
<?XML版本=1.0编码=ISO-8859-1&GT?;< web应用程序 的xmlns =http://java.sun.com/xml/ns/javaee XMLNS:XSI =http://www.w3.org/2001/XMLSchema-instance XSI:的schemaLocation =http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd 版本=3.0> <! - < servlet的ID =JSP> < servlet的名称>&JSP LT; / servlet的名称> <的servlet类> org.apache.jasper.servlet.JspServlet< / servlet的类> <初始化参数> <参数-名称>&logVerbosityLevel LT; /参数 - 名称> <参数值>调试和LT; /参数值> < /初始化参数> <初始化参数> <参数-名称>&叉LT; /参数 - 名称> <参数值>假LT; /参数值> < /初始化参数> <初始化参数> <参数-名称>&xpoweredBy LT; /参数 - 名称> <参数值>假LT; /参数值> < /初始化参数> &所述;负载上启动大于0&下/负载上启动>< / servlet的> - > <&servlet的GT; < servlet的名称>&打招呼LT; / servlet的名称> <的servlet类> org.mortbay.ijetty.hello.HelloWorld< / servlet的类> < / servlet的> < Servlet映射> < servlet的名称>&打招呼LT; / servlet的名称> < URL模式> / sayit / *< / URL模式> < / Servlet映射>< / web-app的>
&LT;?XML版本=1.0编码=UTF-8&GT?;&LT;项目 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&GT; &所述亲本GT; &LT;&的groupId GT; org.mortbay.ijetty&LT; /的groupId&GT; &LT;的artifactId将实施例-的webapps亲和LT; / artifactId的&GT; &LT;&版GT; 3.1&LT; /版本&GT; &LT; relativePath&GT; ../的pom.xml&LT; / relativePath&GT; &LT; /母体GT; &LT; modelVersion&GT; 4.0.0&LT; / modelVersion&GT; &LT;&的artifactId GT;&打招呼LT; / artifactId的&GT; &LT;名称&gt; I-码头::你好&LT; /名称&gt; &LT;&版GT; 3.1&LT; /版本&GT; &LT;包装和GT;战争与LT; /包装&GT; &LT; URL&GT; HTTP://maven.apache.org< / URL&GT; &LT;建立&GT; &LT;&插件GT; &LT;&插件GT; &LT;&的artifactId GT; Maven的编译器插件&LT; / artifactId的&GT; &LT;结构&gt; &lt;信源&GT; 1.5 LT; /源&GT; &lt;目标&GT; 1.5 LT; /目标与GT; &LT(详细);假&LT; /详细&GT; &LT; /结构&gt; &LT; /插件&GT; &LT;! - 转换编译的类成clases.dex。 - &GT; &LT;&插件GT; &LT;的groupId方式&gt;组织codehaus.mojo&LT; /的groupId&GT; &LT;&的artifactId GT;的exec-Maven的插件&LT; / artifactId的&GT; &LT;&版GT; 1.1&LT; /版本&GT; &LT;&执行GT; &LT;执行与GT; &LT;&ID GT;生成-DEX&LT; / ID&GT; &LT;阶段&gt;工艺类&LT; /阶段&gt; &LT;目标&GT; &LT;&目标GT; EXEC&LT; /目标&GT; &LT; /目标&GT; &LT;结构&gt; &LT;! - 可执行&GT; $ {} env.ANDROID_HOME /平台的工具/ DX&LT; /可执行 - &GT; &LT;可执行指令GT;的Java&LT; /可执行&GT; &LT;&参数GT; &LT;! - &LT;&说法GT; -JXmx1024M&LT; /参数&GT; - &GT; &LT;&说法GT;&罐子LT; /参数&GT; &LT;&说法GT; $ {} env.ANDROID_HOME /platform-tools/lib/dx.jar</argument> &LT;&说法GT; - DEX&LT; /参数&GT; &LT;&说法GT; - 详细&LT; /参数&GT; &LT;&说法GT; - 核心库&LT; /参数&GT; &LT;&说法GT; - 输出= $ {} project.build.directory /classes.dex</argument> &LT;&说法GT; - 位置=行&LT; /参数&GT; &LT;&说法GT; $ {} project.build.directory /班/&LT; /参数&GT; &LT; /参数&GT; &LT; /结构&gt; &LT; /执行&GT; &LT; /处决&GT; &LT; /插件&GT; &LT;&插件GT; &LT;&的artifactId GT;的maven-antrun-插件&LT; / artifactId的&GT; &LT;&执行GT; &LT;执行与GT; &LT;&ID GT; copydex&LT; / ID&GT; &LT;阶段&gt;工艺类&LT; /阶段&gt; &LT;目标&GT; &LT;&目标GT;运行&LT; /目标&GT; &LT; /目标&GT; &LT;结构&gt; &LT;任务和GT; &LT;的mkdir DIR =$ {project.build.directory} / $ {project.artifactId} - $ {} project.version / WEB-INF / lib目录/&GT; &LT;罐子 BASEDIR =$ {} project.build.directory 更新=真 包括=classes.dex destfile=\"${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/lib/classes.zip\" /&GT; &LT; /任务&GT; &LT; /结构&gt; &LT; /执行&GT; &LT; /处决&GT; &LT; /插件&GT; &LT; /插件&GT; &LT; /构建&GT; &LT;依赖和GT; &LT;&依赖性GT; &LT;&的groupId GT; org.mortbay.jetty&LT; /的groupId&GT; &LT;&的artifactId GT;的servlet-API 2.5 LT; / artifactId的&GT; &LT;&版GT; 2.5 LT; /版本&GT; &LT;&范围GT;及提供LT; /&范围GT; &LT; /依赖性&GT; &LT;! - &LT;&依赖性GT; &LT;&的groupId GT; org.eclipse.jetty&LT; /的groupId&GT; &LT;&的artifactId GT;码头-JSP-2.1&LT; / artifactId的&GT; &LT;&版GT; 7.2.2.v20101205&LT; /版本&GT; &LT; /依赖性&GT; - &GT; &LT;! - &LT;&依赖性GT; &LT;&的groupId GT; org.mortbay.jetty&LT; /的groupId&GT; &LT;&的artifactId GT;的JSP 2.1的GlassFish&LT; / artifactId的&GT; &LT;&版GT; 2.1.v20100127&LT; /版本&GT; &LT; /依赖性&GT; - &GT; &LT;! - &LT;&依赖性GT; &LT;&的groupId GT;的javax.servlet&LT; /的groupId&GT; &LT;&的artifactId GT;的servlet-API&LT; / artifactId的&GT; &LT;&版GT; 2.5 LT; /版本&GT; &LT;&范围GT;及提供LT; /&范围GT;&LT; /依赖性&GT; - &GT;&LT;&依赖性GT; &LT;&的groupId GT;的javax.servlet&LT; /的groupId&GT; &LT;&的artifactId GT; jsp_api&LT; / artifactId的&GT; &LT;&版GT; 2.0&LT; /版本&GT; &LT;&范围GT;及提供LT; /&范围GT;&LT; /依赖性&GT; &LT;&依赖性GT; &LT;&的groupId GT; com.google.android&LT; /的groupId&GT; &LT;&的artifactId GT; Android设备和LT; / artifactId的&GT; &LT;&版GT; $ {android.version}&LT; /版本&GT; &LT;&范围GT;及提供LT; /&范围GT; &LT; /依赖性&GT; &LT; /依赖和GT;&LT; /项目&GT;
解决方案
JSP是不可能在Android上。
或者更准确,在Android设备上编译JSP是不可能的。
您需要做的:
从你的web.xml或webdefault.xml取出JspServlet。你不能在Android上使用也无妨。 pre-编译你的开发机器上你的JSP的,包括在你的web.xml编译JSP引用。在各种工装JSPC看在那里,他们都支持这一点。 Dexify使用在I-码头项目列出的技术岗位编译WAR文件。这将允许您使用JSP开发,并利用它们在Android,但不作为原料 *。JSP
文件本身,而是编译 *类
文件(然后dexified到了Android字节code格式)。
So far i am trying making sample android applications to embedded android jetty web server enables to run samples hello-3.1.war from Google code. While i run hello-3.1 in eclipse then null pointer exception has been occur.
HTTP ERROR 500
Problem accessing /hello-3.1/sayit. Reason:
INTERNAL_SERVER_ERROR
Caused by:
java.lang.NullPointerException
at org.mortbay.ijetty.hello.HelloWorld.init(HelloWorld.java:29)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Powered by Jetty://
Hello-3.1 web application Codings:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- <servlet id="jsp">
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>DEBUG</param-value>
</init-param>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet> -->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>org.mortbay.ijetty.hello.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/sayit/*</url-pattern>
</servlet-mapping>
</web-app>
<?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.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>hello</artifactId>
<name>I-Jetty :: Hello</name>
<version>3.1</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-2.5</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!-- <dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jsp-2.1</artifactId>
<version>7.2.2.v20101205</version>
</dependency> -->
<!-- <dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1-glassfish</artifactId>
<version>2.1.v20100127</version>
</dependency>-->
<!-- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency> -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp_api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>${android.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
解决方案
JSP is not possible on Android.
Or to be more accurate, compiling JSP on an Android device is not possible.
What you need to do:
Remove the JspServlet from your web.xml or webdefault.xml. You can't use it on Android anyway. Pre-compile your JSP's on your development machine and include the compiled JSP references in your web.xml. Look at the various JSPC tooling out there, they all support this. Dexify the post-compiled WAR file using the techniques outlined at the i-jetty project.This will allow you to develop with JSPs, and use them on Android, but not as the raw *.jsp
file itself, but rather the compiled *.class
files (which are then dexified into the Android bytecode format).
上一篇:是的LINQ到SQL动态何处条款甚至有可能在Framework 3.5?有可能、是的、条款、动态
下一篇:IBM工作灯 - Android SDK中 - 模拟器部署问题 - 不幸的是,“应用”已停止的是、模拟器、不幸、工作灯