Request 和 Response
来源:互联网 发布:淘宝拍卖包包是真的吗 编辑:程序博客网 时间:2024/06/07 13:43
区别
- 要取得客户端为服务端提交过来的数据,需要找Request。
- 要从服务端向客户端传送数据,需要找Response。
服务器端设置编码
@Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { response.setCharacterEncoding("UTF-8");//更改服务器发送数据的默认编码 response.setHeader("Content-Type","text/html;charset=UTF-8");//还要通知客户端解码方式//字节流 String data = "你好,中国"; OutputStream out = response.getOutputStream(); response.setContentType("text/html;charset=UTF-8"); out.write(data.getBytes("UTF-8"));//以UTF-8进行编码或者//字符流 PrintWriter writer = response.getWriter();//默认编码是iso-8859-1 创建该对象前必须设置好编码方式 writer.write(data);}
指定数据以下载的方式打开
通过设置response的响应头就可以实现,content-disposition服务器通过这个响应头告诉浏览器通过下载方式打开文件。
@Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { String path = "C:\\Users\\wwhhf\\Pictures\\Camera Roll\\QQ图片20160210090519.jpg"; String filename = path.substring(path.lastIndexOf("\\") + 1); arg1.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); InputStream in = null; OutputStream out = null; try { in = new FileInputStream(path); int len = 0; byte[] buffer = new byte[1024]; out = arg1.getOutputStream(); while((len = in.read(buffer)) > 0) { out.write(buffer,0,len); } }catch(Exception e) { throw new RuntimeException(e); }finally { if(in != null) { try { in.close(); }catch(Exception e) { throw new RuntimeException(e); } } } }
生成验证码图片
@Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub // super.service(arg0, arg1); arg1.addHeader("Pragma", "no-cache"); arg1.setHeader("Cache-Control", "no-cache"); arg1.setHeader("Expires", "0"); //1.内存图像 BufferedImage BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB); //2.创建画笔 Graphics g = image.getGraphics(); //2.1画边框 g.setColor(Color.GRAY);//设置边框颜色 g.drawRect(0, 0, WIDTH, HEIGHT);//画矩形边框 //2.2填充边框 g.fillRect(1, 1, WIDTH-1, HEIGHT-1); //2.3输出验证随机数字4个 Random r = new Random(); g.setColor(Color.BLUE); int x = 5; for(int i=0;i<4;i++) { g.setFont(new Font("宋体",Font.BOLD,20)); g.drawString(r.nextInt(10)+"", x, 20); x+=30; } //2.4画干扰线 g.setColor(Color.YELLOW); for(int i = 0;i<9;i++) { g.drawLine(r.nextInt(WIDTH),r.nextInt(HEIGHT),r.nextInt(WIDTH), r.nextInt(HEIGHT)); } //3 利用response输出流输出image ImageIO.write(image,"jpeg",arg1.getOutputStream()); arg1.setDateHeader("Expires",System.currentTimeMillis()+10*24*1000*60*60);}在后台生成验证码的一般处理程序中除了在session写入验证码的内容,在cookie中也写一个验证码的内容
控制url跳转(延迟跳转)
@Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub // super.service(arg0, arg1); arg1.setHeader("Refresh", "5;URL=http://www.qq.com/");//5秒后跳转,url是跳转的链接 }
缓存作用:Expires实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires实体报头域指定页面过期时间
用response实现请求重定向(状态码302重定向)
response.sendRedirect("login.jsp")->http://localhost:8080/xxxSearch/login.jsp需用绝对路径,因为重定向是发生在客户端的
[重定向]http://blog.chinaunix.net/uid-11121450-id-3221825.html)
获取客户端请求的信息
String locale = request.getLocalName();//传输协议 String url = request.getRequestURL().toString();//请求的地址 String uri = request.getRequestURI();//没有主机名的地址 String protocol = request.getProtocol();//获取协议 String add = request.getRemoteAddr();//客户端IP String host = request.getRemoteHost();//客户端主机名 String port = request.getRemotePort()+"";//客户端端口号 String method = request.getMethod();//客户端的请求方式 String localAddr = request.getLocalAddr();//获取服务器地址 String username = request.getParameter("username");//地址后面?请求的参数 String serverPort = request.getServerPort()+"";//服务器端口号 String serverName = request.getServerName();//服务器名
获取请求参数的值
@Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub // super.service(arg0, arg1); Enumeration names = arg0.getParameterNames(); while(names.hasMoreElements()) { //根据参数名得到值 String name = (String)names.nextElement(); System.out.println(name+"------->"+arg0.getParameter(name)); }}
显示图片在html上
private static final String PNG = "image/png;charset=utf-8";// 设定输出的类型 private static final String JPG = "image/jpeg;charset=utf-8"; @Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { String imagePath = "C:\\Users\\wwhhf\\Pictures\\Camera Roll\\zen-icons.png"; Image img=ImageIO.read(new File(imagePath)); BufferedImage bi = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); bi.getGraphics().drawImage(img.getScaledInstance(WIDTH, HEIGHT, Image.SCALE_SMOOTH), 0, 0, null); arg1.reset(); if (imagePath.toLowerCase().endsWith(".jpg"))// 使用编码处理文件流的情况: { arg1.setContentType(JPG);// 设定输出的类型 ImageIO.write(bi,"jpeg",arg1.getOutputStream()); arg1.setDateHeader("Expires",System.currentTimeMillis()+10*24*1000*60*60); } if (imagePath.toLowerCase().endsWith(".png"))// 使用编码处理文件流的情况: { arg1.setContentType(PNG);// 设定输出的类型 ImageIO.write(bi,"png",arg1.getOutputStream()); arg1.setDateHeader("Expires",System.currentTimeMillis()+10*24*1000*60*60); } }
Header知识
0 0
- Request和Response对象
- Response和Request
- Request和Response对象
- request和response对象
- Request和Response
- response和request类
- C# Response 和 Request
- response和request
- Request和Response
- Request和Response详解
- Request和Response对象
- request和response学习
- request 和 response
- request和response
- Request和Response
- Request和Response
- Request和Response
- Request和Response
- Machine Learning - Neural Networks Examples and Intuitions
- HDU-1166- 敌兵布阵(树状数组 插点问线)
- LogCat工具的tag细节
- java反射
- MT7620的WIFI带机量
- Request 和 Response
- 线性回归2(局部加权回归)
- 今日BBC
- MySQL 索引优化 btree hash rtree
- ListView的运行优化
- hdu 5640 King's Cake【思维】
- iOS多线程编程之NSThread的使用
- 项目2-本月有几天
- 九度题目1124Digital Roots