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 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
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:
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页面)
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
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
页:
[1]