i-jetty android服务器 程序开发示例--图片验证码

1.首先下载ijetty,并安装到android设备上。http://code.google.com/p/i-jetty/downloads/list
下图,左边的是webapp 安装部署界面,其实就是将其自带的示例webapp安装到sdcard上。
  右边是ijetty服务器控制台,点击start jetty就开启了服务。
这个app的源码先不研究。
  i-jetty android服务器 程序开发示例--图片验证码 i-jetty android服务器 程序开发示例--图片验证码

2.如果你想要看看其自带的webapp示例,可以从google code下载:
google code的下载方式(需要svn):windows命令行  svn checkout  http ://i-jetty.googlecode.com/svn/trunk/ i-jetty-read-only
下载后目录为...\administrator\i-jetty-read-only\ 里面的console文件夹下有个webapp目录,里面就是webapp的android源码了,这个app复杂一些,带有javascript。另外还带了一个极简单的example-webapps,可以瞧瞧。

3.下面开始以本日志的主题---图片验证码,为例,也演示一下android webapp的开发流程
1)在eclipse中新建一个Dynamic Web Project
2)新建源码 ServletDraw .java
[java]  view plain copy print ?
  1. package com.qylk.webview;  
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.IOException;  
  4. import java.util.Random;  
  5. import javax.servlet.ServletConfig;  
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.ServletOutputStream;  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11. import android.graphics.Bitmap;  
  12. import android.graphics.Bitmap.Config;  
  13. import android.graphics.Canvas;  
  14. import android.graphics.Color;  
  15. import android.graphics.Paint;  
  16. public class ServletDraw extends HttpServlet {  
  17.     private static final long serialVersionUID = 1L;  
  18.     protected static Random random = new Random();  
  19.     @Override  
  20.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  21.             throws ServletException, IOException {  
  22.         doPost(req, resp);  
  23.     }  
  24.     @Override  
  25.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  26.             throws ServletException, IOException {// TODO Auto-generated metho  
  27.         req.setCharacterEncoding("utf-8");  
  28.         resp.setContentType("image/jpeg"); // 设置输出类型为jpeg图片  
  29.         ServletOutputStream out = resp.getOutputStream(); // 得到二进制输出流  
  30.         String codestr = creatCodeImg(out);  
  31.         req.getSession().setAttribute("rand", codestr); // 保存到session里面  
  32.     }  
  33.     private String creatCodeImg(ServletOutputStream out) {  
  34.         int width = 170;  
  35.         int height = 125// 验证图片的宽度,高度  
  36.         String code = getString();  
  37.         Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);  
  38.         Canvas canvas = new Canvas(bitmap);  
  39.         canvas.drawColor(Color.WHITE);  
  40.         Paint paint = new Paint();  
  41.         paint.setTextSize(30);  
  42.         paint.setColor(Color.BLUE);  
  43.         canvas.drawText(code, 5570, paint);  
  44.         for (int i = 0; i < 1; i++) {  
  45.         canvas.drawLine(06017560, paint);  
  46.         }  
  47.         for (int i = 0; i < 255; i++) {  
  48.             canvas.drawPoint(random.nextInt(width), random.nextInt(height),  
  49.                     paint);  
  50.         }  
  51.         canvas.save(Canvas.ALL_SAVE_FLAG);  
  52.         canvas.restore();  
  53.         ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  54.         bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);  
  55.         try {  
  56.             out.write(baos.toByteArray());  
  57.             out.flush();  
  58.         } catch (IOException e) {  
  59.             e.printStackTrace();  
  60.         }  
  61.         return code;  
  62.     }  
  63.     /** 
  64.      * @desc 产生随机字符 
  65.      * @author aj 
  66.      * @date 2011-3-30 
  67.      * */  
  68.     protected static String getString() {  
  69.         String old = "123456789abcdefghijkmnpqrstuvwxyz"// 验证图片上面的随机字符  
  70.         StringBuffer sb = new StringBuffer();  
  71.         int j = 0;  
  72.         for (int i = 0; i < 4; i++) {  
  73.             j = random.nextInt(old.length());  
  74.             sb.append(old.substring(j, j + 1));  
  75.         }  
  76.         return sb.toString();  
  77.     }  
  78.     @Override  
  79.     public void init(ServletConfig config) throws ServletException {  
  80.         super.init(config);  
  81.     }  
  82. }  


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]  view plain copy print ?
  1. <?xml version="1.0" encoding="ISO-8859-1"?>  
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"   
  4.     version="3.0">  
  5.     <servlet>  
  6.         <servlet-name>draw</servlet-name>  
  7.         <servlet-class>com.qylk.webview.ServletDraw</servlet-class>  
  8.     </servlet>  
  9.     <servlet-mapping>  
  10.         <servlet-name>draw</servlet-name>  
  11.         <url-pattern>/codeimg/*</url-pattern>  
  12.     </servlet-mapping>  
  13.       
  14.     <welcome-file-list>  
  15.         <welcome-file>index.html</welcome-file>  
  16.         <welcome-file>index.htm</welcome-file>  
  17.         <welcome-file>default.html</welcome-file>  
  18.         <welcome-file>default.htm</welcome-file>  
  19.     </welcome-file-list>  
  20. </web-app>  


5)在WebContent目录下新建index.html,用来显示验证码图片( 需要注意:ijetty默认还不支持jsp页面
[html]  view plain copy print ?
  1. <html>  
  2. <head>  
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  4. <title>code image</title>  
  5. <script type="text/javascript">  
  6.     function change() {  
  7.         document.getElementById("codeimg").src = "codeimg";  
  8.     };  
  9. </script>  
  10. </head>  
  11. <body>  
  12.     <span> <img src="codeimg" id="codeimg"  
  13.         style="margin-left: 12px;" onclick="change();" title="看不清" />  
  14.     </span>  
  15. </body>  
  16. </html>  


6)一个简单的webapp完成了,接下来将编译的class文件打包,利用android-sdk自带的dx.jar,为了方便,提供一个bat脚本一键完成打包工作和webapp上传至sdcard的工作:
在工程目录下,新建GenerateClassZipAndPush.bat
[plain]  view plain copy print ?
  1. ECHO 确保你已经设置了ANDROID_HOME环境变量  
  2. pause  
  3. @set ANDROID_DIR=%ANDROID_HOME%  
  4. call %ANDROID_DIR%\platform-tools\dx --dex --output=%cd%\WebContent\WEB-INF\lib\classes.zip %cd%\build\classes  
  5. echo dx success  
  6. adb push %cd%\WebContent /mnt/sdcard/jetty/webapps/myweb  
  7. echo push success  
  8. pause  

在windows资源管理器下执行此脚本(不要直接在eclipse里面点击执行,因为发现路径有点问题),不出问题的话,然后就可以在 WebContent\WEB-INF\lib下看到 classes.zip(几个kb大小),上面的脚本最后将整个WebContent目录上传到/sdcard/jetty/webapps/目录下,取名为myweb,为了这一步不出错,adb push 应该确保可以执行,另外工程的绝对路径不能带空格和汉字,工程里面也不允许出现中文名的文件。

7)一切完成后,将PC与android设备wifi连接,打开ijetty,点击start jetty就开启服务器了,接着在浏览器中输入android设备的ip地址和默认端口,例如:192.168.0.110:8080,看看效果吧(以下是在Chrome浏览器里的效果)。
i-jetty android服务器 程序开发示例--图片验证码
转自: http://blog.csdn.net/qylk2008/article/details/9266219

你可能感兴趣的:(i-jetty android服务器 程序开发示例--图片验证码)