Request请求

Request请求:

  • Request请求,就是客户端希望从服务器端获取资源,向服务器发出询问。在B/S架构中,就是客户浏览器向服务器发出询问。在我们的JavaEE工程中,客户浏览器发出询问,要遵循HTTP协议所规定的。
  • 请求对象,就是在JavaEE工程中,用于发送请求的对象。我们常用的对象就是ServletRequest和HttpServletRequest,它们的区别就是是否和HTTP协议有关。是Servlet四大域之一
请求对象方法:
返回值方法名说明
StringgetContextPath()获取虚拟目录名称
StringgetServletPath()获取Servlet映射路径
StringgetRemoteAdd()获取访问者ip地址
StringgetQueryString()获取请求的消息数据
StringgetRequestURI()获取统一资源标识符
StringBuffergetRequestURL()获取统一资源定位符

演示:

@WebServlet("/requestMethod")
public class RequestMethod extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 访问地址http://localhost:8081/demo/requestMethod// getContextPath()	获取虚拟目录名称   /demoSystem.out.println(req.getContextPath());// getServletPath()	获取Servlet映射路径   /requestMethodSystem.out.println(req.getServletPath());// getRemoteAdd()	获取访问者ip地址   0:0:0:0:0:0:0:1System.out.println(req.getRemoteAddr());// getQueryString()	获取请求的消息数据    nullSystem.out.println(req.getQueryString());// getRequestURI()	获取统一资源标识符    /demo/requestMethodSystem.out.println(req.getRequestURI());// getRequestURL()	获取统一资源定位符   http://localhost:8081/demo/requestMethodSystem.out.println(req.getRequestURL());// URI的范围更大(共和国),URL更具体(中华人民共和国)}
}
获取请求头方法:
返回值方法名说明
StringgetHeader(String name)根据请求头名称获取一个值
EnumerationgetHeaders(String name)根据请求头名称获取多个值
EnumerationgetHeaderNames()获取所有请求头

演示:

@WebServlet("/requestHeaderDemo")
public class RequestHeaderDemo extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// getHeader(String name)	根据请求头名称获取一个值System.out.println(req.getHeader("connection"));System.out.println("------------------------");// getHeaders(String name)	根据请求头名称获取多个值Enumeration<String> values = req.getHeaders("accept-encoding");while (values.hasMoreElements()) {String value = values.nextElement();System.out.println(value);}System.out.println("------------------------");// getHeaderNames()	获取所有请求头Enumeration<String> names = req.getHeaderNames();while (names.hasMoreElements()) {String name = names.nextElement();String value = req.getHeader(name);System.out.println(name + " : " + value);}}
获取请求参数信息:
返回值方法名说明
StringgetParameter(String name)根据名称获取数据
String[]getPaeameterValues(String name)根据名称获取所有数据
EnumerationgetParameterNames()获取所有名称
Map<String,String[]>getParameterMap()获取所有参数的键值对

演示:
注册页面:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>注册页面</title>
</head>
<body><form action="/servletDemo08" method="get" autocomplete="off">姓名:<input type="text" name="username"><br/>密码:<input type="password" name="password"><br/>爱好:<input type="checkbox" name="hobby" value="game">游戏<input type="checkbox" name="hobby" value="study">学习<br/><button type="submit">提交</button>
</form></body>
</html>

获取请求参数:

@WebServlet("/servletDemo08")
public class ServletDemo08 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// String	getParameter(String name)	根据名称获取数据System.out.println(req.getParameter("username"));System.out.println(req.getParameter("password"));System.out.println("——————————————————————");// String[]	getParameterValues(String name)	根据名称获取所有数据String[] hobbies = req.getParameterValues("hobby");for (String hobby : hobbies) {System.out.println(hobby);}System.out.println("——————————————————————");// Enumeration<String>	getParameterNames()	获取所有名称Enumeration<String> names = req.getParameterNames();while (names.hasMoreElements()) {System.out.println(names.nextElement());}System.out.println("——————————————————————");// Map<String,String[]>	getParameterMap()	获取所有参数的键值对Map<String, String[]> map = req.getParameterMap();for (String key : map.keySet()) {String[] values = map.get(key);System.out.print(key + ":");for (String value : values) {System.out.print(value + " ");}System.out.println();}}
}
获取参数手动封装到对象:

学生类:

public class Student {private String username;private String password;private String[] hobby;
}

注册页面不变,改一下提交路径即可

@WebServlet("/servletDemo09")
public class ServletDemo09 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1.获取所有的数据String username = req.getParameter("username");String password = req.getParameter("password");String[] hobby = req.getParameterValues("hobby");// 2.封装学生对象Student student = new Student(username, password, hobby);// 3.打印学生对象System.out.println(student);}
}
反射封装对象:
@WebServlet("/servletDemo10")
public class ServletDemo10 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) {// 1. 获取所有的数据Map<String, String[]> map = req.getParameterMap();// 2. 封装学生对象Student student = new Student();// 3. 遍历集合for (String name : map.keySet()) {String[] value = map.get(name);try {// 获取Student对象的属性描述器,就是获取get/set,然后把get/set封装到pd里// 拿到User对象中的属性描述器。是谁的属性描述器:是由构造函数的第一个参数决定的。第二个参数是指定javabean的字节码PropertyDescriptor pd = new PropertyDescriptor(name, student.getClass());//参数指的就是拿哪个类的哪个属性的描述器// 设置javabean属性的值Method writeMethod = pd.getWriteMethod();if (value.length > 1) {writeMethod.invoke(student, (Object) value);} else {writeMethod.invoke(student, value);//第一个参数是指的给哪个对象,第二个参数指的是赋什么值}} catch (IntrospectionException | IllegalAccessException | InvocationTargetException e) {e.printStackTrace();}}// 4. 输出对象System.out.println(student);}
}
BeanUtils封装对象:

使用apache的commons-beanutils实现封装
如果遇到报500可能是没有将jar包要导入到项目中

@WebServlet("/servletDemo11")
public class ServletDemo11 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) {//1.获取所有的数据Map<String, String[]> map = req.getParameterMap();//2.封装学生对象Student stu = new Student();try {// 通过该方法将map中的数据映射/封装到javabean的get和set方法中BeanUtils.populate(stu, map);} catch (Exception e) {e.printStackTrace();}//4.输出对象System.out.println(stu);}
}
流对象获取请求信息:

方法:

返回值方法名说明
BufferedReadergetReader()获取字符输入流
ServletInputStreamgetInputStream()获取字节输入流

演示:

@WebServlet("/servletDemo04")
public class ServletDemo04 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 字符流获取必须使用post,字符流不是new出来的不需要关闭
/*        BufferedReader reader = req.getReader();String len;while ((len = reader.readLine()) != null) {System.out.println(len);}*/// 如果用post出现乱码就在代码前加个编码格式就可以了// setCharacterEncoding:设置编码格式req.setCharacterEncoding("UTF-8");// 字节流ServletInputStream inputStream = req.getInputStream();byte[] bytes = new byte[1024];int len;while ((len = inputStream.read(bytes)) != -1) {System.out.println(new String(bytes, 0, len));}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
中文乱码问题:

GET方式请求:

  • GET方式请求的正文是在地址栏中,在Tomcat8.5版本及以后,Tomcat服务器已经帮我们解决了,所以不会有乱码问题了。

POST方式请求

  • 在POST方式请求中,我们的乱码问题可以用如下代码解决:
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/** GET方式:正文在地址栏* username=%D5%C5%C8%FD* %D5%C5%C8%FD是已经被编过一次码了** 解决办法:* 	 使用正确的码表对已经编过码的数据进行解码。*/// setCharacterEncoding:设置编码格式req.setCharacterEncoding("UTF-8");String username = request.getParameter("username");System.out.println(username);
}

请求域:

  • 请求域(request域):可以在一次请求范围内进行共享数据
  • 一般用于请求转发 的多个资源中共享数据
请求对象操作共享数据方法:
返回值方法名说明
voidsetAttribute(String name,Object value)向请求域对象中存储数据
objectsetAttribute(String name)通过名称获取请求域对象中的数据
voidremoveAttribute(String name)通过名称移除请求域对象中的数据
请求转发:

客户端的一次请求到达以后,发现借助其他的Servlet来实现功能

特点:

  • 浏览器地址不变
  • 域对象中的数据不丢失
  • 负责转发的Servlet转发前后的显示正文会丢失
  • 由转发的目的地来响应客户端
请求转发的方法:
返回值方法名说明
RequestDispatchergetRequestDispatcher(String name)获取请求调度对象
voidforward(ServletRequest req,ServletResponse resp)实现转发
@WebServlet("/servletDemo12")
public class ServletDemo12 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 设置共享数据req.setAttribute("itzhuzhu", "正在学习");// 获取请求调度对象RequestDispatcher rd = req.getRequestDispatcher("servletDemo13");// 实现转发功能rd.forward(req, resp);}
}
@WebServlet("/servletDemo13")
public class ServletDemo13 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取共享数据System.out.println(req.getAttribute("itzhuzhu"));System.out.println("ServletDemo13执行");}
}
请求包含:

可以合并其它Servlet中的功能一起响应给客户端

特点:

  • 浏览器地址不变
  • 域对象数据不丢失
  • 被包含的Servlet响应头会丢失
请求包含方法:
返回值方法名说明
RequestDispatchergetRequestDispatcher(String name)获取请求调度对象
voidinclude(ServletRequest req,ServletResponse resp)实现包含
@WebServlet("/servletDemo14")
public class ServletDemo14 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 设置共享数据req.setAttribute("itzhuzhu", "正在学习");// 获取请求调度对象RequestDispatcher rd = req.getRequestDispatcher("/servletDemo13");// 实现包含功能rd.include(req, resp);}
}
重定向和请求转发 :
  • 重定向:通过各种方法将各种网络请求重新定个方向转到其它位置,地址会变
  • 请求转发:客户端发起请求后,在服务器之间的跳转,然后服务器返回页面给客户端进行显示,地址不变

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL编程基础

本文是关于MySQL编程中的一些基础知识&#xff0c;包括变量和运算符、常用语句、函数。 一、变量与运算符 1.用户会话变量声明&#xff1a;SET 变量名 表达式;//即&#xff1a;用户会话变量无需提前定义&#xff0c;直接用赋值语句赋值&#xff0c;就算是定义了&#xff08;也…

Response响应方法详解

Response&#xff1a; 响应&#xff1a;服务器把请求的处理结果告知客户端。在B/S架构中&#xff0c;响应就是把结果带回浏览器。响应对象&#xff1a;在项目中用于发送响应的对象 常用状态码&#xff1a; 状态码说明200执行成功302它和307一样&#xff0c;都是用于重定向的状…

perl6 HTTP::UserAgent (2)

http://www.cnblogs.com/perl6/p/6911166.html 之前这里有个小小例子&#xff0c; 这里只要是总结一下。 HTTP::UserAgent包含了以下模块: ---------------------------------------------------------------------------------------------- Module |Path-Nam…

Java会话技术

会话技术&#xff1a; 会话指的是客户端浏览器和服务端之间的度偶次请求和响应当打开浏览器&#xff0c;访问网站地址后&#xff0c;会话开始&#xff0c;当关闭浏览器&#xff08;或者到了过期时间&#xff09;&#xff0c;会话结束。就像打电话只要不挂电话就是一次会话。 会…

【调用IP宏文件进行仿真】modelsim仿真时出现 Instantiation of 'xxx' failed. The design unit was not found....

出现错误类似&#xff1a;modelsim 仿真fifo时出现 Error: (vsim-3033) E:/Programs/ModelSim/fifo/ps2_fifo.v(75): Instantiation of scfifo failed. The design unit was not found.仿真波形不对&#xff0c;调用的ip核没有输出&#xff08;白色虚线&#xff09;等情况&…

Java Server Page

JSP JSP全称是Java Server Page&#xff0c;基于Java和Servlet一样是sun公司推出的一套开发动态web资源的技术&#xff0c;称为JSP/Servlet规范。JSP的本质其实就是一个Servlet。jsp是一种动态网页技术标准&#xff0c;jsp部署在服务器上可以处理客户端的请求&#xff0c;并根据…

HDFS概述(2)————Block块大小设置

参考&#xff1a;HDFS概述&#xff08;4&#xff09;————HDFS权限HDFS概述&#xff08;3&#xff09;————HDFS FederationHDFS概述&#xff08;2&#xff09;————Block块大小设置HDFS概述&#xff08;1&#xff09;————HDFS架构问题Q: 一个常被问到的一个问题是…

PTA 01-复杂度2 Maximum Subsequence Sum (25分)

题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/663 5-1 Maximum Subsequence Sum (25分) Given a sequence of KK integers { N_1N​1​​, N_2N​2​​, ..., N_KN​K​​ }. A continuous subsequence is defined to be { N_iN​i​​, N_{i1}N​i1​​, ..…

Listener

观察者设计模式&#xff1a; 它是事件驱动的一种体现形式。就好比在做什么事情的时候被人盯着。当对应做到某件事时&#xff0c;触发事件。 观察者模式通常由以下三部分组成&#xff1a; ​1. 事件源&#xff1a;触发事件的对象。 2.​ 事件&#xff1a;触发的动作&#xff0c;…

BZOJ 1083: [SCOI2005]繁忙的都市【Kruscal最小生成树裸题】

1083: [SCOI2005]繁忙的都市 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2925 Solved: 1927[Submit][Status][Discuss]Description 城市C是一个非常繁忙的大都市&#xff0c;城市中的道路十分的拥挤&#xff0c;于是市长决定对其中的道路进行改造。城市C的道 路是这样分…

Mysql介绍与安装LinuxmacOS系统

数据库&#xff1a; 用于存储和管理数据的仓库 数据库的好处&#xff1a; 可以持久化存储数据方便存储和管理数据使用了统一的方式操作数据库 – SQL 常见的数据库&#xff1a; Oracle&#xff1a;收费的大型数据库&#xff0c;Oracle公司的产品。Oracle收购SUN公司&#xff0c…

如何查看Laravel版本号的三种方法

1.PHP artisan --version 2.vim vendor/laravel/framework/src/Illuminate/Foundation/Application.php 3&#xff1a;可以写在路由里 5.4版本的路由文件夹是routes。我们可以写在routes\web.php里。 Route::get(laravel-version, function(){ $laravel app(); return…

最全的Mysql数据类型

数值类型&#xff1a; 类型大小范围&#xff08;有符号&#xff09;范围&#xff08;无符号&#xff09;用途Bit1bytes-128 ~ 120 ~ 255小整数值TINYINT1 byte-128 ~ 1270 ~ 255小整数值SMALLINT2 bytes-32768 ~ 327670 ~ 65535大整数值MEDIUMINT3 bytes-8388608 ~ 83886070 ~…

02_反汇编_反编译

实际上安卓的应用都是zip包,只不过把zip扩展名修改了,修改成了APK.所以如果你想拿到它的图片的话,实际上特别简单&#xff0c;你就把它这个.apk换成.zip.换成.zip之后这里的图片资源就都可以拿到了. 有些公司可能美工的水平或者美工的人数比较少&#xff0c;项目还比较急&#…

SQL约束语法

约束 作用&#xff1a;对表中的数据进行限定&#xff0c;保证数据的正确性、有效性、完整性&#xff01; 约束分类&#xff1a; 约束说明PRIMARY KEY主键约束PRIMARY KEY AUTO_INCREMENT主键、自动增长UNIQUE唯一约束NOT NULL非空约束FOREIGN KEY外键约束FOREIGN KEY ON UPDAT…

hdu 2489 Minimal Ratio Tree

https://vjudge.net/problem/HDU-2489 题意&#xff1a;求一个完全图的最优比率生成树&#xff0c;点的个数由题给出。最优比率生成树是边的权值之和与点的权值之和的比值最小的生成树。 思路&#xff1a;一开始用dfs枚举搜索每一种情况&#xff0c;t了&#xff0c;枚举的情况太…

SQL多表关联

多表关联&#xff1a; 多张数据表之间是可以有一定的关联关系&#xff0c;这种关联关系可以通过外键约束实现 多表的分类&#xff1a; 一对一一对多多对多 一对一&#xff1a; 一张表对应一张表 适用场景举例&#xff1a; 人和身份证。一个人只能有一个身份证&#xff0c;一个身…

背包问题 codevs2210 数字组合

数字组合 题目描述 Description在N个数中找出其和为M的若干个数。先读入正整数N和M&#xff0c; 再读入N个正数&#xff08;可以有相同的数字&#xff0c;每个数字均在1000以内&#xff09;&#xff0c; 在这N个数中找出若干个数&#xff0c; 使它们的和是M&#xff0c; 把满足…

SQL多表查询

多表查询分类&#xff1a; 内连接查询 显式内连接隐式内连接 外连接查询 左外连接右外连接 子查询自关联查询 准备数据&#xff1a; -- 创建user表 CREATE TABLE USER(id INT PRIMARY KEY AUTO_INCREMENT, -- 用户idNAME VARCHAR(20), -- 用户姓名age INT …

HTTP协议整理

一、概念 1.HTTP协议&#xff1a;即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和Web服务器之间互相通信的规则&#xff0c;它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。它可以使浏览器更加高效&#xff0c;使网络传输减少。…