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体系结构. 在 ...
随机推荐
- 创建第一个 local network(II)- 每天5分钟玩转 OpenStack(81)
上一节通过 Web GUI 创建了 “first_local_net”,本节我们需要搞清楚底层网络结构有了哪些变化? 点击 “first_local_net” 链接,显示 network 的 subn ...
- node-mysql 在4.2.0的时候遇到的错误
实际上这个问题折腾了几天.前一阵因为升级到了最新的4.2.0,发现mysql的应用就出错了,错误消息也比较奇怪 Handshake Inactivity Timeout - PROTOCOL_SEQU ...
- IOS开发之绝对布局和相对布局(屏幕适配)
之前如果做过Web前端页面的小伙伴们,看到绝对定位和相对定位并不陌生,并且使用起来也挺方便.在IOS的UI设计中也有绝对定位和相对定位,和我们的web前端的绝对定位和相对定位有所不同但又有相似之处.下 ...
- 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析
在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...
- 重温Servlet学习笔记--request对象
request和response是一对搭档,一个负责请求一个负责响应,都是Servlet.service()方法的参数,response的知识点前面梳理过了,这里只说一下request,在客户端发出每 ...
- Node.js、express、mongodb 实现分页查询、条件搜索
前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...
- 测试为什么Low
你从来没有因为一个歌手不会写曲填词而说歌手很Low! 你从来没有因为一个演员不会摄影.唱歌而说演员很Low! 你从来没有因为一个记者不会摄影,拍照而说记者很Low! 你从来没有因为一个美食家不会烧菜, ...
- 【ARL】Parallel Processing of Graphs
Graph 本次学术前沿讲座由邵斌老师主讲,标题已经揭示了主题:Graph.1.5h的talk,听完自觉意犹未尽.本来以为是一节自己没接触过的图形学的talk,没想到讲的很多内容都跟自己学过的很多东西 ...
- 使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和解密
在数据库实现加密与解密的文章,Insus.NET较早前也有写过,可以在本博客中可以搜索得到. 今天使用EncryptByPassPhrase和DecryptByPassPhrase来简单实现. 在数据 ...
- EntityFramework查询--联合查询(Join,GroupJoin)
首先我们先看一下Join public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this ...