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

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 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
  1. packagecom.qylk.webview;
  2. importjava.io.ByteArrayOutputStream;
  3. importjava.io.IOException;
  4. importjava.util.Random;
  5. importjavax.servlet.ServletConfig;
  6. importjavax.servlet.ServletException;
  7. importjavax.servlet.ServletOutputStream;
  8. importjavax.servlet.http.HttpServlet;
  9. importjavax.servlet.http.HttpServletRequest;
  10. importjavax.servlet.http.HttpServletResponse;
  11. importandroid.graphics.Bitmap;
  12. importandroid.graphics.Bitmap.Config;
  13. importandroid.graphics.Canvas;
  14. importandroid.graphics.Color;
  15. importandroid.graphics.Paint;
  16. publicclassServletDrawextendsHttpServlet{
  17. privatestaticfinallongserialVersionUID=1L;
  18. protectedstaticRandomrandom=newRandom();
  19. @Override
  20. protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)
  21. throwsServletException,IOException{
  22. doPost(req,resp);
  23. }
  24. @Override
  25. protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)
  26. throwsServletException,IOException{//TODOAuto-generatedmetho
  27. req.setCharacterEncoding("utf-8");
  28. resp.setContentType("image/jpeg");//设置输出类型为jpeg图片
  29. ServletOutputStreamout=resp.getOutputStream();//得到二进制输出流
  30. Stringcodestr=creatCodeImg(out);
  31. req.getSession().setAttribute("rand",codestr);//保存到session里面
  32. }
  33. privateStringcreatCodeImg(ServletOutputStreamout){
  34. intwidth=170;
  35. intheight=125;//验证图片的宽度,高度
  36. Stringcode=getString();
  37. Bitmapbitmap=Bitmap.createBitmap(width,height,Config.ARGB_8888);
  38. Canvascanvas=newCanvas(bitmap);
  39. canvas.drawColor(Color.WHITE);
  40. Paintpaint=newPaint();
  41. paint.setTextSize(30);
  42. paint.setColor(Color.BLUE);
  43. canvas.drawText(code,55,70,paint);
  44. for(inti=0;i<1;i++){
  45. canvas.drawLine(0,60,175,60,paint);
  46. }
  47. for(inti=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. ByteArrayOutputStreambaos=newByteArrayOutputStream();
  54. bitmap.compress(Bitmap.CompressFormat.PNG,100,baos);
  55. try{
  56. out.write(baos.toByteArray());
  57. out.flush();
  58. }catch(IOExceptione){
  59. e.printStackTrace();
  60. }
  61. returncode;
  62. }
  63. /**
  64. *@desc产生随机字符
  65. *@authoraj
  66. *@date2011-3-30
  67. **/
  68. protectedstaticStringgetString(){
  69. Stringold="123456789abcdefghijkmnpqrstuvwxyz";//验证图片上面的随机字符
  70. StringBuffersb=newStringBuffer();
  71. intj=0;
  72. for(inti=0;i<4;i++){
  73. j=random.nextInt(old.length());
  74. sb.append(old.substring(j,j+1));
  75. }
  76. returnsb.toString();
  77. }
  78. @Override
  79. publicvoidinit(ServletConfigconfig)throwsServletException{
  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:
  1. <?xmlversion="1.0"encoding="ISO-8859-1"?>
  2. <web-appxmlns="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/javaeehttp://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. <welcome-file-list>
  14. <welcome-file>index.html</welcome-file>
  15. <welcome-file>index.htm</welcome-file>
  16. <welcome-file>default.html</welcome-file>
  17. <welcome-file>default.htm</welcome-file>
  18. </welcome-file-list>
  19. </web-app>


5)在WebContent目录下新建index.html,用来显示验证码图片( 需要注意:ijetty默认还不支持jsp页面
  1. <html>
  2. <head>
  3. <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
  4. <title>codeimage</title>
  5. <scripttype="text/javascript">
  6. functionchange(){
  7. document.getElementById("codeimg").src="codeimg";
  8. };
  9. </script>
  10. </head>
  11. <body>
  12. <span><imgsrc="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
  1. ECHO确保你已经设置了ANDROID_HOME环境变量
  2. pause
  3. @setANDROID_DIR=%ANDROID_HOME%
  4. call%ANDROID_DIR%\platform-tools\dx--dex--output=%cd%\WebContent\WEB-INF\lib\classes.zip%cd%\build\classes
  5. echodxsuccess
  6. adbpush%cd%\WebContent/mnt/sdcard/jetty/webapps/myweb
  7. echopushsuccess
  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浏览器里的效果)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值