一、Java web之请求和响应

Servlet最主要作用就是处理客户端请求并作出回应,为此,针对每次请求,Web容器在调用service()之前都会创建两个对象,分别是HttpServletRequest和HttpServletResponse。其中HttpServletRequest封装HTTP请求消息,HttpServletResponse封装HTTP响应消息。需要注意的是,Web服务器运行过程中,每个Servlet都会只创建一个实例对象,不过每次请求都会调用Servlet实例的service(ServletRequest req, ServletResponse res)方法,这里HttpServletRequest是ServletRequest的子类,HttpServletResponse是ServletResponse的子类。

HttpServletRequest和HttpServletResponse接口继承关系图如下所示:

二、HttpServletResponse

HttpServletResponse接口继承自ServletResponse接口,由于HTTP响应消息分为状态行、响应消息体、消息体三部分,因此,在HttpServletResponse接口中定义了向客户端发送响应状态码、响应消息头、响应消息体的方法。虽然HttpServletResponse接口中的方法较多,但是我们常用的也就是那么几个,如果用到其他的方法了可以阅读响应的源码或者相关资料就行了。
  
  发送状态码相关函数
发送响应消息头相关函数

发送响应消息体相关函数

中文输出乱码问题
  计算机中的数据都是以二进制形式存储的,因此,传输文本时,就会发生字符的字节之间的转换。字符与字节之间的转换时通过查码表完成的,字符转换为字节的过程称为编码,字节转换为字符的过程称为解码,如果编码和解码使用的码表不一样,则会出现乱码问题。

注意:HttpServletResponse对象的字符输出流在编码时,默认采用的是ISO 8859-1编码,该编码方式不兼容中文,比如会将"中国"编码为"63 63"(在ISO 8959-1的码表中查不到的字符会显示63)。当浏览器对接收到的数据进行解码时,会默认采用GB2312,将"63"解码为"?",浏览器就将"中国"两个字符解码为"??"。
  
  HttpServletResponse程序示例

package zzz;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Hello extends HttpServlet {@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {// 设置响应消息编码,注释后"中国"会显示"??"乱码response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();out.println("hello 中国");}@Overridepublic void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {this.doGet(request, response);}
}

有时会遇到定时跳转页面的问题,HTTP中Refresh头字段可以通知浏览器在指定的时间内自动刷新并跳转到其他页面,网页定时刷新并跳转到指定页面。

package zzz;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Hello extends HttpServlet {@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {// 设置响应消息编码response.setContentType("text/html;charset=utf-8");response.setHeader("Refresh", "2;url=http://www.baidu.com");PrintWriter out = response.getWriter();out.println("hello 中国,2秒后跳转到百度...");}@Overridepublic void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {this.doGet(request, response);}
}

三、HttpServletRequest

HttpServletRequest接口继承ServletRequest接口,专门用于封状HTTP请求消息。由于HTTP请求信息包括请求行、请求头和请求体三部分, 所以HttpServletRequest接口定义了获取请求行、请求头和请求体的相关方法。
  
获取请求行的相关方法

获取请求消息头的相关方法

打印请求消息头字段的所有值

打印请求消息头字段的所有值

package zzz;import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Hello extends HttpServlet {@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {// 设置响应消息编码response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();Enumeration<String> names = request.getHeaderNames();while (names.hasMoreElements()) {String name = names.nextElement();String value = request.getHeader(name);out.println(name + ": " + value + "</br>");}}@Overridepublic void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {this.doGet(request, response);}
}

获取请求体的相关方法

四、RequestDispatcher接口

当一个Web资源受到客户端请求后,如果希望服务器通知另外一个资源如处理请求,除了使用功能sendRedirect()实现重定向外,还可以通过RequestDispatcher接口的实例对象来实现,在ServletRequest接口中定义了一个获取RequestDispatcher对象的方法–getRequestDispatcher(String path),它返回某个路径所指定资源的RequestDispatcher对象,参数path必须以"/"开头,用于表示当前Web应用的根目录,也就是path路径必须是在本Web程序中,否则会出现异常。

RequestDispatcher接口中方法

Java Web(day05) —— 请求和响应相关推荐

  1. 【Java web】请求转发响应重定向

    文章目录 简介 请求转发 响应重定向 使用时机 简介 请求转发和响应重定向是Java web中两种资源跳转的方式.简单来说,对于完成一次请求需要许多特定的资源(如已经写好的页面或另一个Servlet) ...

  2. java web项目请求控制及简单漏洞防范

    背景:当时项目没用什么框架,过滤器,请求限制等都需要自己手写. 1.请求加时间戳 在后台过滤器中可以加判断,如果请求时间戳与服务器时间相差太大,可以返回异常,具体情况可以具体使用. 请求中加时间戳的示 ...

  3. java web获取请求体内容

    Java Web中如何获取请求体内容呢? 我们知道请求方式分为两种:Get,Post Java代码   /*** * Compatible with GET and POST * * @param r ...

  4. java web 耗时请求_javaweb应用中出现了一个耗时异常长的数据查询,寻求帮助

    项目使用SSM,oracle 11g,linux服务器,生产环境与测试环境代码相同,数据库不同,相关细节配置可能不同. 业务需要根据关键字查询系统中人员的相关信息,用户输入一个关键字,能够模糊查询一张 ...

  5. java 微信请求_Java web微信请求拦截器(微信公众号开发)

    Java web微信请求拦截器(微信公众号开发),获取微信用户信息. package com.mvc.interceptor; import com.alibaba.fastjson.JSONObje ...

  6. 初学 Java Web 开发,请远离各种框架,从 Servlet 开发

    写在前面: 本文是转自:http://www.oschina.net/question/12_52027  的文章,如果要求删除,第一时间联系我立即删除! Web框架是开发者在使用某种语言编写Web应 ...

  7. 初学Java Web开发,请远离各种框架,从Servlet开发

    [转载自红薯,原帖地址]http://www.oschina.net/question/12_52027 OSCHINA 软件库有一个分类--Web框架,该分类中包含多种编程语言的将近500个项目. ...

  8. java web不用框架_初学javaweb,远离各自框架

    OSCHINA 软件库有一个分类--Web框架,该分类中包含多种编程语言的将近500个项目. Web框架是开发者在使用某种语言编写Web应用服务端时关于架构的最佳实践.很多Web框架是从实际的Web项 ...

  9. java web 开发

    Web框架是开发者在使用某种语言编写Web应用服务端时关于架构的最佳实践.很多Web框架是从实际的Web项目抽取出来的,仅和Web的请求和响应处理有关,形成一个基础,在开发别的应用项目的时候则可以从这 ...

最新文章

  1. Django源码分析8:单元测试test命令浅析
  2. 什么Linux服务器最适合你?
  3. Oracle基本查询
  4. 关于idea右侧的maven project 如何调出来
  5. Linux16.04配置tensorflow(GPU源码编译)并深入了解tensorboard
  6. MySQL via EF6 的试用报告
  7. Python 新手入门引导
  8. django 1.8 官方文档翻译: 6-6-1 部署 Django
  9. 拨开云雾见日月:SQL Server 调优之查询存储
  10. 帝国7.2 php5.2,帝国CMS7.2版升级到7.5版的详细步骤方法(已测)
  11. 电脑电子版文件怎么弄_清空回收站后,如何找回删除的文件?
  12. SoapUI接口测试——SoapUI简介
  13. python数据结构之匿名函数lambda
  14. kali 破解无线密码
  15. 慕课软件质量保证与测试(第九章.程序中隐藏错误数量估计)
  16. IMU 无线姿态传感器-LPMS-B2系列
  17. 默认网络设备流量控制
  18. 淘宝API接口系列,获取购买到的商品订单列表,卖出的商品订单列表,订单详情,订单物流,买家信息,收货地址列表,买家token
  19. 怎么会这样!超声刀两年后面部塌陷,超声刀失败可以补救吗,让人头大!不要啊
  20. 基于SSM的网红书购物商城(源码+论文+开题报告+答辩PPT)

热门文章

  1. 【Top 30+案例评选】CSDN“2019 优秀AI、IoT应用案例TOP 30+”正式发布
  2. 通过PowerShell管理Office 365的网站
  3. Win10杀死进程方式
  4. SiTime硅晶振与石英晶振电磁敏感性比较
  5. wamp环境手工搭建详细教程(windows+apache+mysql+php+phpmyad...
  6. CSS3伪类选择器:nth-child(n)及:nth-of-type(n)使用区别探究总结
  7. IBM赌未来:量子计算服务IBM Q系统今年上线
  8. 从零开始完成YOLOv5目标识别(七)一种完成目标计数的简单方法
  9. 【ROS】移动机器人导航仿真(2)——SLAM(gmapping)
  10. Spring5框架-IOC容器