一、请求行数据

1.获取谞求行数据

Get /web01/demo1?name=zhangsan Http/1.1

方法: 1.获取谓求方式:GET String getMethod()

2.获取虚拟目录: String getContextPath();

3.获取 Servlet路径:/demo1 string getServletPath();

4.获取get方式参数:name= zhangsan String getQueryString()

5.获取请求URI: string getRequestURI(): /web01/demo1 Stringbuffer getRequestUrl(): http://localhost/web01/demo1

6.获取协议及版本:HTTP/1.1 String getProtocolo()

7.获取客户机的IP地址 String getRemoteAddr()

例子:

package com.zhujiantao;
​
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
​
import javax.jws.WebService;
import java.io.IOException;
//*为任意符
@WebServlet("*.do")
public class UserServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(req.getMethod());System.out.println(req.getContextPath());System.out.println(req.getServletPath());System.out.println(req.getQueryString());}
}
​
//输入123.do?name=hello

结果:

请求头数据

  1. String getHeader(String name);通过请求头的名称 获取请求头的值

  2. Enumeration<String> getHeaderNames(); 获取所有请求头数据

    Enumeration<String> headerNames = request.getHeaderNames();
    while(headerNames.hasMoreElements()){String name = headerNames.nextElement();String value = request.getHeader(name);System.out.println(name+" "+value);
    }

获取请求体数据(重点)

获取传递过来的参数

请求体: 只有post请求方式,才有请求体,在请求体中分装了post请求的请求参数

获取流对象

BufferedReader getReader();获取字符输入流,只能操作字符数据

ServletInputStream getInputStream();获取字节输入流,可以操作所有类型的数据(使用在文件上传中)

例子:

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
​
import javax.jws.WebService;
import java.io.BufferedReader;
import java.io.IOException;
@WebServlet("*.do")
public class UserServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String name = req.getParameter("name");String age = req.getParameter("age");System.out.println(name);System.out.println(age);}
}
​
//传入name=hello参数

传参

结果:

注意:传数据要用Post,比较安全,Get会直接暴露数据在地址栏

其他(get和post都可以使用)

   
 1. String getParameter(String name):根据参数名称获取参数值  username=zs&password=1232. String[] getParameterValues( String name):根据参数名称获取参数值数组 username=zs&username=ls3. Map<String,String[]>  getParameterMap():获取所有参数的map集合

乱码问题

get方式: tomcat 已经处理了get的中文乱码问题

post方式: doPost中设置 request.setCharacterEncoding("utf-8");

二、请求转发

一种服务器内部资源跳转的方式,servlet之间的跳转

步骤:

1.通过request对象获取请求转发器对象

RequestDispatcher

request.getRequestDispatcher(String path)

  1. 通过RequestDispatcher对象来进行转发:

    RequestDispatcher.forward(ServletRequest request,ServletResponse response);

特点:

// 使用示例:
req.getRequestDispatcher("/SchoolServlet").forward(req,resp);
1. 地址上显示的是请求servlet的地址,返回200ok。
2. 请求次数只有一次,因为是服务器内部帮客户端执行了后续的工作。
3. 只能跳转自己项目的资源路径。
4. 效率上稍微高一点,因为只执行一次请求。
5. 可以使用上一次的request对象。

共享数据

1. 域对象: 一个有作用范围的对象,可以在范围内共享数据

2. request域: 代表一次请求的范围,一般用于请求转发的多个资源数据

方法

1. req.setAttribute(String name,Object object);存储数据
2. Object getAttribute(String name);通过键获取数据
3. Void removeAttribute(String name); 通过键移除键值对

三、response

响应行

  1. 组成: 协议/版本 响应状态码 状态码描述

  2. 响应状态码: 服务器告诉客户端浏览器本次请求和响应的一个状态。

    状态码都是3位数字

    分类: 1XX:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1XX状态码

2XX:成功。代表:200

3XX:重定向。代表:302(重定向),304(访问缓存)

4XX:客户端错误。(404找不到后台的地址)

5Xx:服务器端错误。代表:500(服务器内部出现异常)

响应头

常见的响应头

1.Content-type: 服务器告诉客户端本次响应体数据格式以及编码格式

2.Content-disposition: 服务器告诉客户端以什么格式打开响应体数据

In-line: 默认值,在当前页面打开

attachment;filename=xxx: 以附件的形式打开响应体,文件下载

响应行

设置status、version

响应体

传输的数据

HttpServletResponse

功能: 设置响应消息

设置响应行

1.格式:HTTP/1.1 200 ok

2.设置状态码: setStatus(int sc)

设置响应头: setHeader( string name, string value)

设置响应体:

使用步骤:

1.获取输出流 ​ 字符输出流: Printwriter getwriter() ​ 字节输出流: ServletOutputStream getOutputStream()

2.使用输出流,将数据输出到客户端浏览器

 response.setContentType("text/html;charset=utf-8");response.getWriter().write("执行成功");//因为中文是乱码,需要加入setContentType

注意:图片需要用file去获取输出流,末尾还要关闭流

四、重定向

重定向特点:

1.地址栏发生变化

  1. 重定向可以访问其他站点(服务器)的资源

  2. 重定向是两次请求,不能使用request对象来共享数据

转发特点:

1.转发地址栏路径不变

2.转发只能访问当前服务器下的资源

  1. 转发是一次请求,可以使用request对象来共享数据

五、路径

相对路径: 通过相对路径不能确定唯一资源,如: ./myservlet3,不以/开头,以.开头

规则: 找到当前资源和目标资源之间的相对位置 http://localhost:8081/javaweb01/userServlet, http://localhost:8081/javaweb01/shopServlet

绝对路径: 通过绝对路径可以确定唯一资源,如http://localhost:1888/web01/index.html /web01/index.html,以/开头

规则:

如果给客户端浏览器使用,需要添加项目的虚拟目录(比如表单的提交)

如果给服务器使用: 不需要加项目的虚拟目录(比如:重定向)

六、动态获取虚拟目录

String contextPath = request.getContextPath();

请求、请求转发、response、重定位相关推荐

  1. (Springboot,SpringCloud )RestTemplate原封不动进行路由(ROUTE)支持所有请求方式转发

    代码 package com.phfund.dmsp.transfer.controller;import com.phfund.dmsp.common.util.IpUtils; import or ...

  2. java 请求响应_java http接口请求响应 request response

    接口类: 1 package org.sunshine.dcda.epg.wechat.controller.niao; 2 3 import javax.servlet.http.HttpServl ...

  3. 导航定位用户向服务器发送位置请求6,跨平台的地理位置定位方法、平台及定位接入服务器...

    1. 一种跨平台的地理位置定位方法,其特征在于,包括: 通过网络服务接口,接收移动终端的应用发送的定位请求: 将所述定位请求转换格式后,向定位导航解算服务器发送: 接收所述定位导航解算服务器针对所述转 ...

  4. **服务器的请求与转发_ServletHTTPRequest *

    Servlet * 概念* 步骤* 执行原理* 生命周期* Servlet 3.0 注解配置* Servlet的体系结构Servlet -- 接口|GenericServlet--抽象类|HttpSe ...

  5. java 请求转发_javaweb之请求的转发和重定向

    1.什么是请求转发和请求重定向? 请求转发: xxServlet收到请求,然后直接转发给yyServlet,然后yyServlet返回给客户端.整个过程中,客户端发出一个请求,收到一个响应. 重定向: ...

  6. 基于Servlet体系的HTTP请求代理转发Spring Boot组件

    背景概述 两个项目组原本都是各自负责两个产品线(产品A.产品B),由于公司业务的发展,目前需要将两个产品合并成一个大产品(功能整合,部分做取舍,最终产出产品C),前后端代码必然也需要整合,包括两个产品 ...

  7. Action请求后台出现Response already commited异常解决方法

    Action请求后台出现Response already commited异常解决方法 参考文章: (1)Action请求后台出现Response already commited异常解决方法 (2) ...

  8. nginx 请求头转发

    前言 网站安全 开始审查了.之前我们的项目 是通过 ip + port 直接访问tomcat的,内部使用嘛.然而,现在需要使用 https 协议访问,以增强网站的安全性. 本来没有这么麻烦的,但是写代 ...

  9. java 转发服务器_Java 请求的转发

    ## 请求的转发 ## 1.什么是请求的转发? > 请求转发是指:服务器收到请求,将请求从服务器中转发到另一个服务器 2.请求转发特点 > 服务器地址栏没有变化 > 一次请求 > ...

  10. winform 在panel怎么实现锚点定位_5GC支持URLLC解决方案12:以太网PDU会话锚点重定位...

    该解决方案解决了关键问题#3:在UE移动期间增强会话连续性,相较方案11,它"侧重于在保持效率的同时增强会话连续性".为了实现URLLC的低时延,PDU会话锚点和访问节点之间需要物 ...

最新文章

  1. 刚进入大学觉得计算机课很难,高校代码条幅迎新生,00后表示刚开学就感受到秃头压力!程序员太难了...
  2. 独家 | SVP:一种用于深度学习的高效数据选择方法
  3. Activiti工作流从入门到入土:工作流简介
  4. Stanford UFLDL教程 主成分分析(PCA)
  5. Hive的基本操作-创建分区表
  6. 百胜软件牵手晨光文具打造电商信息化平台
  7. 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结
  8. linux程序循环执行,Linux之循环执行任务
  9. 数据结构-stl(二维比较,排序分析)
  10. pta 计算圆周率(C语言实现)
  11. 四十八种微信公众号加人方法
  12. [转载][翻译]偿还技术债 - 通过重构拯救老代码
  13. Perl下载和安装Python下载和安装
  14. IT战略规划之流程再造 —2013年中科院计算所培训中心系列公益讲座
  15. 组建自己的局域网(可以将PC机实现为服务器)
  16. 用C语言统计给定文本文件中汉字的个数。
  17. 记一次NoHttpResponseException:xxx failed to respond
  18. 【更新公告】Airtest更新至1.2.4
  19. MAC地址飘移查看及解决方法 一般是网络中存在环路
  20. vc获取n卡编号_NVIDIA n卡各主要显卡核心代号

热门文章

  1. python实现app自动签到器_Python实现自动签到脚本功能
  2. KindEditor编辑器/分页编写
  3. Github 代码热力图,一键填充
  4. 小红书app引流脚本详细教程
  5. Gitee(码云)入门使用教程
  6. MTK平台手动修改IMEI号,恢复出厂设置后无法保留最新修改的IMEI号,要求做成保留的
  7. 2022面试,Java面试项目推荐,15个项目吃透两个offer拿到手软
  8. 计算机维修直播,电脑直播过程中出现杂声怎么办?三种解决方法任你选
  9. Mac上执行Linux可执行文件报错:cannot execute binary file
  10. 股票入门基础知识20:什么是市净率(P/B)