* Request 和 Response 原理:


    * request对象和response对象由服务器创建,我们只需要在service方法中使用这两个对象即可
    
    * 继承体系结构:
        ServletRequest <--继承-- HttpServletRequest <--实现--- RequestFacade

* Response:封装响应消息,设置响应消息
    * 设置响应行:HTTP/1.1 200 ok
        * setStatus(int code):设置响应状态码
            * 演示重定向:302
                //简化版的重定向
                response.sendRedirect("http://192.168.1.66:8080/zxc/one");
                
                * 实现原理
                //1.设置响应状态码为 302
                response.setStatus(302);
                //2.设置响应头 location
                response.setHeader("location", "http://192.168.1.66:8080/zxc/one");
        
    * 设置响应头:
        * setHeader(String name,String value):
        * setDateHeader(String name, long date)
        * setIntHeader(String name, int value)

* 设置响应体:
        * getOutputStream():发送字节数据
            * 验证码:
                * 防止恶意注册
        
        * getWriter():发送字符数据
            * 发送中文数据时,需要在获取流之前设置编码方式,并且要告诉客户端浏览器,服务器使用的编码方式
                //简化版设置编码的方式
                response.setContentType("text/html;charset=utf-8");

 package Response;

 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 ResponseTest extends HttpServlet { private static final long serialVersionUID = -3007244764565301466L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 设置响应消息体:
* getOutputStream():发送字节数据
* getWriter():发送字符数据
*/
/*
//设置流的编码方式
response.setCharacterEncoding("utf-8");
//告诉客户端,服务器使用的编码方式
response.setHeader("content-type", "text/html;charset=utf-8");
*/ //设置编码方式
response.setContentType("text/html;charset=utf-8");
//获取字符输出流
PrintWriter pw = response.getWriter();//默认编码是 iso-8859-1
//设置数据
pw.write("<h3>你好啊 ! response...</h3>");
//刷新
pw.flush();
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response); } }

* Request:封装请求消息,获取请求消息
    * 获取请求消息:
        * 获取请求行:GET /day08/req1?name=zs HTTP/1.1
            * getMethod():获取请求方式
            * getContextPath():获取虚拟目录
            
            * getRequestURI():获取URI(统一资源标识符)    /day07/one        /one
            * getRequestURL():获取URL(统一资源定位符)    http://localhost:8080/day07/one
            * getRemoteAddr():获取客户机的IP地址
            
            * getQueryString():get方式获取请求参数
        * 获取请求头:
            * String getHeader(String name)
            * long getDateHeader(String name)
            * int getIntHeader(String name)

 package Request;

 import java.io.IOException;

 import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class RequestTest2 extends HttpServlet { private static final long serialVersionUID = -5095708647887091449L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //获取请求头
String agent = request.getHeader("user-agent");
System.out.println(agent); if(agent.contains("MSIE")){
System.out.println("IE 来了...");
}else if(agent.contains("Firefox")){
System.out.println("火狐 来了...");
}else if(agent.contains("Chrome")){
System.out.println("谷歌 来了...");
}else{
System.out.println("其他浏览器 来了...");
} System.err.println("..............................");
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response); } }

* 获取请求体:封装post请求参数数据
            * BufferedReader getReader():
            * ServletInputStream getInputStream():
        
        
            * 通用的获取请求参数的方式:
                * String getParameter(String name):根据键名获取值
                * String[] getParameterValues(String name):根据键名获取值的数组,一般用于复选框
                * Map<String,String[]> getParameterMap():获取所有参数的map集合
                * Enumeration getParameterNames():获取所有的键名枚举
        

 package Request;

 import java.io.IOException;

 import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class RequestTest extends HttpServlet { private static final long serialVersionUID = 4919849090529066482L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //演示获取请求行数据 System.out.println(request.getMethod());//获取请求发式
System.out.println(request.getContextPath());//获取虚拟目录
System.out.println(request.getRequestURI());//获取URI
System.out.println(request.getRequestURL());//获取URL
System.out.println(request.getRemoteAddr());//获取ip
System.out.println(request.getQueryString());//获取请求参数
System.out.println(request.getProtocol());//获取协议 System.err.println("--------------------------"); response.sendRedirect(request.getContextPath()+"/index.jsp");
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response); } }

* 请求参数中文乱码问题:
                1.通用:
                    //1.解码  iso
                    byte[] bytes = username.getBytes("iso-8859-1");
                    //2.编码 utf-8
                    username = new String(bytes, "utf-8");
                2.post专用
                    //设置输入流的编码为 utf-8
                    request.setCharacterEncoding("utf-8");
    
    * 域对象:代表一次请求
    
    * 请求转发:
        * 转发特点:
            1.地址栏不发生变化
            2.一次请求,一次响应
            3.不能转发外部站点

 package Request;

 import java.io.IOException;

 import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class RequestTest7 extends HttpServlet { private static final long serialVersionUID = 3744695995118989884L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { System.out.println("req7 被访问了。。。"); //存储数据
request.setAttribute("msg", "hehehe..."); //转发至req
request.getRequestDispatcher("/req").forward(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response); } }

* 重定向的特点:
            1.地址栏发生变化
            2.两次请求,两次响应
            3.可以访问外部的站点

 package Response;

 import java.io.IOException;

 import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class ResponseTest2 extends HttpServlet { /**
*
*/
private static final long serialVersionUID = -449184946348811489L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { System.out.println("resp2 被访问了。。。");
//演示重定向
//1.设置相应状态码 302
response.setStatus(302); //2.设置相应头 location
//注意: http:// 不可以少
//response.setHeader("location", "http://192.168.1.66:8080/zxc/resp"); //简化版的重定向
response.sendRedirect("http://192.168.1.66:8080/zxc/resp");
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response); } }

Request 和 Response 原理的更多相关文章

  1. Request和Response。

    复习点:1.重定向问题  2.输出字符串到浏览器.3.文件下载需求:1. 页面显示超链接2. 点击超链接后弹出下载提示框3. 完成图片文件下载 Request和Response Request: 1. ...

  2. request 和response

    当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了We ...

  3. Java 中的 request 和response 理解

    request和response(请求和响应)  1.当Web容器收到客户端的发送过来http请求,会针对每一次请求,分别创建一个用于代表此次请求的HttpServletRequest对象(reque ...

  4. JavaWeb(一)Servlet中的request与response

    一.HttpServletRequest概述 1.1.HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP ...

  5. 简单了解request与response

    本文对 request. response 简单描述,未涉及到具体的浏览器缓存.重定向.请求转发等代码部分. 一.Web服务器,浏览器,代理服务器 在看 response.request 对象之前,先 ...

  6. #HTTP协议学习# (一)request 和response 解析

    注:本文转自:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html , 粉字[]内内容为个人笔记 当今web程序的开发技术真是 ...

  7. @Spring MVC 中几种获取request和response的方式

    1.最简单方式:处理方法入参 例如: @RequestMapping("/test") @ResponseBody public void saveTest(HttpServlet ...

  8. JavaWeb Request和Response

    1. Request与Response 1.1. Web应用运行机制 到目前为止,我们已经掌握了Web应用程序的运行机制,现在学习的就是Web应用程序运行机制中很重要的内容 —— Request与Re ...

  9. request与response对象.

    request与response对象. 1. request代表请求对象 response代表的响应对象. 学习它们我们可以操作http请求与响应. 2.request,response体系结构. 在 ...

随机推荐

  1. JavaScript的全局变量与局部变量解析

    一.JavaScript scope 的划分标准是function函数块,不是以 if.while.for来划分的 <script> function f1(){ alert(" ...

  2. Google Chrome 应用商店上传扩展程序

    1. 进入 Google 开发者中心 网址: https://chrome.google.com/webstore/developer/dashboard?hl=zh-cn 2. 添加新项 上传后,出 ...

  3. DDD 主题交流会总结及计划

    思维碰撞才能更加进步 2015年5月16日(上周六),我们举行了一次 DDD 主题的交流会,参会者主要是 ENode 群友.以及部分园友,为什么要搞这次交流会?原因很简单,就是希望可以提供对 DDD ...

  4. DDD 领域驱动设计-Value Object(值对象)如何使用 EF 进行正确映射

    写在前面 首先,这篇博文是用博客园新发布的 MarkDown编辑器 编写的,这也是我第一次使用,语法也不是很熟悉,但我觉得应该会很爽,博文后面再记录下用过的感受,这边就不多说. 阅读目录: 上一篇回顾 ...

  5. ((uchar*)(Img1->imageData + Img1->widthStep*pt.y))[pt.x] 的 具体含义

    widthstep是指图像每行所占的字节数. 主要要和width区别: width是表示图像的每行像素数,widthStep指表示存储一行像素需要的字节数. 在OpenCV里边,widthStep必须 ...

  6. css截断长文本显示

    实现 截断长文本显示处理,以前是通过后台的截取,但这种方法容易丢失数据,不利于SEO. 而通过前端css的截断,则灵活多变,可统一运用与整个网站. 这项技术主要运用了text-overflow属性,这 ...

  7. 【JUC】JDK1.8源码分析之LinkedBlockingQueue(四)

    一.前言 分析完了ArrayBlockingQueue后,接着分析LinkedBlockingQueue,与ArrayBlockingQueue不相同,LinkedBlockingQueue底层采用的 ...

  8. C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息

      C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: ...

  9. 自定义angularjs分页控件

    继昨天写了knockoutjs+ jquery pagination+asp.net web Api 实现无刷新列表页 ,正好最近刚学习angularjs ,故琢磨着写一个angularjs版本的分页 ...

  10. Apworks框架实战(三):单元测试与持续集成

    虽然这部分内容并没有过多地讨论Apworks框架的使用,但这部分内容非常重要,它与Apworks框架本身的设计紧密相关,也是进一步了解Apworks框架设计的必修课. 单元测试与持续集成概述 在敏捷开 ...