response及验证码例子

本文介绍了如何使用response对象实现HTTP响应的不同部分,包括状态码、响应头和响应体的设置方法。此外,还详细讲解了如何利用response进行页面重定向、设置定时刷新,并实现了文件下载功能。
response对象实现http响应行,http响应头,http响应体,三部分。
手动设置http响应行中的状态码,http响应行
//response.setStatus(302);
设置响应头
//System.out.println("get方法正在运行.........");
//Date date=new Date();
//response.addHeader("name", "zhangsan");
//response.addIntHeader("age",20);
//response.addDateHeader("birthday",date.getTime());
还要setHeader(),setIntHeader(),setDateHeader()方法
用response实现重定向
1设置状态码302
//response.setStatus(302);
2设置响应头location
//response.setHeader("Location","/WEB/servlet2");
重定向封装成了一个方法
response.sendRedirect("servlet2");
设置定时刷新的头
response.setHeader("refresh","5;url=http://www.baidu.com");

js实现定时器跳转

<script type="text/javascript">
	window.onload=function(){
		var time=5;
		var secondEle=document.getElmentById("second");
		var timer=setInterval(function(){
			secondEle.innerHTML=time;
			time--;
			if(time==0){
				clearInterval(timer);
				location.href="http://www.baidu.com";
				}
		},1000);
		
	}
</script>
</head>
<body>
	恭喜你注册成功,<span style="color:red" id="second">5</span>秒钟跳转,如不跳转请点击<a href="http://www.baidu.com">这里!</a>
</body>
设置response查询的码表
//response.setCharacterEncoding("UTF-8");
通过一个头Content-Type告知客户端使用何种码表
//response.setHeader("Content-Type","text/html;charset=UTF-8");
服务器封装了一个方法
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer=response.getWriter();
//writer.write("hello response!1!");
writer.write("中国");
使用response获得字节输出流

ServletOutputStream out=response.getOutputStream();
		//获得服务器上的图片
		String realPath=this.getServletContext().getRealPath("/a.jpg");
		InputStream in=new FileInputStream(realPath);
		int len=0;
		byte[] buffer=new byte[1024];
		while((len=in.read(buffer))>0){
			out.write(buffer,0,len);
		}
		in.close();
		out.close();
	}
1.什么情况下下载?
浏览器不能解析的文件就下载
2.什么情况下需要在服务器端编写文件下载的代码?
理论上,浏览器可以解析代码需要编写文件下载代码,实际开发中,只要是下载的文件都编写文件下载代码。
download.html

<body>
<h1>使用a标签直接指向服务器上的资源</h1>
<a href="/WEB/download/a.flv">a.flv</a><br/>
<a href="/WEB/download/a.jpg">a.jpg</a><br/>
<a href="/WEB/download/a.mp3">a.mp3</a><br/>
<a href="/WEB/download/a.mp4">a.mp4</a><br/>
<a href="/WEB/download/a.txt">a.txt</a><br/>
<a href="/WEB/download/a.zip">a.zip</a><br/>
<hr/>
<h1>使用服务器端编码的方式实现文件下载</h1>
<a href="/WEB/downloadServlet?filename=a.flv">a.flv</a><br/>
<a href="/WEB/downloadServlet?filename=a.jpg">a.jpg</a><br/>
<a href="/WEB/downloadServlet?filename=a.mp3">a.mp3</a><br/>
<a href="/WEB/downloadServlet?filename=a.mp4">a.mp4</a><br/>
<a href="/WEB/downloadServlet?filename=a.txt">a.txt</a><br/>
<a href="/WEB/downloadServlet?filename=a.zip">a.zip</a><br/>
</body>
DownloadServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//response.getWriter().append("Served at: ").append(request.getContextPath());
		String filename=request.getParameter("filename");
		//告诉客户端该文件不是直接解析,而是以附件形式打开(下载)
		response.setHeader("Content-Disposition","attachment;filename="+filename);
		//客户端通过文件的mime类型区分文件类型
		response.setContentType(this.getServletContext().getMimeType(filename));
		//获得要下载的文件的名称"
		//String filename=request.getParameter("filename");
		//获取文件的绝对路径
		String path=this.getServletContext().getRealPath("download/"+filename);
		//获得该文件的输入流
		InputStream in=new FileInputStream(path);
		//获得输出流----通过response获得的输出流用于想客户端写内容
		ServletOutputStream out=response.getOutputStream();
		//文件拷贝的模板代码
		int len=0;
		byte[] buffer=new byte[1024];
		while((len=in.read(buffer))>0){
			out.write(buffer,0,len);
		}
		in.close();
		out.close();
	}
response细节点:
1.response获得的流不需要手动关闭,Tomcat容器会帮助我们关闭
2.getWriter和getOutputStream不能同时调用

验证码例子:

login.jsp:

<body>
<h1>验证码登录</h1>
<form action="http://www.baidu.com" method="post">
用户名: <input type="text" value="" name="username"/><br/>
密码:     <input type="password" value="" name="password"/><br/>
验证码:<input type="text" value="" name="check">
<img id="imgId" onclick="changeImg()" src="${pageContext.request.contextPath}/verifyCodeServlet"/> 
	<a href="javascript:void(0)" onclick="changeImg()">换一张</a><br/>
<input type="submit" value="登录" name="login"/>
<script type="text/javascript">
	function changeImg(){
		$("#imgId").attr("src","${pageContext.request.contextPath}/verifyCodeServlet?t="+new Date());
	}
</script>
</form>
</body>
VerifyCodeServlet.java

public class VerifyCodeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public VerifyCodeServlet() {
        super();
    }
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// response.getWriter().append("Served at: ").append(request.getContextPath());
	int height=30;
	int width=60;
	String data="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
	Random random=new Random();
	//创建一个图片
	BufferedImage image=new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
	//获得画板
	Graphics g=image.getGraphics();
	//填充一个矩形
	g.setColor(Color.BLACK);
	g.fillRect(0, 0, width, height);
	g.setColor(Color.WHITE);
	g.fillRect(1, 1, width-2, height-2);
	g.setFont(new Font("宋体", Font.BOLD|Font.ITALIC, 25));
	//写随机字
	for(int i=0;i<4;i++){
		g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
		int index=random.nextInt(data.length());
		String str=data.substring(index, index+1);
		g.drawString(str, width/6*(i+1), 20);
	}
	//干扰线
	for(int i=0;i<3;i++){
		g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
		g.drawLine(random.nextInt(width), random.nextInt(height), random.nextInt(width), random.nextInt(height));
		g.drawOval(random.nextInt(width),random.nextInt(height),2,2);
	}
	ImageIO.write(image, "jpg", response.getOutputStream());
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值