第四章Response和增删改查(1)

Servlet响应与CRUD操作详解
本文主要介绍了Servlet中的Request和Response对象,讲解了Request的常用方法,如getQueryString、getParameter等,以及Response的方法,如sendRedirect、setContentType。此外,还详细探讨了如何动态生成验证码和图片,提供了一个Servlet实现的CRUD案例。

本章主干知识点:

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
{
	@Override
	protected 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
{
	@Override
	protected 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-4
			int 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-4
			int index = rand.nextInt(chars.length);//生成一个chars中的随机位置
			char ch = chars[index];//取出这个随机位置的字符作为验证码的一部分
			yzm=yzm+ch;
		}
		System.out.println(yzm);
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值