Request&Response

Request

请求对象的类视图

请求对象常用方法

获取请求路径
返回值 方法名 说明
String getContextPath() 获取虚拟目录名称
String getServletPath() 获取Servlet映射路径
String getRemoteAdd() 获取访问者的ip地址
String getQueryString() 获取请求的消息数据
String getRequestURI 获取统一资源标识符
StringBuffer getRequestURL 获取统一资源定位符
     
  • getQueryString,获取请求的数据,比如url问号后边的数据

  • URI是以一种抽象的,高层次概念定义统一资源标识,而URL则是具体的资源标识的方式

  • URI比URL范围大,URL是URI的一种

  • url?后边的请求参数,也可以叫做查询字符串 (请求动作是查询,把请求参数作为查询关键字)

获取请求头
返回值 方法名 说明
String getHeader 根据请求头名称获取一个值
Enumeration<String> getHeaders 根据请求头名称获取多个值
Enumeration<String> getHeaderNames() 获取所有请求头数据
获取请求头参数
返回值 方法名 说明
String getParameter(String name) 根据名称获取数据
String[] getParameterValues(String name) 根据名称获取所有数据
Enumeration<String> getParameterNames(String name) 获取所有名称
Map<String,String[]> getParameterMap(String name) 获取所有参数的键值对
用流读取请求信息
返回值 方法名 说明
BufferedReader getReader 获取字符输入流
ServletInputStream getInputStream 获取字节输入流

ServletInputStream常用于获取图片,文件

请求乱码

//设置编码格式 req.setCharacterEncoding("UTF-8");

请求转发特点?
  • 浏览器地址栏不变

  • 域对象中的数据不丢失

  • 负责转发的 Servlet 转发前后的响应正文会丢失 (ServletA的响应正文会丢失,由ServletB响应客户端)

  • 由转发的目的地来响应客户端

    • 应用场景:如果一次请求中这个servlet无法单独完成任务,这时会将这个请求转发给另一个servlet

    • 如果这两个servlet需要共享数据,我们一般使用请求域

    • 请求转发,不会丢失请求域数据,所以共享数据,都使用请求域

请求转发方法?
返回值 方法名 说明
RequestDispatcher getRequestDispatcher(String name) 获取请求调度对象
void forward(ServletRequest req,ServletResponse resp) 实现转发

Response

响应类视图
常见状态码
状态码 说明
200 成功
302 重定向
304 请求资源为改变使用缓存
400 请求错误,厂家爱你于请求参数错误
404 请求资源未找到
405 请求方式不支持(一般是后台只支持post请求,而发起的请求确实get请求,这时候就会提示405)
500 服务器错误
状态码首位含义
状态码 说明
1 消息
2 成功
3 重定向
4 客户端错误
5 服务器错误
常用方法介绍

字节流响应方法
返回值 方法名 说明
ServletOutputStream getOutputStream 获取响应字节输出流对象
void setContentType"text/html;charset=UTF-8") 设置相应内容类型,解决中文乱码

字节流,常用于处理图片,文件

解决字节响应乱码问题
/*
项目中常用的编码格式是u8,而浏览器默认使用的编码是gbk。导致乱码!
解决方式一:修改浏览器的编码格式(不推荐,不能让用户做修改的动作)
解决方式二:通过输出流写出一个标签:<meta http-equiv='content-type' content='text/html;charset=UTF-8'>
解决方式三:response.setHeader("Content-Type","text/html;charset=UTF-8"); 指定响应头信息
解决方式四:response.setContentType("text/html;charset=UTF-8");
*/
//sos.write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'>".getBytes());

//resp.setHeader("Content-Type","text/html;charset=UTF-8");
resp.setContentType("text/html;charset=UTF-8");//常用第四种,告知浏览器采用utf-8编码方式
字符流响应方法
返回值 方法名 说明
PrintWriter getWriter 获取响应字符输出流对象
void setContentType("text/html;charset=UTF-8") 设置响应类型解决乱码
解决字符响应乱码
//解决中文乱码
resp.setContentType("text/html;charset=UTF-8");
解决乱码总结
  • 如果是响应解决乱码问题,一般思路就是让浏览器与代码中的编码风格保持一致(utf-8)

     resp.setContentType("text/html;charset=UTF-8");
  • 如果请求中解决乱码,将gbk编码的中文信息转换为utf-8

    //设置编码格式 (将浏览器默认编码gbk的中文信息,转换为utf-8的信息)
    req.setCharacterEncoding("UTF-8");
设置缓存时间

缓存:

对于不经常变化的数据,我们可以设置合理缓存时间,以避免浏览器频繁请求服务器。以此来提高效率

方法:

返回值 方法名 说明
void setDateHeader(Stringname,long time) 设置消息头添加缓存

参数1:Expires : 失效的意思 ​ 参数2:当前时间+1小时毫秒值(意思就是在1小时之后过期)

设置定时刷新
  • 定时刷新:过了指定时间后,页面自动进行跳转

  • 定时刷新方法

    返回值 方法名 说明
    void setHeader(String name,String value) 设置消息头定时刷新
请求重定向

重定向:

客户端的一次请求到达后,发现需要其他Servlet来实现功能

特点:

浏览器的地址栏会发生改变,两次请求,请求域对象中不能共享数据,可以重定向到其他服务器

实现原理:

设置响应状态码为203

resp.setStatus(302)

设置响应的资源路径,通过响应消息头location来指定

resp.setHeader("location","/路径名称")

方法:

返回值 方法名 说明
void sendRedire(String name) 设置重定向
重定向与转发区别
  • 重定向:

    • 两次请求

    • 地址栏发生变化

    • 不可以使用request域共享数据 (既然是两次请求,那肯定不能使用请求域中共享的数据)

    • 可以重定向到其他服务器的url

  • 转发:

    • 一次请求

    • 地址栏不发生变化

    • 可以使用request域共享数据

    • 只能转发到自己服务器内部的url

Request&Response总结的更多相关文章

  1. request response

    request 和 response 这两个对象是出现在service方法中.service方法是用来接收请求处理请求,完成响应的.     接受请求指的就是request对象     完成响应指的就 ...

  2. request \response 总结

    request&response request 1.获得信息的方法     1> 获得请求首行信息的方法         *getMethod         *getContextP ...

  3. track message forwards, avoiding request loops, and identifying the protocol capabilities of all senders along the request/response chain

    https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html The TRACE method is used to invoke a remote, ...

  4. Ng Http Request/response格式转换

    angular作为Single Page Application推荐的交互方式当然是基于json的ajax调用.但今天要说的是当你不幸工作在一个遗留或者不可控制的服务上,而这服务是基于非json提交方 ...

  5. 过滤器中的chain.doFilter(request,response)

    Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml文件配置好要 ...

  6. 对chain.doFilter(request,response)的理解

    他的作用是将请求转发给过滤器链上下一个对象.这里的“下”指的是哪里 ? 指的是下一个filter,如果没有filter那就是你请求的资源. 一般filter都是一个链,web.xml 里面配置了几个就 ...

  7. chain.doFilter(request,response)含义

    过滤器的生命周期一般都要经过下面三个阶段: 初始化 当容器第一次加载该过滤器时,init() 方法将被调用.该类在这个方法中包含了一个指向 Filter Config 对象的引用.我们的过滤器实际上并 ...

  8. controlling the variance of request response times and not just worrying about maximizing queries per second

    http://highscalability.com/blog/2010/11/4/facebook-at-13-million-queries-per-second-recommends-minim ...

  9. ZeroMQ之Request/Response (Java)

    自己最开始是在cloud foundry中接触过消息服务器(nats),或者说是消息中间件,也算是初步知道了一个消息服务器对于分布式的网络系统的重要性,后来自己也曾想过在一些项目中使用它,尤其是在一些 ...

  10. 【转】对Django框架架构和Request/Response处理流程的分析

    本文转载于疯狂的蚂蚁. 一. 处理过程的核心概念 如下图所示django的总览图,整体上把握以下django的组成: 核心在于中间件middleware,django所有的请求.返回都由中间件来完成. ...

随机推荐

  1. 本科入行可能吗?做到这3点,斩获BAT offer不是梦

    大家好,前两天有一个小伙伴加我微信咨询.他说他不想读研,想要直接本科毕业就参与工作.但是又担心自己由于没有学历优势,无法在校招当中获得机会,于是便来向我请教,能不能指点迷津提供一些具体的实操性措施.与 ...

  2. 从面试角度分析LinkedList源码

    注:本系列文章中用到的jdk版本均为java8 LinkedList类图如下: LinkedList底层是由双向链表实现的.链表好比火车,每节车厢包含了车厢和连接下一节车厢的连接点.而双向链表的每个节 ...

  3. js上 七、表达式

    (1).什么是表达式 任何有值的内容都是表达式 一个表达式会产生一个值,它可以放在任何需要一个值的地方,比如a=3中的3就是一个表达式,a=3整体也可以作为一个表达式. 常见表达式有如下几种: ü 原 ...

  4. [日常摸鱼]UVA11424&11426 GCD - Extreme

    话说UVa的机子跑的好快呀- (两题题意一样,前一题数据范围比较小) 题意:求$\sum_{i=1}^{n-1} \sum_{j=i+1}^n gcd(i,j),n<4\times 10^6$ ...

  5. 听说特斯拉花了4个月研发出新ERP,然后很多人都疯了

    欢迎关注微信公众号:sap_gui (ERP咨询顾问之家) 最近这件事儿在SAP圈里炒的挺火的,最主要是因为这几个关键词: 放弃SAP.4个月.自研ERP: 这则新闻一出来,很多人都兴高采烈,都要疯了 ...

  6. Java 方法内联

    什么是Java 方法内联? 我们先来看看普遍的内联函数含义.在维基百科中解释为: 内联函数:在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函 ...

  7. Android 开源框架 -Toasty

    GitHub地址 用法: 第一步:根目录的 build.gradle: allprojects { repositories { ... maven { url "https://jitpa ...

  8. Kafka数据每5分钟同步到Hive

    1.概述 最近有同学留言咨询Kafka数据落地到Hive的一些问题,今天笔者将为大家来介绍一种除Flink流批一体以外的方式(流批一体下次再单独写一篇给大家分享). 2.内容 首先,我们简单来描述一下 ...

  9. Android 自定义构建类型 BuildType

    简单介绍了 BuildType 定义在 app 项目与 module 项目的区别,以及在 Gradle 2.x 与 3.x 版本的区别. 最近接触到自定义构建类型 BuildType,发现这一块有些地 ...

  10. Quatz JobListener和TriggerListener

    myJob:triggerFired... vetoJobExecution class coder.rdf.mybatis.study.JobTest:jobToBeExecuted... test ...