当前位置:首页 > 代码 > 正文

jsp页面验证码代码段(验证码怎么用jsp写)

admin 发布:2022-12-19 11:44 126


今天给各位分享jsp页面验证码代码段的知识,其中也会对验证码怎么用jsp写进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

JSP验证码的代码段是不是一定要用到servlet?

是这个样子的,jsp都需要编译成servlet才能运行,本质上就是一个class,你可以在%Tomcat Home%\work\Catalina\localhost对应于你网站根路径的目录找到这个.java,你可以看到里面其实已经用了

PrintWriter out = response.getWriter();

或者类似的语句,这里面已经调用了一次getOutputStream().

所以如果你需要获得outputstream,一种方法就是你说的servlet,还有一种就是你可以直接引用out这个变量。不过这种做法只是一种投机的方法(万一在jsp编译出来的servlet变量名不是out就麻烦了),所以直接的方法还是servlet。

编写servlet不是很难,只要extends HttpServlet这个类,实现类中未实现的接口,在web.xml中加入url映射就行了,详细的可参考相关文档。直接用Myeclipse IDE或者JBuilder等IDE实现更简单,只要明白原理就不难。

验证码源代码,jsp

%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%

%@page import="java.awt.image.BufferedImage"%

%@page import="java.awt.Graphics2D"%

%@page import="java.awt.Color"%

%@page import="java.awt.Font"%

%@page import="javax.imageio.ImageIO"%

%

int width = 60;

int height = 20;

// 创建具有可访问图像数据缓冲区的Image

BufferedImage buffImg = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

Graphics2D g = buffImg.createGraphics();

// 创建一个随机数生成器

Random random = new Random();

g.setColor(Color.WHITE);

g.fillRect(0, 0, width, height);

// 创建字体,字体的大小应该根据图片的高度来定

Font font = new Font("Times New Roman", Font.PLAIN, 18);

// 设置字体

g.setFont(font);

// 画边框

g.setColor(Color.BLACK);

g.drawRect(0, 0, width - 1, height - 1);

// 随机产生160条干扰线

g.setColor(Color.LIGHT_GRAY);

for (int i = 0; i 160; i++) {

int x = random.nextInt(width);

int y = random.nextInt(height);

int x1 = random.nextInt(12);

int y1 = random.nextInt(12);

g.drawLine(x, y, x + x1, y + y1);

}

// randomCode 用于保存随机产生的验证码

StringBuffer randomCode = new StringBuffer();

int red = 0, green = 0, blue = 0;

// 随机产生4位数字的验证码

for (int i = 0; i 4; i++) {

// 得到随机产生的验证码数字

String strRand = String.valueOf(random.nextInt(10));

// 产生随机的颜色分量来构造颜色值

red = random.nextInt(110);

green = random.nextInt(50);

blue = random.nextInt(50);

// 用随机产生的颜色将验证码绘制到图像中

g.setColor(new Color(red, green, blue));

g.drawString(strRand, 13 * i + 6, 16);

randomCode.append(strRand);

}

// 将四位数字的验证码保存到session中

//HttpSession session = request.getSession();

session.setAttribute("randomCode", randomCode.toString());

// 禁止图像缓存

response.setHeader("Pragma", "no-cache");

response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expires", 0);

response.setContentType("image/jpeg");

// 将图像输出到servlet输出流中

ServletOutputStream sos = response.getOutputStream();

ImageIO.write(buffImg, "jpeg", sos);

sos.close();

//sos = null;

out.clear();

out = pageContext.pushBody();

%

如何用Java代码段生成四位数字加字母的验证码?

不知道你问的是不是生成这种图片验证码?如果只要一个随机四位数 那这行代码就够了(new Random().nextInt(9000) + 1000;),如果是生成页面图片验证码就是下面的了: //设定 响应模式 resp.setContentType("image/jpeg"); // 生成令牌环数据; Integer token = new Random().nextInt(9000) + 1000; // 保存令牌环数据到session中 req.getSession().setAttribute(IMAGE_TOKEN_NAME, token); // 生成令牌环图片 ServletOutputStream out = resp.getOutputStream(); BufferedImage img = new BufferedImage(60, 20, BufferedImage.TYPE_INT_RGB); Graphics g = img.getGraphics(); g.setColor(Color.YELLOW); g.fillRect(0, 0, img.getWidth(), img.getHeight()); g.setColor(Color.BLUE); g.setFont(new Font("", Font.BOLD, 18)); g.drawString(String.valueOf(token), 10, 16); ImageIO.write(img, "jpg", out); out.close();

下面简单的介绍他们的功能和用途,执行效率等。每个都有各自的优缺点看你是做甚什么方面的研究开发用。.net,是网站编程,现在很多都用这个,但是这个语言编程都有统一思路,很好掌握。窒息那个效率不是很高;php 支持跨平台,很容易学会,执行的效率很高;asp是ASP.net的前身,它比较稳定,比.net要弱一点。但是比.net好学。jsp 是网页编程,这个学习大约一周就能搞定,不过这个得多实践,不然的话,时间长了,就容易忘记。

我自己做的系统里面用作验证码的JSP的%@page contentType="image/jpeg;charset=utf-8"%%@page import="java.util.*,java.awt.*,java.awt.image.*,javax.imageio.*" %%@ page import="java.io.OutputStream" %html body %! Color getRandColor(int fc,int bc) { Random rd=new Random(); if(fc255) fc=255; if(bc255) bc=255; int red=fc+rd.nextInt(bc-fc); int green=fc+rd.nextInt(bc-fc); int blue=fc+rd.nextInt(bc-fc); return new Color(red,green,blue); } % % Random r=new Random(); response.addHeader("Pragma","No-cache"); response.addHeader("Cache-Control","no-cache"); response.addDateHeader("expires",0); int width=90; int height=23; BufferedImage pic=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); Graphics gc=pic.getGraphics(); gc.setColor(getRandColor(200,250)); gc.fillRect(0,0,width,height); String[] rNum ={"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f", "g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w", "x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N", "O","P","Q","R","S","T","U","V","W","X","Y","Z"}; int[] style = {Font.PLAIN,Font.BOLD,Font.ITALIC,Font.PLAIN+Font.BOLD, Font.BOLD+Font.ITALIC,Font.PLAIN+Font.ITALIC,Font.PLAIN+Font.BOLD+Font.ITALIC}; gc.setColor(Color.WHITE); gc.drawLine(0,30,90,10); gc.setColor(getRandColor(160,200)); for (int i=0;i50;i++) { int x = r.nextInt(width); int y = r.nextInt(height); int xl = r.nextInt(10); int yl = r.nextInt(10); gc.drawLine(x,y,x+xl,y+yl); } gc.setColor(getRandColor(60,150)); String rt = ""; for(int i=0;i4;i++){ String temp = rNum[r.nextInt(62)]; rt = rt+temp; gc.setFont(new Font("Times New Roman",style[r.nextInt(7)],15)); gc.drawString(temp,5+i*15+r.nextInt(10),10+r.nextInt(10)); } gc.dispose(); session.setAttribute("randNum",rt); OutputStream os=response.getOutputStream(); ImageIO.write(pic,"JPEG",os); System.out.println("当前验证码为:"+session.getAttribute("randNum")); os.flush(); os.close(); os=null; response.flushBuffer(); out.clear(); out = pageContext.pushBody(); % /body/html

jsp页面该如何刷新验证码

(1)jsp代码:

img id = "img_authcode" src="${ctx}/account/authcode" /a href="javascript:;" onclick="javascript:document.getElementById('img_authcode').setAttribute('src', '${ctx}/account/authcode?' + Math.random())"换一换/a

(2)java代码(该代码为我自己框架代码,跟servlet写法不一样的我都给你注释了):

public View authcode() throws IOException {

HttpServletResponse response = PuffContext.getResponse();//获取response

response.setContentType("image/jpeg");

response.setHeader("Pragma", "No-cache");

response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expires", 0);

String authCode = AuthCodeUtil.getRandom(4); //获取验证码,代码在下面(3)

System.out.println("生成随机码:" + authCode);

PuffContext.getSession().setAttribute("session_authcode", authCode);//把该验证码存储在session

ServletOutputStream output = response.getOutputStream();

AuthCodeUtil.draw(output, authCode);

output.flush();

output.close();

return ViewFactory.nullView();//返回null

}

(3)///////////////////////////下面为生成验证码类////////////////////////////////////

public class AuthCodeUtil {

private final static Random random = new Random();

// 随机字体样式

private final static int[] fontStyle = { Font.HANGING_BASELINE, Font.ITALIC, Font.LAYOUT_LEFT_TO_RIGHT, Font.LAYOUT_NO_LIMIT_CONTEXT,

Font.LAYOUT_NO_START_CONTEXT, Font.LAYOUT_RIGHT_TO_LEFT };

/**

* 画随机码图

*

* @param out

* @param width

* @param height

* @throws IOException

*/

public static void draw(OutputStream out, String value) throws IOException {

int width = 80, height = 30;

BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics2D g = (Graphics2D) bi.getGraphics();

g.setColor(Color.WHITE);

g.fillRect(0, 0, width, height);

g.drawRect(1, 1, width - 2, height - 2);

for (int i = 0; i 10; i++) {

g.setColor(randColor(150, 250));

g.drawOval(random.nextInt(110), random.nextInt(24), 5 + random.nextInt(10), 5 + random.nextInt(10));

}

int n = (int) (Math.random() * 6);

Font mFont = new Font("Arial", fontStyle[n], 23);

g.setFont(mFont);

g.setColor(randColor(10, 240));

g.drawString(value, 10, 21);// 随机数,水平距离,垂直距离

ImageIO.write(bi, "png", out);

}

private static Color randColor(int fc, int bc) {// 给定范围获得随机颜色

if (fc 255)

fc = 255;

if (bc 255)

bc = 255;

int r = fc + random.nextInt(bc - fc);

int g = fc + random.nextInt(bc - fc);

int b = fc + random.nextInt(bc - fc);

return new Color(r, g, b);

}

public static void main(String[] args) throws IOException {

FileOutputStream out = new FileOutputStream("d:\\aa.png");

draw(out, getRandom(4));

}

public static String getRandom(int size) {// 随机字符串

char[] c = { '1', '3', '5', '6', '7', '8', '9' };

StringBuffer sb = new StringBuffer();

for (int i = 0; i size; i++)

sb.append(c[Math.abs(random.nextInt()) % c.length]);

return sb.toString();

}

}

jsp中显示验证码的代码怎么写?

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Random;

import javax.imageio.ImageIO;

/*生成验证码图片

*/

public class MakeCertPic {

 //验证码图片中可以出现的字符集,可以根据需要修改

 private char mapTable[]={

   'a','b','c','d','e','f',

   'g','h','i','j','k','l',

   'm','n','o','p','q','r',

   's','t','u','v','w','x',

   'y','z','0','1','2','3',

   '4','5','6','7','8','9'

 };

/* 功能:生成彩色验证码图片

 参数wedth为生成图片的宽度,参数height为生成图片的高度,参数os为页面的输出流

*/

 public String getCertPic(int width,int height,OutputStream os){

  if(width=0)

   width=60;

  if(height=0)

   height=20;

  BufferedImage image= new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

  //获取图形上下文

  Graphics g = image.getGraphics();

  //设定背景颜色

  g.setColor(new Color(0xDCDCDC));

  g.fillRect(0,0,width,height);

  //画边框

  g.setColor(Color.black);

  g.drawRect(0,0,width-1,height-1);

  //随机产生的验证码

  String strEnsure = "";

  //4代表4为验证码,如果要产生更多位的验证码,则加大数值

  for(int i = 0;i4;++i){

   strEnsure += mapTable[(int) (mapTable.length*Math.random())];

  }

  //将认证码显示到图像中,如果要生成更多位的验证码,增加drawString语句

  g.setColor(Color.black);

  g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));

  String str = strEnsure.substring(0,1);

  g.drawString(str,8,17);

  str = strEnsure.substring(1,2);

  g.drawString(str, 20, 15);

  str = strEnsure.substring(2,3);

  g.drawString(str, 35, 18);

  str = strEnsure.substring(3,4);

  g.drawString(str, 45, 15);

  //随机产生15个干扰点

  Random rand = new Random();

  for(int i=0; i10; i++){

   int x = rand.nextInt(width);

   int y = rand.nextInt(height);

   g.drawOval(x,y,1,1);

  }

  //释放图形上下文

  g.dispose();

  try{

   //输出图形到页面

   ImageIO.write(image, "JPEG", os);

   

  }catch (IOException e){

   return "";

  }

  return strEnsure;

 }

}

makeCertPic.jsp页面用于调用生成验证码图片的JavaBean,并在客户端显示,源代码如下:

%@page contentType="image/jpeg" %%@page language="java" pageEncoding="utf-8"%jsp:useBean id="image" scope="page" class="securityCode.pic.MakeCertPic"/%

 String str = image.getCertPic(0,0,response.getOutputStream());

 //将验证码存入session中

 session.setAttribute("certCode",str);

%

下边是登录页面:

%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%

!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""

html

head

meta http-equiv="Content-Type" content="text/html; charset=UTF-8"

title验证码测试登录页面/title

  script type="text/javascript"

function changeimg()

{

var myimg = document.getElementById("code"); 

now = new Date(); 

myimg.src="makeCertPic.jsp?code="+now.getTime();

/script

/head

body

center

 form action="loginCheck.jsp" method="post" /

 用户名:input type="text" name="username" /br

 密nbsp;nbsp;码:input type="password" name="password"/br

 nbsp;验证码:input type="text" name="certCode"/

 img id="code" src="makeCertPic.jsp"a href="javascript:changeimg()"看不清,换一张 /abr

 input type="submit" value="登录"/

 /form

/center

/body

/html

JSP实现验证码 代码怎么写?

%@pagecontentType=\"image/jpeg\"import=\"java.awt.*,java.awt.image.*,java.util.*,javax.imageio.* \"% %! //createbysmallnest //email:smallnest@gmail.com //website: //生成随机颜色 ColorgetRandColor(Randomrandom,intfc,intbc)...{ if(fc255)fc=255; if(bc255)bc=255; intr=fc+random.nextInt(bc-fc); intg=fc+random.nextInt(bc-fc); intb=fc+random.nextInt(bc-fc); returnnewColor(r,g,b); } % % //设置页面不缓存 response.setHeader(\"Pragma\",\"No-cache\"); response.setHeader(\"Cache-Control\",\"no-cache\"); response.setDateHeader(\"Expires\",0); //设置图片的长宽 intwidth=176,height=30; //设置备选汉字,剔除一些不雅的汉字 Stringbase=\"的一了是我不在人们有来他这上着个地到大里说就去子得也和那要下看天时过出小么起你都把好 还多没为又可家学只以主会样年想生同老中十从自面前头道它后然走很像见两用她国动进成回什边作对开而己 些现山民候经发工向事命给长水几义三声于高手知理眼志点心战二问但身方实吃做叫当住听革打呢真全才四已 所敌之最光产情路分总条白话东席次亲如被花口放儿常气五第使写军吧文运再果怎定许快明行因别飞外树物活 部门无往船望新带队先力完却站代员机更九您每风级跟笑啊孩万少直意夜比阶连车重便斗马哪化太指变社似士 者干石满日决百原拿群究各六本思解立河村八难早论吗根共让相研今其书坐接应关信觉步反处记将千找争领或 师结块跑谁草越字加脚紧爱等习阵怕月青半火法题建赶位唱海七女任件感准张团屋离色脸片科倒睛利世刚且由 送切星导晚表够整认响雪流未场该并底深刻平伟忙提确近亮轻讲农古黑告界拉名呀土清阳照办史改历转画造嘴 此治北必服雨穿内识验传业菜爬睡兴形量咱观苦体众通冲合破友度术饭公旁房极南枪读沙岁线野坚空收算至政 城劳落钱特围弟胜教热展包歌类渐强数乡呼性音答哥际旧神座章帮啦受系令跳非何牛取入岸敢掉忽种装顶急林 停息句区衣般报叶压慢叔背细\"; [Page] //备选汉字的长度 intlength=base.length(); //创建内存图像 BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //获取图形上下文 Graphicsg=image.getGraphics(); //创建随机类的实例 Randomrandom=newRandom(); //设定图像背景色(因为是做背景,所以偏淡) g.setColor(getRandColor(random,200,250)); g.fillRect(0,0,width,height); //备选字体 String[]fontTypes=...{ \"宋体\",\"新宋体\",\"黑体\",\"楷体\",\"隶书\"}; intfontTypesLength=fontTypes.length; //在图片背景上增加噪点 g.setColor(getRandColor(random,160,200)); g.setFont(newFont(\"TimesNewRoman\",Font.PLAIN,14)); for(inti=0;i6;i++)...{ g.drawString(\"*********************************************\",0,5*(i+2)); } //取随机产生的认证码(6个汉字) //保存生成的汉字字符串 StringsRand=\"\"; for(inti=0;i6;i++)...{ intstart=random.nextInt(length); Stringrand=base.substring(start,start+1); sRand+=rand; //设置字体的颜色 g.setColor(getRandColor(random,10,150)); //设置字体 g.setFont(newFont(fontTypes[random.nextInt(fontTypesLength)],Font.BOLD,18+random.nextInt(6))); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 很多新手对图片验证码不是很了解,今天我们就来看看一个实例吧,首先,先写一个动态图片生成的Servlet类,如下: package org.yuanliang; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class RandomCode extends HttpServlet { private static final long serialVersionUID = 1L; private static int WIDTH = 65;//设置图片的宽度 private static int HEIGHT = 22;//设置图片的高度 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); response.setContentType(\"image/jpeg\"); ServletOutputStream sos = response.getOutputStream(); response.setHeader(\"Pragma\", \"No-cache\"); response.setHeader(\"Cache-Control\", \"no-cache\"); response.setDateHeader(\"Expires\", 0); BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); char[] rands = generateCheckCode(); drawBackground(g); drawRands(g, rands); g.dispose(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ImageIO.write(image, \"JPEG\", bos); byte[] buf = bos.toByteArray(); response.setContentLength(buf.length); sos.write(buf); bos.close(); sos.close(); session.setAttribute(\"randomCode\", new String(rands)); } private void drawBackground(Graphics g) { g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, WIDTH, HEIGHT); for (int i = 0; i 120; i++) { int x = (int) (Math.random() * WIDTH); int y = (int) (Math.random() * HEIGHT); int red = (int) (Math.random() * 255); int green = (int) (Math.random() * 255); int blue = (int) (Math.random() * 255); g.setColor(new Color(red, green, blue)); g.drawOval(x, y, 1, 0);[Page] } } private void drawRands(Graphics g, char[] rands) { // g.setColor(Color.BLUE); Random random = new Random(); int red = random.nextInt(110); int green = random.nextInt(50); int blue = random.nextInt(50); g.setColor(new Color(red, green, blue)); g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 18)); g.drawString(\"\" + rands[0], 1, 17); g.drawString(\"\" + rands[1], 16, 15); g.drawString(\"\" + rands[2], 31, 18); g.drawString(\"\" + rands[3], 46, 16); } private char[] generateCheckCode() { String chars = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\"; char[] rands = new char[4]; for (int i = 0; i 4; i++) { int rand = (int) (Math.random() * 36); rands[i] = chars.charAt(rand); } return rands; } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } } OK!!!保存为RandomCode.java吧,然后进行编译,生成RandomCode.class文件,放到WEB-INF/classes/org/yuanliang目录下; 然后在WEB-INF目录下建立web.xml,添加Servlet配置: jsp验证码生成以及刷新 关于jsp验证码生成,显示,验证和刷新: 1:四位数据的验证图片生成,用servlet实现 2: 在web.xmlli配置servlet 3:页面上显示servlet生成的图片 4: 关于验证码输入数据的验证 5: 验证码的刷新 ——————————————————————– 1:四位数据的验证图片生成,用servlet实现,servlet代码如下: import java.io.*; import javax.servlet.http.*; import javax.servlet.*; import java.util.*; import java.awt.*; import java.awt.image.*; import javax.imageio.*; public class vImage extends HttpServlet { public void init(ServletConfig conf) throws ServletException { super.init(conf); } public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType(”image/jpeg”); res.setHeader(”Pragma”, “No-cache”); res.setHeader(”Cache-Control”, “no-cache”); res.setDateHeader(”Expires”, 0); HttpSession session = req.getSession(); // 在内存中创建图象 int width = 60, height = 20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); // 生成随机类 Random random = new Random(); // 设定背景色 g.setColor(getRandColor(200, 250)); g.fillRect(0, 0, width, height); // 设定字体 g.setFont(new Font(”Times New Roman”, Font.PLAIN, 18)); // 画边框 //g.setColor(new Color()); //g.drawRect(0,0,width-1,height-1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(getRandColor(160, 200)); for (int i = 0; i 255) fc = 255; if (bc 255) bc = 255; int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); } } 2: 在web.xmlli配置servlet: vImage /vimage 注:注意元素在web.xml文件里的位置 3:页面上显示servlet生成的图片: 注:在需要显示验证码的地方加上这句,name在刷新验证码的时候会用到。 4: 关于验证码输入数据的验证: 验证码生成时存入了session,就是servlet里的这句session.setAttribute(”post_validate_code”, sRand);具体验证就不多说了。 5: 验证码的刷新 刷新验证码 function reloadImage(url) { document.form名字.pic.src = url; } 前两个有时间参考 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

关于jsp页面验证码代码段和验证码怎么用jsp写的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/7582.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载