HttpServletRequest:一次来自客户端的请求的相关信息
请求行
request.getMethod() 获取http请求方式
request.getRequestURI() 获取统一资源标识符
request.getRequestURL() 获取统一资源定位符
request.getQueryString() 获取查询字符串
request.getProcotol() 获取协议版本
request.getScheme() 获取协议名
请求头
request.getHeader() 获取请求头信息
request.getHeaderNames() 获取所有请求头的名字
实体内容
request.getParameter() 获取请求实体中的参数、或URL后的请求参数
request.getInputStream() 获取请求参数,当表单提交的enctype="multipart/form-data"
网络相关信息
request.getRemoteAddr() 获取客户端的IP地址
request.getRemotePort() 获取客户端的端口号
request.getLocalAddr() 获取服务器端的IP地址
request.getLocalPort() 获取服务器端的端口号
HttpServletResponse:一次发送给客户端的响应的相关信息
状态行
应答头
response.setHeader() 设置应答头
response.setContentType("text/html; charset=utf-8") 设置响应内容及字符集
响应实体
response.getWriter() 获取打印流,输出字符数据
response.getOutputStream() 获取字节输出流,输出二进制数据
一、客户端请求服务器的数据有乱码
1.get方式请求
①修改tomcat/conf/server.xml,在<Connector> 标签中添加属性useBodyEncodingForURI="true"
②在获取请求数据之前,设置 request.setCharacterEncoding("utf-8");
2.post方式请求
在获取请求数据之前,设置 request.setCharacterEncoding("utf-8");
二、服务器返回给客户端的数据有乱码
response.setContentType("text/html; charset=utf-8");
请求转发
request.getRequestDispathcer("path").forward(reqeust,response);
请求转发的特点:
1.地址栏没有发生变化
2.用户只发起了一次请求
3.请求转发只能转发本服务器以内的资源
4.由于请求是同一个对象,所以可以利用该request做servlet之间数据的传输
重定向
response.sendRedirect("path")
重定向的特点:
1.地址栏会发生改变
2.用户发起了两次请求
3.重定向可以访问服务器以外的资源
4.重定向由于请求多次的,所以HttpServletRequest不是同一个对象,故不能使用它传递数据
一、分析
1.找出一个url中的项目名称
项目名称前面的“/”是服务器地址,例:http://127.0.0.1:8080/
项目名称后面的“/”是项目地址,例:http://127.0.0.1:8080/proejctname/
二、判断
1.判断一次请求行为是谁发出的
如果是浏览器行为,则表示项目名称前面的“/”,即服务器地址
如果是服务器内部行为,则表示项目名称后面的“/”,即项目地址
1.服务器内部行为:请求转发
2.浏览器行为:重定向、页面中form提交、页面中a标签、js中通过location.href定位一个路径
Cookie:在浏览器中保存用户的信息
使用:由服务器创建,发送到浏览器保存,之后随着请求发回到服务器
1.创建cookie
Cookie cookie = new Cookie("name","value");
2.发送cookie到浏览器
response.addCookie(cookie对象);
3.获取来自客户端的cookie
Cookie[] cookies = request.getCookies();
使用注意:
1.cookie第一次是由servlet发送到浏览器中,第一次不能获取cookie
2.不同的浏览器存放的cookie不是同一个
3.如果设置了cookie的maxage,则cookie会保存在浏览器所在电脑的硬盘上,如果没设置该属性,则保存在浏览器的内存中
Session:在服务器中保存用户信息
使用:在服务器端创建Session,来保存当前访问服务器的用户的信息
1.获取session(如果已经创建了session,则返回当前session)或创建session:
HttpSession session = request.getSession();
2.设置session最大不活跃时间
session.setMaxInactiveInteval() //以秒为单位
3.使用session保存信息
session.setAttribute(String key,Object value);
session.getAttribute(String key);
4.立即销毁session
session.invalidate();
HttpServletRequest:封装了一次来自客户端的Http的请求信息
请求消息包含几个部分?
1请求行
private void getRequestLine(HttpServletRequest request,HttpServletResponse response) {
//请求方式  String method = request.getMethod();System.out.println(method);
//资源路径String uri =request.getRequestURI();String url=request.getRequestURL().toString();System.out.println(uri);System.out.println(url);
//请求参数字符串String queryString =request.getQueryString();System.out.println(queryString);
//协议及版本号String protocol = request.getProtocol();System.out.println(protocol);String scheme = request.getScheme();System.out.println(scheme);}

2请求头

private void getRequestHead(HttpServletRequest request,HttpServletResponse response) {// 根据header的key获取其valueString user_agent = request.getHeader("User-Agent");System.out.println(user_agent);// 查询header所有的keynameEnumeration<String> enu = request.getHeaderNames();while (enu.hasMoreElements()) {System.out.println(enu.nextElement());}}

3 实体内容

private void getRequestBody(HttpServletRequest request,HttpServletResponse response) throws IOException {// 获取请求实体中的数据// 请求实体中的数据有三种形式:// 1.application/x-www-form-urlencoded// 2.multipart/form-data// 3.text/plain// 对于1、3// getParameter() //无论post方式还是get方式都可以获取用户的请求数据String value = request.getParameter("username");System.out.println(value);String coment = request.getParameter("coment");System.out.println(coment);ServletInputStream in= request.getInputStream();FileOutputStream out = new FileOutputStream("d:\\1.txt");int len = 0;byte[] flush = new byte[1024];while ((len = in.read(flush)) != -1) {out.write(flush, 0, len);}out.close();in.close();}

4网络信息
    private void getIntenetInfo(HttpServletRequest request,HttpServletResponse response) {System.out.println("访问服务器的地址为:" + request.getRemoteAddr() + ":"+ request.getRemotePort());System.out.println("服务器的本地地址为:" + request.getLocalAddr() + ":"+ request.getLocalPort());}}

响应消息分为几步?
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 状态行// 协议版本 http状态码 htt状态描述// 应答头// 响应实体// 设置应答头response.setHeader("content-type", "image/jpeg; charset=utf-8");// 向用户输出字符数据/** PrintWriter out = response.getWriter(); out.write("<h1>你好世界!</h1>");* out.flush(); out.close();*/// 我们只能打开一个流为用户输出数据FileInputStream in = new FileInputStream("D:\\1.jpg");ServletOutputStream out = response.getOutputStream();int len = 0;byte[] flush = new byte[1024 * 1024];while ((len = in.read(flush)) != -1) {out.write(flush, 0, len);}out.flush();out.close();in.close();}

转载于:https://www.cnblogs.com/aknife/p/10846819.html

03 HttpServletRequest_HttpServletResponse相关推荐

  1. 零起点学算法03——超简单模仿算术题

    零起点学算法03--超简单模仿算术题 Description 计算机计算能力很强哦.  让计算机帮你算其实也很容易,不过要学好计算机语言哦.  下面请看一个例子:要求计算机计算1+2的值并输出.  这 ...

  2. 鲲鹏服务器拦截系统调用,鲲鹏服务器unicfg工具适配OpenEuler 20.03问题

    问题描述: OEM伙伴装备产测平台,使用OpenEuler 20.03的操作系统,使用读写BIOS参数的unicfg工具,无法执行,将其中的vars目录改成efivars目录后可以执行,但写入后没有生 ...

  3. 藤本植物和攀爬植物模型包 Globe Plants – Bundle 23 – Vines and Creepers 03 (3D Models)

    藤本植物和攀爬植物模型包 Globe Plants – Bundle 23 – Vines and Creepers 03 (3D Models) 全球植物–第23束–藤本植物和攀缘植物03 (3D模 ...

  4. 【青少年编程竞赛交流】03月份微信图文索引

    03月份微信图文索引 由于"组队学习"这个公众号的功能主要是组织Datawhale社群中的学习者们每个月的组队学习,所以,我另外新建了这个微信公众号"青少年编程竞赛交流& ...

  5. 李嘉骐:03 PyTorch模块与基础实战

    深入浅出Pytorch 03 PyTorch模块与基础实战 内容属性:深度学习(实践)专题 航路开辟者:李嘉骐.牛志康.刘洋.陈安东 领航员:叶志雄 航海士:李嘉骐.牛志康.刘洋.陈安东 开源内容:h ...

  6. 数据结构与算法:03 C#面向对象设计 I

    03 C#面向对象设计 I 知识结构: 1.类与对象 类:用高级程序语言实现的一个ADT描述. 对象:通过类声明的变量. 2.封装 2.1 什么是封装 把类的内部隐藏起来以防止外部看到内部的实现过程. ...

  7. Numpy入门教程:03.数组操作

    背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python.其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执 ...

  8. RDKit2018.03.3+Win10(64位):ImportError: DLL load failed: 找不到指定的模块。

    RDKit2018.03.3,:ImportError: DLL load failed 环境:RDKit2018.03.3+Anaconda3+python3.6.6 安装命令:conda inst ...

  9. 2.c语言编译预处理,c语言第03章-编译预处理2.ppt

    c语言第03章-编译预处理2 第3章 编译预处理 编译预处理是指,编译时,首先对编译预处理命令进行处理,然后再将预处理后的中间结果进行编译,以得到目标代码. 教学目的: 掌握#define.#incl ...

最新文章

  1. 稳健地估计单应性矩阵,需要几个特征点?
  2. 「黑科技」机器人可以生孩子了,你怕不怕
  3. String.slice和String.substring有什么区别?
  4. l开头的英文车标是什么车_L开头的英文车标叫什么车
  5. 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法
  6. putty network error: connection refused
  7. Windows 2008-IIS 7.0-SSL操作大全
  8. Docker与CI持续集成/CD(转)
  9. java线程安全总结
  10. 架构设计 | 接口幂等性原则,防重复提交Token管理
  11. 销售99绝招 成功没商量
  12. knn约会_出色的在线约会预订系统应具备的5个功能
  13. 我的pycharm+python常用快捷键(复习防遗忘版)
  14. DDos攻击防御策略
  15. 联想小新Win11系统如何将新建标签页设置为Edge浏览器首页
  16. 我从华为身上学到的项目管理经验 -- 概述篇
  17. FlexBox 行间距
  18. 星际航行游戏流程(Unity 初学者)
  19. 阿里实习生java面试
  20. oracle19数据库对内存要求,在天堂 - 技术老男

热门文章

  1. 计算机itunes无法安装,手把手给你细说win7系统电脑无法安装itunes的解决方案
  2. WebServlet 4.0
  3. Linux信号处理函数可中断么,linux中关于信号处理笔记(一)
  4. python列表和字典_python使用for遍历字典、列表和字符串的几种方法
  5. 监听localStorage变化(同页面监听)
  6. xlrd.biffh.XLRDError: Excel xlsx file; not supported报错
  7. 【python】python redis的安装与使用
  8. python扫盲系列--(4)
  9. POI操作Excel常用方法总结
  10. 深入理解Spark 2.1 Core (十四):securityManager 类源码分析