设为首页 收藏本站
查看: 1292|回复: 0

[经验分享] i-jetty android服务器 程序开发示例--图片验证码

[复制链接]

尚未签到

发表于 2017-2-27 10:50:46 | 显示全部楼层 |阅读模式
1.首先下载ijetty,并安装到android设备上。http://code.google.com/p/i-jetty/downloads/list

下图,左边的是webapp 安装部署界面,其实就是将其自带的示例webapp安装到sdcard上。
右边是ijetty服务器控制台,点击start jetty就开启了服务。
这个app的源码先不研究。
DSC0000.jpg DSC0001.jpg


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浏览器里的效果)。
DSC0002.jpg
转自:http://blog.csdn.net/qylk2008/article/details/9266219

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-347867-1-1.html 上篇帖子: 备忘启动jetty后log中不断交替出现Connector vm://localhost Started/Stopped 下篇帖子: 在应用程序中使用Spring启动嵌入式Jetty并让Web程序共享同一个Application Context(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表