JavaWeb学习-02(response和request)

2023-11-03

JavaWeb学习-02(response和request)

一、request对象

1.HttpServletRequest是ServletRequest的子接口

​ request对象用于接收客户端传递过来的请求内容,通过该对象的各种方法来获取请求中的内容,以便于后台根据请求的内容进行处理。

2.request对象的常用方法

​ ①:获取请求的完整路径,从http到?之前的数据

​ String url=request.getRequestURL()+"";//该方法返回的不是字符串,所以需要转为字符串。

​ ②:获取请求的部分路径,从站点名到?之前

​ String uri=request.getRequestURI();

​ ③: 获取请求时的参数字符串,从?之后的内容

​ String qurString=request.getQueryString();

​ ④:获取指定名称的参数值

​ String userName=request.getParameter(“userName”);

​ ⑤:获取协议版本

​ String version=request.getProtocol();

​ ⑥: 获取请求的方法

​ String method=request.getMethod();

​ ⑦:获取传递过来的有多个值的参数的值,以数组的形势获取

​ String[] likes=request.getParameterValues(“like”);

3.request乱码问题

​ 原因:在浏览器中默认使用的编码格式是ISO-8859-1,该编码是支持中文的,所以对传递中文会乱码。

​ 1. Tomcat8.0及以上 :

​ GET请求:GET请求不会乱码

​ POST请求 : 会乱码

​ 2.Tomcat7.0及以下

​ GET请求: 会乱码

​ POST请求 : 会乱码

​ 3.post请求乱码解决:

​ 在获取信息之前设置request的编码格式:request.setCharacterEnconding(“UTF-8”);注:只能用于POST请求

​ 4.所有请求乱码都能解决:

​ 获取传过来的字节序列,再将其转换为UTF-8的编码格式;(只允许在7.0及以下,否则在8.0不会乱码,都乱码了),此方 法针对于任何请求有乱码的

​ 解决:String s=new(request.getParameter(“name”).getBytes(“ISO-8859-1”),“UTF-8”));

4.request的转发跳转

​ 服务器在接受到了客户端的请求之后,根据传递过来的请求可以进行跳转。可以跳转到指定的JSP、HTML或者Java类。

​ 1.request转发跳转的特点

​ ①.是服务器端的行为

​ ②.浏览器中的地址栏不会发生变化

​ ③.使用的都是一个请求

​ ④.数据共享,在进行转发跳转的时候使用的是同一个request请求的数据

		//请求转发跳转到另外一个实现了HttpServlet的类,getRequestDispatcher()中传递的是跳转的地址,forward()是将请求的数据转发过去
		request.getRequestDispatcher("/ser01").forward(request, response);
		
		//请求跳转到其他的html或者JSP页面
		request.getRequestDispatcher("/NewFile.html").forward(request, response);
	

注意:转发跳转只能使用一个,不能同时使用

5.request域对象

​ 在服务器获取了客户端发送过来的请求数据之后,我们还可以在request的域对象中添加数据。作用范围只在一次请求中有效,但是可以多次请求转发。

		//1.设置域对象中的内容
 			request.setAttribute(String name,Object value);//类似于键值对,其中值的类型为对象,即可以传整数、字符串、集合等等
 		//2.获取域对象中的内容
 			requset.getAttribute(String name);//注意当获取的时候要注意接收时候的数据类型,可能会需要进行类型转换
 		//3.删除对象中的内容
 			requset.removeAttribuet(String name)

二、response对象

1.response对象

​ 每次发送请求都会有一个response 和request的对象传递过来,通过response对象向浏览器传递数据。

​ 1.获取的方法:注:两种方法只能使用一种,不能同时使用

​ getWriter()获取字符流的输出对象,只能输出字符串

​ getOutputStream()获取字节流的输出对象,能输出所有的数据类型

		//获取字符流
		PrintWriter writer=response.getWriter();
		writer.write("你好");
		//获取字节流
		ServletOutputStream outStream=response.getOutputStream();
		outStream.write("你好!!".getBytes());//传递的参数要是字符串的字节码

​ 2.乱码问题

​ ①:字符流getWriter():必定会产生乱码,在客户端中的IOS-8858-1不支持中文编码

​ 解决:统一客户端和服务器端的编码格式

	//服务器:
	response.setCharacterEncoding("UTF-8")
	//客户端:
	response.setHeader("content-type","UTF-8");
	//或者两者同时设置
	response.setContentType("charset=UTF-8");

​ ②:字节流getOutputStream():输出的是字节,但是由于来服务器和客户端的编码不同,导致乱码

	//解决:同时设置服务器和客户端的编码:
	response.setContentType("charset=UTF-8");

2.重定向

​ 重定向是一种服务端指导,客户端的行为。在服务器端接受到第一次请求之后,进行重定向,会传递给客户端一个新的地址,进行跳转,会发送第二次请求。

	//重定向	
	response.sendRedirect(url);

3.重定向与转发跳转的区别

​ ①:重定向的地址栏会发生变化,转发跳转不会。

​ ②:重定向会发送两次请求,转发跳转只会发送一次

​ ③:重定向的request数据不可共享(因为发送了两次请求),转发跳转的request数据是可共享的

​ ④:重定向是客户端行为,而转发跳转是服务器行为

​ ⑤:重定向访问的地址可以是任何地址(可进行跨域),而转发跳转的地址只能是当前站点下的资源(不能进行跨域)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaWeb学习-02(response和request) 的相关文章

  • 使用 Hibernate 用瞬态对象更新持久对象

    每天 数据都是通过网络服务导入的 我创建一个新的 暂时的 实例我通过 JPA 注释在 hibernate 中映射的 pojo 的 我将数据从 Web 服务填充到瞬态实例中 我从数据库加载持久对象 我想用瞬态实例中的数据更新该持久对象 我以某
  • 可序列化对象的 ArrayList 的加密保存和解密加载

    我在 SD 卡中保存并加载一个文件 其中包含ArrayList使用这两种方法的可序列化对象 保存方法 public static void saveUserList ArrayList
  • 仅运行相应源代码已更改的单元测试?

    我正在 Jenkins CI 服务器中运行单元测试和 Selenium 测试 众所周知 在大型项目中测试需要很长时间才能运行 Java 是否有一个工具 框架只能触发其源代码已更改的测试 这是因为并非每次对 SCM 的提交都会影响源代码的所有
  • 如何将参数传递给Workmanager DoWork方法

    我想安排任务在 24 小时后从数据库中删除 public class WorkManager extends Worker public WorkManager NonNull Context context NonNull WorkerP
  • 如何从球衣服务端点发送实体列表?

    我正在从球衣服务器发送实体列表 在客户端 我试图获取这些实体列表 但它给了元帅例外 为什么它在元素名末尾添加 s 即 emps 而不是 emp XmlRootElement public class Emp Server side code
  • 如何知道内存中是否已经存在类的实例?

    如何知道内存中是否已经存在类的实例 我的问题是 如果存在类实例 则不想读取方法 这是我的代码 private void jButton java awt event ActionEvent evt PNLSpcMaster pnlSpc n
  • 如何确定 JDialog 显示在哪个屏幕上

    我有一个非常大的应用程序 有多个对话框 我的任务是确保不完全可见的对话框 因为用户将其从可见屏幕区域拉出 移回屏幕中心 当我只处理一个屏幕时 这没问题 它工作得很好 但是 该应用程序的大多数用户的桌面上都有两个屏幕 当我尝试找出对话框显示在
  • 如何注册 org.springframework.integration.monitor.IntegrationMBeanExporter

    根据http www ibm com support knowledgecenter en SS7K4U 8 5 5 com ibm websphere nd multiplatform doc ae cspr data access tr
  • java springrabbit - 优雅地拒绝消息

    我有以下侦听器方法 Override public void onMessage Message message Channel channel try do something bad catch Exception e try long
  • 在休眠搜索中使用现有分析器AnalyzerDiscriminator

    Entity Indexed AnalyzerDefs AnalyzerDef name en tokenizer TokenizerDef factory StandardTokenizerFactory class filters To
  • SFTP Java - 管道关闭 Jsch 异常

    我正在研究一种 java 方法 将文件从一个位置复制到另一个远程位置 我的代码如下 我尝试使用jsch 0 1 42 0 1 50 0 1 54 public static void processFiles ArrayList
  • mysql 准备好的语句错误:MySQLSyntaxErrorException

    我使用准备好的语句编写了选择语句 每次尝试运行都会出现此错误 我如何克服这个错误 我的jdbc连接器是mysql connector java 5 1 13 bin jar 我的代码 public Main add ad to getAdD
  • 在Android项目中引用(纯java)项目(找不到类)

    我试图在我的 Android 项目中引用一个纯 java 项目 gt Java 项目有一大堆我需要使用的类 哦 正如第一个回复所指出的 我正在使用 eclipse 是的 唯一的问题是 我总是找不到类 XXX 从方法 com example
  • jasper 报告文件中出现错误

    首先 我在 iReport 5 1 0 中创建一个 R D1 jrxml 文件 我执行该报告的 Java 代码如下所示 import java sql Connection import java sql DriverManager imp
  • 如何让 Camel FTP 按需只获取一次

    我对骆驼还很陌生 我一直在尝试让 Camel 根据需要仅通过 FTP 获取单个文件一次 我无法让它发挥作用 这是我尝试过的 让我知道什么是最好的方法以及我的代码有什么问题 1 读取文件后发送一条空消息当收到空消息时 停止路由 from di
  • 使用 ProcessBuilder 启动 CMD

    我尝试使用以下代码在 Windows 中启动 CMD 应用程序 但它无法按预期工作 来自不同网站的几个示例表明 cmd 作为 ProcessBuilder 构造中的参数应该有效 我需要做什么才能让我的 Java 应用程序在 Windows
  • Java无损保存原始JPEG

    如下所示 我有第一张图像是原始 JPEG 图像 第二张图像用于缓冲图像 然后使用保存http www lac inpe br JIPCookbook 6040 howto compressimages jsp http www lac in
  • 使用 SimpleDateFormat、Java 进行错误的日期解析

    我需要使用日期模式 yyyy MM dd 解析输入字符串中的日期 如果日期采用任何其他格式 则抛出错误 这是我解析日期的代码 private void validateDate throws MyException Date parsedD
  • SWT StyledText 有高度限制吗?

    我正在尝试创建一个应用程序 其中包含在 ScrolledComposite 中显示的 StyledText 框 我在 StyledText 框中显示大量行时遇到困难 超过 2 550 行似乎会导致问题 StyledText 框本身不能有滚动
  • Spring Boot 2 中的 401 代替 403

    With 春季启动 https projects spring io spring boot 1 5 6 发布我能够发送 HTTP 状态代码401代替403如中所述如果请求未经身份验证的uri 如何让Spring Security响应未经授

随机推荐