|
1.首先下载ijetty,并安装到android设备上。http://code.google.com/p/i-jetty/downloads/list
下图,左边的是webapp 安装部署界面,其实就是将其自带的示例webapp安装到sdcard上。
右边是ijetty服务器控制台,点击start jetty就开启了服务。
这个app的源码先不研究。
2.如果你想要看看其自带的webapp示例,可以从google code下载:
google code的下载方式(需要svn):windows命令行 svn checkouthttp://i-jetty.googlecode.com/svn/trunk/i-jetty-read-only
下载后目录为...\administrator\i-jetty-read-only\里面的console文件夹下有个webapp目录,里面就是webapp的android源码了,这个app复杂一些,带有javascript。另外还带了一个极简单的example-webapps,可以瞧瞧。
3.下面开始以本日志的主题---图片验证码,为例,也演示一下androidwebapp的开发流程
1)在eclipse中新建一个Dynamic Web Project
2)新建源码ServletDraw.java
[java]viewplaincopyprint?
- packagecom.qylk.webview;
- importjava.io.ByteArrayOutputStream;
- importjava.io.IOException;
- importjava.util.Random;
- importjavax.servlet.ServletConfig;
- importjavax.servlet.ServletException;
- importjavax.servlet.ServletOutputStream;
- importjavax.servlet.http.HttpServlet;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- importandroid.graphics.Bitmap;
- importandroid.graphics.Bitmap.Config;
- importandroid.graphics.Canvas;
- importandroid.graphics.Color;
- importandroid.graphics.Paint;
- publicclassServletDrawextendsHttpServlet{
- privatestaticfinallongserialVersionUID=1L;
- protectedstaticRandomrandom=newRandom();
- @Override
- protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)
- throwsServletException,IOException{
- doPost(req,resp);
- }
- @Override
- protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)
- throwsServletException,IOException{//TODOAuto-generatedmetho
- req.setCharacterEncoding("utf-8");
- resp.setContentType("image/jpeg");//设置输出类型为jpeg图片
- ServletOutputStreamout=resp.getOutputStream();//得到二进制输出流
- Stringcodestr=creatCodeImg(out);
- req.getSession().setAttribute("rand",codestr);//保存到session里面
- }
- privateStringcreatCodeImg(ServletOutputStreamout){
- intwidth=170;
- intheight=125;//验证图片的宽度,高度
- Stringcode=getString();
- Bitmapbitmap=Bitmap.createBitmap(width,height,Config.ARGB_8888);
- Canvascanvas=newCanvas(bitmap);
- canvas.drawColor(Color.WHITE);
- Paintpaint=newPaint();
- paint.setTextSize(30);
- paint.setColor(Color.BLUE);
- canvas.drawText(code,55,70,paint);
- for(inti=0;i<1;i++){
- canvas.drawLine(0,60,175,60,paint);
- }
- for(inti=0;i<255;i++){
- canvas.drawPoint(random.nextInt(width),random.nextInt(height),
- paint);
- }
- canvas.save(Canvas.ALL_SAVE_FLAG);
- canvas.restore();
- ByteArrayOutputStreambaos=newByteArrayOutputStream();
- bitmap.compress(Bitmap.CompressFormat.PNG,100,baos);
- try{
- out.write(baos.toByteArray());
- out.flush();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- returncode;
- }
- /**
- *@desc产生随机字符
- *@authoraj
- *@date2011-3-30
- **/
- protectedstaticStringgetString(){
- Stringold="123456789abcdefghijkmnpqrstuvwxyz";//验证图片上面的随机字符
- StringBuffersb=newStringBuffer();
- intj=0;
- for(inti=0;i<4;i++){
- j=random.nextInt(old.length());
- sb.append(old.substring(j,j+1));
- }
- returnsb.toString();
- }
- @Override
- publicvoidinit(ServletConfigconfig)throwsServletException{
- super.init(config);
- }
- }
3)根据实际开发需要,可能需要引入支持包(这些支持包在你的sdcard卡上,ijetty自带的webapps/console/web-inf/lib下可以找到,把它们导出来放到本地硬盘某个固定目录下统一管理)。
另外必须需要servelt-api.jar和android.jar,如果安装了tomcat,这个包servelt-api.jar会自动加上,android.jar在android-sdk目录下\platforms\android-xx里面,手动将其引入本工程。本例因为就一个java文件,没涉及到太多api,因此除了servelt-api.jar需要注意一下,其他如果没有错误,就可以了。
4)在WebContent\Web-inf配置web.xml:
[html]viewplaincopyprint?
- <?xmlversion="1.0"encoding="ISO-8859-1"?>
- <web-appxmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
- version="3.0">
- <servlet>
- <servlet-name>draw</servlet-name>
- <servlet-class>com.qylk.webview.ServletDraw</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>draw</servlet-name>
- <url-pattern>/codeimg/*</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.htm</welcome-file>
- <welcome-file>default.html</welcome-file>
- <welcome-file>default.htm</welcome-file>
- </welcome-file-list>
- </web-app>
5)在WebContent目录下新建index.html,用来显示验证码图片(需要注意:ijetty默认还不支持jsp页面)
[html]viewplaincopyprint?
- <html>
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
- <title>codeimage</title>
- <scripttype="text/javascript">
- functionchange(){
- document.getElementById("codeimg").src="codeimg";
- };
- </script>
- </head>
- <body>
- <span><imgsrc="codeimg"id="codeimg"
- style="margin-left:12px;"onclick="change();"title="看不清"/>
- </span>
- </body>
- </html>
6)一个简单的webapp完成了,接下来将编译的class文件打包,利用android-sdk自带的dx.jar,为了方便,提供一个bat脚本一键完成打包工作和webapp上传至sdcard的工作:
在工程目录下,新建GenerateClassZipAndPush.bat
[plain]viewplaincopyprint?
- ECHO确保你已经设置了ANDROID_HOME环境变量
- pause
- @setANDROID_DIR=%ANDROID_HOME%
- call%ANDROID_DIR%\platform-tools\dx--dex--output=%cd%\WebContent\WEB-INF\lib\classes.zip%cd%\build\classes
- echodxsuccess
- adbpush%cd%\WebContent/mnt/sdcard/jetty/webapps/myweb
- echopushsuccess
- pause
在windows资源管理器下执行此脚本(不要直接在eclipse里面点击执行,因为发现路径有点问题),不出问题的话,然后就可以在WebContent\WEB-INF\lib下看到classes.zip(几个kb大小),上面的脚本最后将整个WebContent目录上传到/sdcard/jetty/webapps/目录下,取名为myweb,为了这一步不出错,adbpush 应该确保可以执行,另外工程的绝对路径不能带空格和汉字,工程里面也不允许出现中文名的文件。
7)一切完成后,将PC与android设备wifi连接,打开ijetty,点击start jetty就开启服务器了,接着在浏览器中输入android设备的ip地址和默认端口,例如:192.168.0.110:8080,看看效果吧(以下是在Chrome浏览器里的效果)。
转自:http://blog.csdn.net/qylk2008/article/details/9266219 |
|