HTTP中在JAVAEE中最简单的应用

直奔主题:

演示http协议的设置setContentType编码和getHeader属性

我们在浏览网页的时候,常常见到乱码的出现。其实只需要设置setContentType就可以搞定了,后台servlet里面添加
resp.setContentType("text/html;charset=utf-8");//设置页面编码
我们可以指定网页从某个特定的网页跳转过来,从其他的页面跳转过来是无效的。这就需要http协议里面的referer协以。可以解决盗链难题
String ref=req.getHeader("Referer");//设置头(referer)

注意ip

这个是可以直接访问的。但是要是打开网页,直接复制这个网址是不行的

这个就是采用了 req.getHeader("Referer")

演示Http请求协议中的Gzip和响应协议中的ContentLength(网页的压缩传送

//主要用到一个 GZIPOutputStream进行压缩,需要一个内存流来套接压缩之后的io流
		//声明一个内存流,用来存储压缩后的字节数据
		ByteOutputStream out =new ByteOutputStream();
		GZIPOutputStream gzip=new GZIPOutputStream(out);
		gzip.write(src);//将src压缩到gzip中,放在内存流中
		gzip.close();
		byte[] b=out.toByteArray();//从内存中读出来,写到前端去

这个会让数据压缩之后再传到前台去

需要注意:
在压缩过程中,必须要写
//必须要写这个,不然浏览器出现下载页面
resp.setHeader("Content-Encoding", "gzip");
resp.setHeader("Content-Length", ""+b.length);
否则浏览器不识别会出现下载页面
网页出现这个。。
但是在后台能看到这个

很明显的压缩。

演示清除缓存(当前页面)

//设置页面不缓存,验证码的自动记忆功能就会失效。就是前台的img后面的src属性不用带参数了,可以在之前的验证码使用这种技术
	resp.setHeader("Expires","-1");
	resp.setHeader("Cache-control", "no-cache");
	resp.setHeader("Pragma", "no-cache");
<span style="white-space:pre">	</span>如果你是jsp页面则:
<%
response.setHeader("Expires","-1");
response.setHeader("Cache-control","no-cache");
response.setHeader("Pragma","no-cache");
%> 

<span style="white-space:pre">	</span>如果你是Servlet在响应前设置:
resp.setHeader("Expires","-1");
resp.setHeader("Pragma","no-cache");
resp.setHeader("Cache-Control","no-cache");

referer的使用代码
package cn.hncu.com.servlet;


import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Mypictrue extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//有些网址连接,我们必须从某个页面再能进去,其他页面都进不了,我们用到了http:协议里面的属性referer
		//
		resp.setContentType("text/html;charset=utf-8");//设置页面编码
		String str="<img src='img/1.jpg' alt='图片'></img>";//图片的连接写在这里面
		//String str="<a href='http://www.baidu.com'>百度</a>";
		String ref=req.getHeader("Referer");//这个不设置,我们可以复制连接直接访问,但是我们这样设置,就不能访问了
		if(ref==null)
		{
			str="请从指定的网页进去!!";
		}else{
			if(!(ref.contains("192.168.31.156"))){//当从别的地方超链接过去的时候,会出现盗链
				str="盗链";
		}
		}
		
		PrintWriter pw=resp.getWriter();//可以直接把字符串放进io流里面
		pw.write(str);
		//pw.println(str);
		
	}
}
压缩网页的代码:
package cn.hncu.com.servlet;


import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;

public class Mygzip extends HttpServlet {
	//将这里的字符串压缩之后传到前台去(简单的实例)
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String  str="aaabbbcccasdsadsaddsasddssad";
		byte[] src=str.getBytes();//获得字符数组
		//转换之前的的数组长度
		int len=src.length;
		System.out.println("之前的数据"+len);
		
		//主要用到一个 GZIPOutputStream进行压缩,需要一个内存流来套接压缩之后的io流
		//声明一个内存流,用来存储压缩后的字节数据
		ByteOutputStream out =new ByteOutputStream();
		GZIPOutputStream gzip=new GZIPOutputStream(out);
		gzip.write(src);//将src压缩到gzip中,放在内存流中
		gzip.close();
		byte[] b=out.toByteArray();//从内存中读出来,写到前端去

		//必须要写这个,不然浏览器出现下载页面
		resp.setHeader("Content-Encoding", "gzip");
		resp.setHeader("Content-Length", ""+b.length);
		//
		//设置页面不缓存的。下面这三句都要写
		resp.setHeader("Expires","-1");
		resp.setHeader("Cache-control","no-cache");
		resp.setHeader("Pragma","no-cache");
		
		int len2=b.length;
		System.out.println("压缩之后的"+len2);
		OutputStream out2=resp.getOutputStream();
		out2.write(b);
		out2.close();
		
	}
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值