Request 和 Response 原理
* 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 原理的更多相关文章
- Request和Response。
复习点:1.重定向问题 2.输出字符串到浏览器.3.文件下载需求:1. 页面显示超链接2. 点击超链接后弹出下载提示框3. 完成图片文件下载 Request和Response Request: 1. ...
- request 和response
当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了We ...
- Java 中的 request 和response 理解
request和response(请求和响应) 1.当Web容器收到客户端的发送过来http请求,会针对每一次请求,分别创建一个用于代表此次请求的HttpServletRequest对象(reque ...
- JavaWeb(一)Servlet中的request与response
一.HttpServletRequest概述 1.1.HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP ...
- 简单了解request与response
本文对 request. response 简单描述,未涉及到具体的浏览器缓存.重定向.请求转发等代码部分. 一.Web服务器,浏览器,代理服务器 在看 response.request 对象之前,先 ...
- #HTTP协议学习# (一)request 和response 解析
注:本文转自:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html , 粉字[]内内容为个人笔记 当今web程序的开发技术真是 ...
- @Spring MVC 中几种获取request和response的方式
1.最简单方式:处理方法入参 例如: @RequestMapping("/test") @ResponseBody public void saveTest(HttpServlet ...
- JavaWeb Request和Response
1. Request与Response 1.1. Web应用运行机制 到目前为止,我们已经掌握了Web应用程序的运行机制,现在学习的就是Web应用程序运行机制中很重要的内容 —— Request与Re ...
- request与response对象.
request与response对象. 1. request代表请求对象 response代表的响应对象. 学习它们我们可以操作http请求与响应. 2.request,response体系结构. 在 ...
随机推荐
- javascript中函数声明和函数表达式浅析
记得在面试腾讯实习生的时候,面试官问了我这样一道问题. //下述两种声明方式有什么不同 function foo(){}; var bar = function foo(){}; 当初只知道两种声明方 ...
- tn文本分析语言(四) 实现自然语言计算器
tn是desert和tan共同开发的一种用于匹配,转写和抽取文本的语言.解释器使用Python实现,代码不超过1000行. github地址:https://github.com/ferventdes ...
- Android动画学习(二)——Tween Animation
前两天写过一篇Android动画学习的概述,大致的划分了下Android Animation的主要分类,没有看过的同学请移步:Android动画学习(一)——Android动画系统框架简介.今天接着来 ...
- opencv 之 icvCreateHidHaarClassifierCascade 分类器信息初始化函数部分详细代码注释。
请看注释.这个函数,是人脸识别主函数,里面出现过的函数之一,作用是初始化分类器的数据,就是一个xml文件的数据初始化. static CvHidHaarClassifierCascade* icvCr ...
- CSS3中惊艳的gradient
以前曾经记录过linear-gradient(线性渐变)和 radial-gradient(径向渐变)的语法. 可以参考<CSS3中border-radius.box-shadow与gradie ...
- JQuery中使用Ajax实现诸如登录名检测等异步请求Demo
上一篇博客介绍了注册登录时一次性图形验证码的工具类的编写,这篇随笔同样是我在写用jquery中ajax实现登录信息检测的异步请求功能的笔记,在各个网站进行信息用户注册时,需要在不刷新页面的情况下对注册 ...
- React Native系列文章
React Native版本升级的正确姿势 WebView JS与RN进行通讯 用API网关把API管起来 React-Native 给客户端来个「同音词模糊搜索」 30天React Native从零 ...
- 从 AJAX 到 JSONP的基础学习
目录索引: 一.AJAX的概念二.POST && GET三.原生实现AJAX简单示例 3.1 实现代码 3.2 重点说明四.框架隐藏域 4.1 基本概念 4.2 后台写入脚本 4.3 ...
- CSS3梅花三弄特效
效果预览:http://hovertree.com/texiao/js/22/ 效果图: 代码如下: <html> <head> <meta http-equiv=&qu ...
- 第一个hadoop 程序
首先检查hadoop是否安装并配置正确然后建立WordCount.java文件里面保存package org.myorg; import java.io.IOException;import java ...