请求、请求转发、response、重定位
一、请求行数据
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
结果:
请求头数据
String getHeader(String name);通过请求头的名称 获取请求头的值
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)
通过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
响应行
组成: 协议/版本 响应状态码 状态码描述
响应状态码: 服务器告诉客户端浏览器本次请求和响应的一个状态。
状态码都是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.地址栏发生变化
重定向可以访问其他站点(服务器)的资源
重定向是两次请求,不能使用request对象来共享数据
转发特点:
1.转发地址栏路径不变
2.转发只能访问当前服务器下的资源
转发是一次请求,可以使用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、重定位相关推荐
- (Springboot,SpringCloud )RestTemplate原封不动进行路由(ROUTE)支持所有请求方式转发
代码 package com.phfund.dmsp.transfer.controller;import com.phfund.dmsp.common.util.IpUtils; import or ...
- java 请求响应_java http接口请求响应 request response
接口类: 1 package org.sunshine.dcda.epg.wechat.controller.niao; 2 3 import javax.servlet.http.HttpServl ...
- 导航定位用户向服务器发送位置请求6,跨平台的地理位置定位方法、平台及定位接入服务器...
1. 一种跨平台的地理位置定位方法,其特征在于,包括: 通过网络服务接口,接收移动终端的应用发送的定位请求: 将所述定位请求转换格式后,向定位导航解算服务器发送: 接收所述定位导航解算服务器针对所述转 ...
- **服务器的请求与转发_ServletHTTPRequest *
Servlet * 概念* 步骤* 执行原理* 生命周期* Servlet 3.0 注解配置* Servlet的体系结构Servlet -- 接口|GenericServlet--抽象类|HttpSe ...
- java 请求转发_javaweb之请求的转发和重定向
1.什么是请求转发和请求重定向? 请求转发: xxServlet收到请求,然后直接转发给yyServlet,然后yyServlet返回给客户端.整个过程中,客户端发出一个请求,收到一个响应. 重定向: ...
- 基于Servlet体系的HTTP请求代理转发Spring Boot组件
背景概述 两个项目组原本都是各自负责两个产品线(产品A.产品B),由于公司业务的发展,目前需要将两个产品合并成一个大产品(功能整合,部分做取舍,最终产出产品C),前后端代码必然也需要整合,包括两个产品 ...
- Action请求后台出现Response already commited异常解决方法
Action请求后台出现Response already commited异常解决方法 参考文章: (1)Action请求后台出现Response already commited异常解决方法 (2) ...
- nginx 请求头转发
前言 网站安全 开始审查了.之前我们的项目 是通过 ip + port 直接访问tomcat的,内部使用嘛.然而,现在需要使用 https 协议访问,以增强网站的安全性. 本来没有这么麻烦的,但是写代 ...
- java 转发服务器_Java 请求的转发
## 请求的转发 ## 1.什么是请求的转发? > 请求转发是指:服务器收到请求,将请求从服务器中转发到另一个服务器 2.请求转发特点 > 服务器地址栏没有变化 > 一次请求 > ...
- winform 在panel怎么实现锚点定位_5GC支持URLLC解决方案12:以太网PDU会话锚点重定位...
该解决方案解决了关键问题#3:在UE移动期间增强会话连续性,相较方案11,它"侧重于在保持效率的同时增强会话连续性".为了实现URLLC的低时延,PDU会话锚点和访问节点之间需要物 ...
最新文章
- 刚进入大学觉得计算机课很难,高校代码条幅迎新生,00后表示刚开学就感受到秃头压力!程序员太难了...
- 独家 | SVP:一种用于深度学习的高效数据选择方法
- Activiti工作流从入门到入土:工作流简介
- Stanford UFLDL教程 主成分分析(PCA)
- Hive的基本操作-创建分区表
- 百胜软件牵手晨光文具打造电商信息化平台
- 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结
- linux程序循环执行,Linux之循环执行任务
- 数据结构-stl(二维比较,排序分析)
- pta 计算圆周率(C语言实现)
- 四十八种微信公众号加人方法
- [转载][翻译]偿还技术债 - 通过重构拯救老代码
- Perl下载和安装Python下载和安装
- IT战略规划之流程再造 —2013年中科院计算所培训中心系列公益讲座
- 组建自己的局域网(可以将PC机实现为服务器)
- 用C语言统计给定文本文件中汉字的个数。
- 记一次NoHttpResponseException:xxx failed to respond
- 【更新公告】Airtest更新至1.2.4
- MAC地址飘移查看及解决方法 一般是网络中存在环路
- vc获取n卡编号_NVIDIA n卡各主要显卡核心代号
热门文章
- python实现app自动签到器_Python实现自动签到脚本功能
- KindEditor编辑器/分页编写
- Github 代码热力图,一键填充
- 小红书app引流脚本详细教程
- Gitee(码云)入门使用教程
- MTK平台手动修改IMEI号,恢复出厂设置后无法保留最新修改的IMEI号,要求做成保留的
- 2022面试,Java面试项目推荐,15个项目吃透两个offer拿到手软
- 计算机维修直播,电脑直播过程中出现杂声怎么办?三种解决方法任你选
- Mac上执行Linux可执行文件报错:cannot execute binary file
- 股票入门基础知识20:什么是市净率(P/B)