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体系结构. 在 ...
随机推荐
- Web APi 2.0优点和特点?在Web APi中如何启动Session状态?
前言 曾几何时,微软基于Web服务技术给出最流行的基于XML且以扩展名为.asmx结尾的Web Service,此服务在.NET Framework中风靡一时同时也被.NET业界同仁所青睐,几年后在此 ...
- 使用jQuery封装实用函数
一.引言 项目开发中,前端会有一个辅助工具类的js文件,比如cookie的操作,团队成员自己封装的方法.大多数时候,我们开发人员自己都是写一个全局函数,不考虑后期维护人员也会写相同的代码,然后造成代码 ...
- 走进AngularJs(六) 服务
今天学习了一下ng的service机制,作为ng的基本知识之一,有必要做一个了解,在此做个笔记记录一下. 一.认识服务(service) 服务这个概念其实并不陌生,在其他语言中如java便有这样的概念 ...
- 给Easyui combobox设定默认值
今天做到那个北理工二期的项目,里面刚好有几个dialog需要弄一个默认值,一般是选择启用与否,但是,为了方便用户,最好有一个默认值,所以,增加一个默认值的属性.代码入下: JS代码: ...
- ASP.NET 5 使用 TestServer 进行单元测试
之前如果对 ASP.NET WebAPI 进行单元测试(HttpClient 发起请求,并且可调试 WebAPI),一般采用 Owin 的方式,具体参考:<开发笔记:用 Owin Host 实现 ...
- iOS 实现类似雷达效果的核心代码
-(void)drawRect:(CGRect)rect { [[UIColor clearColor]setFill]; UIRectFill(rect); NSInteger pulsingCou ...
- 韩顺平_linux_随堂笔记
这还是自己3年前(2011年)整理的笔记,记得当时那会儿自己对Linux还特别的憧憬,也很喜欢韩老师的讲课风格,边看边做笔记乐此不彼,现在开通了技术博客,所以把当年的笔记也放上来和大家分享.同时推荐没 ...
- 资源等待类型sys.dm_os_wait_stats
动态管理视图 sys.dm_os_wait_stats 返回执行的线程所遇到的所有等待的相关信息.可以使用该聚合视图来诊断 SQL Server 以及特定查询和批处理的性能问题. 列名 数据类型 说 ...
- Apache 创建虚拟主机目录和设置默认访问页面
虚拟主机 (Virtual Host) 是在同一台机器搭建属于不同域名或者基于不同 IP 的多个网站服务的技术. 可以为运行在同一物理机器上的各个网站指配不同的 IP 和端口, 也可让多个网站拥有不同 ...
- X240 Win10企业版 14279版本 电池标尺白底问题
win10系统更新到14279版本: 电池标尺显示白底,而且右键也不可打开"启动电池管理器-" (1)首先安装lenovo settings 下载地址:http://think.l ...