第四章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);}}



0 0
原创粉丝点击