第四章Response和增删改查(1)
来源:互联网 发布:金蝶软件精斗云 编辑:程序博客网 时间:2024/05/29 13:35
本章主干知识点:
1、几大对象:Request、Response;动态生成验证码;
2、案例:Servlet版CRUD;
第 1 节1-Request常用方法
第 2 节2-Response常用方法
第 3 节3-getRealPath
第 4 节4-动态生成图片
第 5 节5-动态生成验证码
第 1 节1-Request常用方法
HttpServletRequest(知道即可)
1、QueryString:“name=rupeng&age=8”叫做QueryString;getQueryString可以读取QueryString;getParameter获取某个参数的值,请求参数获取的都是String类型数据,因为Http协议就是文本。如:name=abc
2、getContextPath()获得项目的部署的ContextPath 如:/myweb1
3、getRemoteAddr()获得的是访问者的IP地址(比如可以用来屏蔽地址IP访问,获得访问者所在地区)如:192.168.81.1
4、getRequestURI()获得包含ContextPath的路径
5、getInputStream()得到请求体的流。
第 2 节2-Response常用方法
HttpServletResponse
1.sendRedirect()重定向;
Redirect是向浏览器发回302重定向,是通知浏览器“请重新访问url这个网址”,这个过程经历了服务器通知浏览器“请重新访问url这个网址”和浏览器接到命令访问新网址的过程。
使用报文工具查看整个响应过程的Http报文。用Redirect因为是浏览器自己去重新访问新网址的,所以在地址栏中是可以看到网址的变化的。
2.setContentType
3.setCharacterEncoding设置流编码
4.getOutputStream
5.getWriter(),为了确保没问题写完之后最好flush
第 3 节3-getRealPath
第 4 节4-动态生成图片
其他ContentType HttpHandler是对请求的响应,可以输出普通的html内容,也可以输出图片、也可以输出一个文件供下载
输出一幅动态创建的图片:
案例:给fbb的图片动态加上一段字
画图的代码能看懂就行,不用掌握。
获得WebRoot下文件真实路径的方法:getServletContext().getRealPath("/fbb.jpg");得到WebRoot中文件在磁盘中的位置。打印一下发现:文件被全部拷贝了部署的文件夹下,不是我们开发环境中的。写全路径
【Img1Servlet.java】
package com.rupeng.test1;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Img1Servlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{resp.setContentType("image/jpeg");//!!!//String path = getServletContext().getRealPath("/images/mv.jpg");//getRealPath的的路径是部署(拷贝)到Tomcat项目文件夹下的路径,不是源代码的路径String jpgPath = getServletContext().getRealPath("/images/mv.jpg");String name = RuPengUtils.getParameter(req, "name");BufferedImage img = ImageIO.read(new File(jpgPath));Graphics2D g = img.createGraphics();g.setFont(new Font("宋体", Font.BOLD, 30));g.setColor(Color.red);g.drawString(name, 70, 270);g.dispose();ImageIO.write(img, "JPEG", resp.getOutputStream());}}
【动态生成图片(控制台).java】
import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import javax.imageio.ImageIO;public class Test1{/** * @param args * @throws IOException */public static void main(String[] args) throws IOException{BufferedImage img = ImageIO.read(new File("d:\\aa\\f2.jpg"));Graphics2D g = img.createGraphics();g.setFont(new Font("宋体", Font.BOLD, 30));g.setColor(Color.red);g.drawString("如鹏网", 70, 270);g.dispose();FileOutputStream fos = new FileOutputStream("d:\\aa\\f21.jpg");ImageIO.write(img, "JPEG", fos);fos.close();}}
第 5 节5-动态生成验证码
生成验证码:动态生成一张100*30的图片,显示一个随机的5位数。
随机数数字、字母取不容易看错的字符。char[]nums={'a','c','d','e','f','h','k','m','n','s','t','w','x','y','z','2','3','4','5','7','8'};
备注
画验证码的代码能看懂就行。
【YZM1Servlet.java】
package com.rupeng.test1;import java.io.IOException;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import javax.imageio.ImageIO;public class YZM1Servlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{resp.setContentType("image/jpeg");String yzm = createYZM();BufferedImage img = new BufferedImage(100, 50, BufferedImage.TYPE_3BYTE_BGR);Graphics2D g = img.createGraphics();g.setFont(new Font("宋体", Font.BOLD, 30));g.setColor(Color.red);g.drawString(yzm, 20,30);g.dispose();ImageIO.write(img, "JPEG", resp.getOutputStream());}static String createYZM(){char[] chars = new char[]{'a','c','d','e','f','h','k','m','2','3'};String yzm="";Random rand = new Random();for(int i=0;i<4;i++){//nextInt(5);//0-4int index = rand.nextInt(chars.length);//生成一个chars中的随机位置char ch = chars[index];//取出这个随机位置的字符作为验证码的一部分yzm=yzm+ch;}return yzm;}}
【动态生成验证码(控制台).java】
import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import javax.imageio.ImageIO;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.Random;public class Test2{/** * @param args * @throws IOException */public static void main(String[] args) throws IOException{//BufferedImage img = ImageIO.read(new File("d:\\aa\\f2.jpg"));//创建一个高度为100、宽度为50的图片/*BufferedImage img = new BufferedImage(500, 500, BufferedImage.TYPE_3BYTE_BGR);Graphics2D g = img.createGraphics();g.setFont(new Font("宋体", Font.BOLD, 30));g.setColor(Color.red);g.drawString("如鹏网", 70, 270);g.drawRoundRect(10, 10, 100, 100, 5, 5);g.drawArc(200, 200, 50, 50, 0, 360);g.dispose();FileOutputStream fos = new FileOutputStream("d:\\aa\\yzm.jpg");ImageIO.write(img, "JPEG", fos);fos.close();*/char[] chars = new char[]{'a','c','d','e','f','h','k','m','2','3'};String yzm="";Random rand = new Random();for(int i=0;i<4;i++){//nextInt(5);//0-4int index = rand.nextInt(chars.length);//生成一个chars中的随机位置char ch = chars[index];//取出这个随机位置的字符作为验证码的一部分yzm=yzm+ch;}System.out.println(yzm);}}
- 第四章Response和增删改查(1)
- 第四章Response和增删改查(2)
- JDBC 增删查改(1)
- mysql-增删改查1
- easyUI 增删查改1
- Angularjs 增删改查1
- 数据库(增删查改)
- arraylist(增删改查)
- Hashmap(增删改查)
- 单链表(增删改查)
- 【pandas】[1] Series 入门(创建和增删改查)
- 【pandas】[1] Series 入门(创建和增删改查)
- hibernate基本概念和CURD(增删改查)详解
- Hibernate概念深入和CURD(增删改查)
- ubuntu基础(用户和组的增删改查)
- XElement增删改查(转) C#和XML
- mongo和mysql对比(增删改查)
- nodejs CURD(增删改查)get和post方法
- 文章标题
- 怎样写一个构造器
- std::map的使用方法
- 初学android-调用百度api显示地图(出现显示网格问题)
- poj3414Pots(bfs模拟数组 回溯路径)
- 第四章Response和增删改查(1)
- iOS 关闭和开启闪光灯
- hdu 5828 Rikka with Sequence 【线段树+优化】
- Ionic调用摄像头拍照和选择图库照片功能的注意点
- QueryRunner 结果处理器
- Android-ViewPagerIndicator使用方法
- 机器学习中的相似性度量
- Android开发笔记之主题背景的修改(设置Theme.NoTitleBar后Activity背景变成黑色)
- Android-----借助MINA框架实现长连接、短连接以及断线重连