`
java-mans
  • 浏览: 11434781 次
文章分类
社区版块
存档分类
最新评论

servlet这周小总结

 
阅读更多

一、重定向与转发的区别

1、URL地址变和不变:转发变,重定向变;即:

2、重定向实际上产生了两次请求

转发只有一次请求

重定向: 发送请求 -->服务器运行-->响应请求,返回给浏览器一个新的地址与响应码-->浏览器根据响应码,判定该响应为重定向,自动发送一个新的请求给服务器,请求地址为之前返回的地址-->服务器运行-->响应请求给浏览器

转发:发送请求 -->服务器运行-->进行请求的重新设置,例如通过request.setAttribute(name,value)-->根据转发的地址,获取该地址的网页-->响应请求给浏览器

重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。

二、转发include与forward的区别:forward方法是把请求的内容转发到另外的一个servlet.而include是把另一个servlet处理过后的内容拿过来.

如果写上response.getwriter(0.print("haha");

include会在页面上显示haha,而forward不显,这就是区别!哈哈

三、ServletContext读取资源三种方式

1、使用getServletContext().getResourceAsStream(路径)去读资源文件,这个路径是相对于web应用的根目录。

如://第一种方式读取外部的资源文件
InputStream is = context.getResourceAsStream("/WEB-INF/classes/res/a.jpg");

2、传统方式:BufferedReader bf = new BuffereReader(new FileReader(path));这个是重点

path=context.getRealPath("WEB-INF/classes/db.properties");这个是重点

3、第三种方式:URL url = context.getResource("WEB-INF/classes/db.properties");
InputStream is = url.openStream();

四、中文乱码问题,出现乱码的解决方案:

1、 以post方法提交的数据中有中文字符, 可以在获取请求参数值之前,调用request.setCharacterEncoding(“UTF-8”),指定请求正文使用的字符编码是UTF-8;

2、在向浏览器发送数据之前调用 response.setHeader("Content-Type", "text/html;charset=UTF-8");这是最好的一种解决方法

3、用OutputStream输出数字时出现乱码解决:response.getOutputStream().write((97+"").getBytes()); //97任意数字

4、response.getOutputStream().write("<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">".getBytes());
response.getOutputStream().write("中国".getBytes("UTF-8"))。

当下载以中文名称的文件时出现乱码的解决方案:

设置消息头

response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(file.getName(),"UTF-8"));

//URLEncoder.encode(String,String)方法是:使用指定的编码机制将字符串转换为application/x-www-form-urlencoded 格式。

五、随机图片

1、随机图片的产生:

/1、通知浏览器以图片方式打开
response.setHeader("Content-Type", "image/jpeg");

//2、创建图片
BufferedImage image=new BufferedImage(WIDTH, HEIGHT, IMAGETYPE);
//3、得到图型
Graphics g=image.getGraphics();
//4、设置图片背景色
setBackground(g);
//向图片上写边框
setBorder(g);
//向图片上写干扰线
setRandomLine(g);
//向图片上写数据
setFont(g);
//8、把图片写给浏览器
ImageIO.write(image, "JPEG", os);

2、产生图片时的问题:就每次刷新页面的时候验证码不变

解决方案://清除浏览器缓存
response.setIntHeader("expires", 0);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
//可能采用的协议不一样,所以三个接合使用,缺一不可

六、request常用方法

获得客户机信息
•getRequestURL方法返回客户端发出请求时的完整URL。
•getRequestURI方法返回请求行中的资源名部分。
•getQueryString 方法返回请求行中的参数部分。
•getRemoteAddr方法返回发出请求的客户机的IP地址
•getRemoteHost方法返回发出请求的客户机的完整主机名
•getRemotePort方法返回客户机所使用的网络端口号
•getLocalAddr方法返回WEB服务器的IP地址。
•getLocalName方法返回WEB服务器的主机名
•getMethod得到客户机请求方式
获得客户机请求头
•getHead(name)方法
•getHeaders(String name)方法
•getHeaderNames方法
获得客户机请求参数(客户端提交的数据)
•getParameter(name)方法
•getParameterValues(String name)方法
•getParameterNames方法
•getParameterMap方法 //

七、防盗链的实现

//获取当前页是从哪里个页面来的,如果不是则盗链本站

String url=request.getHeader("Referer");
if(url==null||!url.startsWith(
http://localhost)){
response.sendRedirect("./index.html");
}else{
response.sendRedirect("./java.html");
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics