




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十四章 JSP常用技巧与应用JSP应用开发可以遵循一定的技巧和技术,掌握了这些技巧和技术,有助于提高开发效率,缩短开发周期。本章介绍JSP开发中一些常用的技巧和应用。本章主要内容如下: 分页技术; 验证码技术; 文件上传下载技术。 处理中文乱码显示14.1分页技术分页显示在网页展示数据时非常重要。分页显示可以根据网页需要实现各种显示特征,如页面信息数据来源、每页信息显示条数、页面如何跳转等。如果在所有页面中进行编码分页将增大工作量,并且代码也不规范,较好的方法是把分页显示功能集中到一个类中,做成一个分页显示组件类,供需要的页面调用。下面的实例在JSP页面bookList中使用了自定义分页显示类PageList,显示了图书表信息。实例用到的数据表为SQL Server 2000数据库data的图书表book,使用了数据库访问类DBConnection,请参阅本书源码,在此从略。数据分页显示类PageList。关键代码如例程14-1所示。【例程14-1】PageList.jsppackage com.tool;import java.sql.*;import com.tool.DBConnection; /的数据库访问类public class PageList ResultSet countRecordRs = null; / 数据总记录数据集ResultSet pageRs = null; / 分页时每页记录数据集public PageList() private int countRecord = 0; / 数据表记录总数public int pageSize; / 每页显示记录数public int pageCount; / 总页数public int pageCurrent = 0; / 当前页数private String countSQL = null; / 记录总数查询SQL语句private String pageSQL = null; / 分页查询SQL语句private String strParameter = ; / 查询参数变量private String nowPage; / 获取当前页页号private String httpFile; / 获取当前JSP页面文件DBConnection db = new DBConnection(); / 获取数据库连接/ 获取分页查询数据集(表名strTable、查询条件where、JSP文件file、页码参数pages)public ResultSet setQuerySQL(String table, String where, String file,String pages) throws SQLException ResultSet rs = null;this.nowPage = pages;this.httpFile = file; / 分页文件名countSQL = select count(*) from + table + + where;pageSQL = select * from + table + + where;try rs = querySQL(countSQL, pageSQL); catch (SQLException e) System.out.println(e);return rs;/ 接收参数进行首尾页判断(总记录查询字符串countSQL、分页查询字符串pageSQL)public ResultSet querySQL(String countSQL, String pageSQL)throws SQLException if (nowPage = null) pageCurrent = 1; else pageCurrent = Integer.parseInt(nowPage);if (pageCurrent pageCount) pageCurrent = pageCount; / 如果当前页大于总页数,则当前页等于总页数countRecordRs.close(); / 关闭数据总记录数据集pageRs = db.executeQuery(pageSQL); / 获取执行分页的结果集return pageRs;分页显示图书信息页面。具体代码如例程14-1所示。【例程14-1】bookList.jsp图书信息一览表.a1 color: #666666;font-family: 宋体;line-height: 20px;font-size: 12px;word-spacing: -3px;padding-top: 3px;font-size: 12px;word-spacing: -3px;padding-top: 3px;.a1 A:link color: #666666;text-decoration: none;.a1 A:Visited color: #666666;text-decoration: none;.a1 A:Hover color: #FF6600;text-decoration: none;图书信息一览表书号书名作者出版社出版日期价格 0) int i = 0;while (rs.next() i+;if (i (pageList.pageCurrent - 1) * pageList.pageSize)& (i 分页显示类PageList封装了分页显示方法,JSP网页调用该组件的属性和方法,实现分页显示。本例程序调用该组件的PageFooter()方法读取分页栏。运行结果如图14-1所示。 图14-1图书信息分页显示14.2验证码技术 如果您经常上网,就会知道在用户登录、注册邮箱、发表搏客等页面常常需要输入验证码。在一些电子商务应用,如注册网上银行帐号、申请社区会员用户等,使用验证码验证用户信息更是必不可少。那么,到底验证码起到了什么作用了呢?可以这样理解,验证码是指将一串随机产生的数字或符号叠加到一幅图片里,同时在图片里加上一些干扰信息,用于防止恶意破坏的验证信息。验证码由用户识别,输入表单并提交验证,验证成功后才能使用某项功能。验证码的作用主要是防止恶意用户自动注册、登陆、灌水等以达到反复申请帐号,攻击服务器,或对特定的注册用户使用特定程序暴力破解等。早期的验证码只是几个随机产生的数字或特殊符号,这些简单的识别信息容易被破解。随后出现的图象验证码增加了被破的难度,成为目前比较为流行的验证码。目前,在我国比较流行的验证码是汉字验证码。下面以用户登录为例分别实现数字和汉字两种验证码技术。1数字验证码页面。具体代码如例程14-2所示。【例程14-2】numberRandom.jsp 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);%/设置页面缓存 response.setHeader(Pragma, No-cache);response.setHeader(Cache-Control, no-cache);response.setDateHeader(Expires, 0);/创建图象 int width = 80, height = 20;BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);/获取图形 Graphics g = image.getGraphics();/生成随机类 Random random = new Random();/设置背景色 g.setColor(getRandColor(50, 250);g.fillRect(0, 0, width, height);/设置字体 g.setFont(new Font(Times New Roman, Font.PLAIN, 18);/设置边框 /g.setColor(new Color(); g.setColor(Color.gray);g.drawRect(0, 0, width - 1, height - 1);/随机产生干扰线g.setColor(getRandColor(150, 200);for (int i = 0; i 200; i+) int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x, y, x + xl, y + yl);/验证码显示到图象String sRand = ;for (int i = 0; i 该页面随机生成数字验证码,并把生成的验证码存放在session中,供用户登录页面调用。本例运行结果如图14-2所示。图14-2字符验证码2汉字验证码页面。具体代码如例程14-3所示。【例程14-3】chineseRandom.jsp 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);%/设置页面缓存response.setHeader(Pragma, No-cache);response.setHeader(Cache-Control, no-cache);response.setDateHeader(Expires, 0);/设置图片的长宽int width = 140, height = 25;/设置备选汉字String base = u7684u4e00u4e86u662fu6211u4e0du5728u4ebau4eecu6709u6765u4ed6u8fd9u4e0au7740u4e2au5730u5230u5927u91ccu8bf4u5c31u53bbu5b50u5f97u4e5fu548cu90a3u8981u4e0bu770bu5929u65f6u8fc7u51fau5c0fu4e48u8d77u4f60u90fdu628au597du8fd8u591au6ca1u4e3au53c8u53efu5bb6u5b66u53eau4ee5u4e3bu4f1au6837u5e74u60f3u751fu540cu8001u4e2du5341u4eceu81eau9762u524du5934u9053u5b83u540eu7136u8d70u5f88u50cfu89c1u4e24u7528u5979u56fdu52a8u8fdbu6210u56deu4ec0u8fb9u4f5cu5bf9u5f00u800cu5df1u4e9bu73b0u5c71u6c11u5019u7ecfu53d1u5de5u5411u4e8bu547du7ed9u957fu6c34u51e0u4e49u4e09u58f0u4e8eu9ad8u624bu77e5u7406u773cu5fd7u70b9u5fc3u6218u4e8cu95eeu4f46u8eabu65b9u5b9eu5403u505au53ebu5f53u4f4fu542cu9769u6253u5462u771fu5168u624du56dbu5df2u6240u654cu4e4bu6700u5149u4ea7u60c5u8defu5206u603bu6761u767du8bddu4e1cu5e2du6b21u4eb2u5982u88abu82b1u53e3u653eu513fu5e38u6c14u4e94u7b2cu4f7fu5199u519bu5427u6587u8fd0u518du679cu600eu5b9au8bb8u5febu660eu884cu56e0u522bu98deu5916u6811u7269u6d3bu90e8u95e8u65e0u5f80u8239u671bu65b0u5e26u961fu5148u529bu5b8cu5374u7ad9u4ee3u5458u673au66f4u4e5du60a8u6bcfu98ceu7ea7u8ddfu7b11u554au5b69u4e07u5c11u76f4u610fu591cu6bd4u9636u8fdeu8f66u91cdu4fbfu6597u9a6cu54eau5316u592au6307u53d8u793eu4f3cu58ebu8005u5e72u77f3u6ee1u65e5u51b3u767eu539fu62ffu7fa4u7a76u5404u516du672cu601du89e3u7acbu6cb3u6751u516bu96beu65e9u8bbau5417u6839u5171u8ba9u76f8u7814u4ecau5176u4e66u5750u63a5u5e94u5173u4fe1u89c9u6b65u53cdu5904u8bb0u5c06u5343u627eu4e89u9886u6216u5e08u7ed3u5757u8dd1u8c01u8349u8d8au5b57u52a0u811au7d27u7231u7b49u4e60u9635u6015u6708u9752u534au706bu6cd5u9898u5efau8d76u4f4du5531u6d77u4e03u5973u4efbu4ef6u611fu51c6u5f20u56e2u5c4bu79bbu8272u8138u7247u79d1u5012u775bu5229u4e16u521au4e14u7531u9001u5207u661fu5bfcu665au8868u591fu6574u8ba4u54cdu96eau6d41u672au573au8be5u5e76u5e95u6df1u523bu5e73u4f1fu5fd9u63d0u786eu8fd1u4eaeu8f7bu8bb2u519cu53e4u9ed1u544au754cu62c9u540du5440u571fu6e05u9633u7167u529eu53f2u6539u5386u8f6cu753bu9020u5634u6b64u6cbbu5317u5fc5u670du96e8u7a7fu5185u8bc6u9a8cu4f20u4e1au83dcu722cu7761u5174u5f62u91cfu54b1u89c2u82e6u4f53u4f17u901au51b2u5408u7834u53cbu5ea6u672fu996du516cu65c1u623fu6781u5357u67aau8bfbu6c99u5c81u7ebfu91ceu575au7a7au6536u7b97u81f3u653fu57ceu52b3u843du94b1u7279u56f4u5f1fu80dcu6559u70edu5c55u5305u6b4cu7c7bu6e10u5f3au6570u4e61u547cu6027u97f3u7b54u54e5u9645u65e7u795eu5ea7u7ae0u5e2eu5566u53d7u7cfbu4ee4u8df3u975eu4f55u725bu53d6u5165u5cb8u6562u6389u5ffdu79cdu88c5u9876u6025u6797u505cu606fu53e5u533au8863u822cu62a5u53f6u538bu6162u53d4u80ccu7ec6;int length = base.length();/创建图像BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);/获取图像Graphics g = image.getGraphics();/创建随机类的实例Random random = new Random();/设置图像背景色g.setColor(getRandColor(random, 200, 250);g.fillRect(0, 0, width, height);/设置备选字体String fontTypes = u5b8bu4f53, u65b0u5b8bu4f53,u9ed1u4f53, u6977u4f53, u96b6u4e66 ;int fontTypesLength = fontTypes.length;/在图像上增加干扰点g.setColor(getRandColor(random, 160, 200);g.setFont(new Font(Times New Roman, Font.PLAIN, 14);for (int i = 0; i 6; i+) g.drawString(*,0, 5 * (i + 2);/验证码显示到图象String sRand = ;for (int i = 0; i 该页面用于随机生成汉字验证码,并把生成的验证码存放在session中,供验证页面调用。本例运行结果如图14-3所示。 图14-3 彩色汉字验证码用户登录页面。具体代码如例程14-4所示。【例程14-4】login.jsp用户登录用户登录用户名:密 码:验证码:重新获得验证码function Random()document.getElementById(numberRandom).src = numberRandom.jsp?verifyKey=748E3F690092EE71FAF7BC83DF3337831E88CEB05CC778F2DC1DF8FE6E693829B9D6CB1E02516512&t=+Math.random(1000);Random();本例运行结果如图14-4、14-5所示。图14-4用户登录页面图14-5用户登录页面用户登录验证页面。具体代码如例程14-5所示。【例程14-5】loginCheck.jsp%String errormsg = ;/提示信息参数String user = new String(request.getParameter(username).trim().getBytes(ISO-8859-1);/获取用户名String pwd = new String(request.getParameter(password).trim().getBytes(ISO-8859-1);/获取密码String driver = com.microsoft.jdbc.sqlserver.SQLServerDriver;String url = jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=data;String username = sa;String password = bb;try Class.forName(driver).newInstance();/加载驱动Connection con = DriverManager.getConnection(url, username,password);/获取连接Statement stmt = con.createStatement();String sql = select * from users where username= + user+ and password= + pwd + ;ResultSet rs = stmt.executeQuery(sql);/获取查询结果/验证用户帐号if (!rs.next() errormsg = errorUser;response.sendRedirect(login.jsp?errormsg= + errormsg);/out.print( + 用户名或密码错误,请重新输入! + );return;/验证验证码String random = new String(request.getParameter(random).trim().getBytes(ISO-8859-1);/获取页面传递的验证码String realrand = request.getSession().getAttribute(random).toString();/获取session的验证码if (!random.equals(realrand) errormsg = errorRand;response.sendRedirect(login.jsp?errormsg= + errormsg);/out.print( + 验证码错误,请重新输入! + );return;/提示信息out.print( + 用户合法,欢迎使用! + ); catch (Exception e) e.printStackTrace();%该页面连接数据库访问用户表,根据用户登录页面的用户信息和验证码信息进行验证。本例运行结果如图14-6所示。 图14-6用户登录验证页面14.3文件上传下载技术文件上传下载是基于新闻、办公系统等Web应用的重要功能,实现文件上传有多种方式,如使用免费组件jspSmartUpload提供的对象以及方法来实现。本例通过编写文件上传组件实现文件上传和下载。14.3.1文件上传文件上传组件的具体代码如例程14-6所示。【例程14-7】FileUpload.javapackage com;import java.io.*;import javax.servlet.http.*;/* * 文件上传类 */public class FileUpload public FileUpload() /处理中文字符串 public String toGBK(String str) try if (str = null) str = ; else str = new String(str.getBytes(ISO-8859-1), GBK); catch (Exception e) System.out.println(中文字符编码转换出错!); return str; /文件上传处理 public void upload(HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException, IOException /接收上传文件内容的临时文件 String tempFileName = new String(tempFileName); /定位临时文件 File tempFile = new File(D:/, tempFileName); /文件输出流指向临时文件 FileOutputStream outputFile = new FileOutputStream(tempFile); /获取客户端提交的数据 InputStream fileSource1 = request.getInputStream(); /将客户端的数据写入临时文件 byte b = new byte1000; int n; while ( (n = fileSource1.read(b) != -1) outputFile.write(b, 0, n); /关闭输入流和输出流 outputFile.close(); fileSource1.close(); /获取临时文件 RandomAccessFile randomFile1 = new RandomAccessFile(tempFile, r); /读取临时文件 randomFile1.readLine(); /获取文件名 String FilePath = randomFile1.readLine()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 便利店行业线上线下融合与O2O模式创新研究报告
- 2025年度房产买卖借款合同范本
- 2019-2025年中国生鲜猪肉市场评估分析及投资发展盈利预测报告
- 2025-2030年中国工子钢行业深度研究分析报告
- 2025年中国FPSO行业市场调研及投资战略规划报告
- 2025年中国电动间隙牵引床行业市场发展前景及发展趋势与投资战略研究报告
- 2020-2025年中国高温炉市场运行态势及行业发展前景预测报告
- 合工大函数高等数学试卷
- 2024-2030年中国高端包装水行业市场发展监测及投资前景展望报告
- 中学项目建设方案
- 财务共享公司建设方案
- 小学数学-二年级升三年级暑假数学作业-口算 +竖式计算
- 食品快检培训 课件
- 2025至2030内燃机市场发展趋势分析与未来投资战略咨询研究报告
- 汽车散热器安装施工方案与技术措施
- 2025年陕西延长石油招聘笔试备考题库(带答案详解)
- 山西省烟草专卖局(公司)笔试试题2024
- 2025年萍乡卫生职业学院单招(语文)测试题库附答案
- 学习解读《水利水电建设工程验收规程》SLT223-2025课件
- 职业技术学院《宠物外科手术》课程标准
- 世格外贸单证教学系统
评论
0/150
提交评论