高级java技术web组件_(重温)JavaWeb--Servlet技术(二)(JavaWeb 的三大组件之一)...

1.HttpServletRequest 类

a)HttpServletRequest 类有什么作用。

每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。 然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的 信息。

b)HttpServletRequest 类的常用方法

序号

方法名

作用

1

getRequstURI()

获取请求的资源路径

2

getRequestURL()

获取请求的统一资源定位符(绝对路径)

3

getRemoteHost()

获取客户端的IP地址

4

getHeader()

获取请求头

5

getParameter()

获取请求参数

6

getParameterValues()

获取请求参数(多个值的时候使用)

7

getMethod()

获取请求方式get或post

8

setAttribute(key,value)

获取域数据

9

getAttribute(key)

获取域数据

10

getRequestDispacher()

获取请求转发对象

常用 API 示例代码:

public class RequestAPIServlet extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,

IOException{

// i.getRequestURI() 获取请求的资源路径

System.out.println("URI => " + req.getRequestURI());

// ii.getRequestURL() 获取请求的统一资源定位符(绝对路径)

System.out.println("URL => " + req.getRequestURL());

// iii.getRemoteHost() 获取客户端的 ip 地址

/**

* 在 IDEA 中,使用 localhost 访问时,得到的客户端 ip 地址是 ===>>> 127.0.0.1

* 在 IDEA 中,使用 127.0.0.1 访问时,得到的客户端 ip 地址是 ===>>> 127.0.0.1

* 在 IDEA 中,使用 真实 ip 访问时,得到的客户端 ip 地址是 ===>>> 真实的客户端 ip 地址

*/

System.out.println("客户端 ip 地址 => " + req.getRemoteHost());

// iv.getHeader() 获取请求头

System.out.println("请求头 User-Agent ==>> " + req.getHeader("User-Agent"));

// vii.getMethod() 获取请求的方式 GET 或 POST

System.out.println( "请求的方式 ==>> " + req.getMethod() );

}

}

c)如何获取请求参数

表单:

用户名:

密码:

兴趣爱好:C++

Java

JavaScript

Java 代码:

public class ParameterServlet extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,

IOException{

// 获取请求参数

String username = req.getParameter("username");

String password = req.getParameter("password");

String[] hobby = req.getParameterValues("hobby");

System.out.println("用户名:" + username);

System.out.println("密码:" + password);

System.out.println("兴趣爱好:" + Arrays.asList(hobby));

}

}

doGet 请求的中文乱码解决:

// 获取请求参数

String username = req.getParameter("username");

//1 先以 iso8859-1 进行编码

//2 再以 utf-8 进行解码

username = new String(username.getBytes("iso-8859-1"), "UTF-8");

d)POST 请求的中文乱码解决

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,

IOException{

// 设置请求体的字符集为 UTF-8,从而解决 post 请求的中文乱码问题

req.setCharacterEncoding("UTF-8");

System.out.println("-------------doPost------------");

// 获取请求参数

String username = req.getParameter("username");

String password = req.getParameter("password");

String[] hobby = req.getParameterValues("hobby");

System.out.println("用户名:" + username);

System.out.println("密码:" + password);

System.out.println("兴趣爱好:" + Arrays.asList(hobby));

}

e)请求的转发

什么是请求的转发?

请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。

ee92e7ae568b21c772955e7cfabcc4e5.png

Servlet1 代码:

public class Servlet1 extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,

IOException{

// 获取请求的参数(办事的材料)查看

String username = req.getParameter("username");

System.out.println("在 Servlet1(柜台 1)中查看参数(材料):" + username);

// 给材料 盖一个章,并传递到 Servlet2(柜台 2)去查看

req.setAttribute("key1","柜台 1 的章");

// 问路:Servlet2(柜台 2)怎么走

/**

* 请求转发必须要以斜杠打头,/ 斜杠表示地址为:http://ip:port/工程名/ , 映射到 IDEA 代码的 web 目录

*

*/

RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");

// RequestDispatcher requestDispatcher = req.getRequestDispatcher("http://www.baidu.com");

// 走向 Sevlet2(柜台 2)

requestDispatcher.forward(req,resp);

}

}

Servlet2 代码:

public class Servlet2 extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,

IOException{

// 获取请求的参数(办事的材料)查看

String username = req.getParameter("username");

System.out.println("在 Servlet2(柜台 2)中查看参数(材料):" + username);

// 查看 柜台 1 是否有盖章

Object key1 = req.getAttribute("key1");

System.out.println("柜台 1 是否有章:" + key1);

// 处理自己的业务

System.out.println("Servlet2 处理自己的业务 ");

}

}

f) base 标签的作用

08be8b065a2ff23c4024f4f96249c390.png

Title

这是 a 下的 b 下的 c.html 页面

跳回首页

g)Web 中的相对路径和绝对路径

在 javaWeb 中,路径分为相对路径和绝对路径两种:

相对路径是:

[.]表示当前路径,[..]表示上一级目录,[资源名]表示当前路径/资源名

绝对路径:

http://ip:port/工程路径/资源路径

实际开发中,路径使用绝对路径,而不简单的使用相对路径。

1、绝对路径。2、base+相对路径。

h)web 中 / 斜杠的不同意义

在 web 中 / 斜杠 是一种绝对路径。

/ 斜杠 如果被浏览器解析,得到的地址是:http://ip:port/

例如:斜杠

/ 斜杠 如果被服务器解析,得到的地址是:http://ip:port/工程路径

/servlet1

servletContext.getRealPath(“/”);

request.getRequestDispatcher(“/”);

特殊情况: response.sendRediect(“/”); 把斜杠发送给浏览器解析。得到 http://ip:port/

2.HttpServletResponse 类

a)HttpServletResponse 类的作用

HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个 Response 对象传 递给 Servlet 程序去使用。HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息, 我们如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse 对象来进行设置.

b)两个输出流的说明。

字节流:getOutputStream();  常用于下载(传递二进制数据)

字符流:getWriter();   常用于回传字符串(常用)

两个流同时只能使用一个。是用了字节流,就不能在使用字符流。反之亦然,否则就会报错。

edd51b81439aeea65bdccfddea8c476e.png

c)如何往客户端回传数据

要求 : 往客户端回传 字符串 数据。

public class ResponseIOServlet extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,

IOException{

// 要求 : 往客户端回传 字符串 数据。

PrintWriter writer = resp.getWriter();

writer.write("response's content!!!");

}

}

d)响应的乱码解决

解决响应中文乱码方案一(不推荐使用):

// 设置服务器字符集为 UTF-8

resp.setCharacterEncoding("UTF-8");

// 通过响应头,设置浏览器也使用 UTF-8 字符集

resp.setHeader("Content-Type", "text/html; charset=UTF-8");

解决响应中文乱码方案二(推荐):

// 它会同时设置服务器和客户端都使用 UTF-8 字符集,还设置了响应头

// 此方法一定要在获取流对象之前调用才有效

resp.setContentType("text/html; charset=UTF-8");

e)请求重定向

请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说。我给你一些地址。你去新地址访问。叫请求 重定向(因为之前的地址可能已经被废弃)。

55ab76b40e9c7db19863a2ac3e11948c.png

请求重定向的第一种方案:

// 设置响应状态码 302 ,表示重定向,(已搬迁)

resp.setStatus(302);

// 设置响应头,说明 新的地址在哪里

resp.setHeader("Location", "http://localhost:8080");

请求重定向的第二种方案(推荐使用):

resp.sendRedirect("http://localhost:8080");

文章来源: blog.csdn.net,作者:轻狂书生FS,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/LookForDream_/article/details/105504284

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

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

相关文章

svm算法原理_机器学习——分类算法(1)

一、 K近邻KNN算法的基本思想就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那…

svn复制出来的java_从svn下载的项目(或从别处拷贝来的)报错的可能情况以及解决经验...

1、sdk版本不符合。举个栗子:如果svn上的项目是用sdk10的,但是你电脑上最低sdk是14的,那么这时候就会报错。解决办法:a、鼠标点击项目,b、快捷键“altenter”,c、左侧点击“Android”,右侧选中一…

spring揭秘_被问到了! Spring 和 Spring Boot 之间到底有啥区别?

相信很多小伙伴和我一样,常用Spring 和Spring Boot 但是就是没有研究二者之间到底有什么区别?今天就来大揭秘 ↓概述对于 Spring和 SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习 SpringBoot的我当时也是一头雾水&am…

sql 删除最低分数_软件测试从业者:必备SQL语句21天打卡,前10天

一、价值:1. 根据这些年的经验,帮软件测试从业者精选出:1)日常工作中,需要用到的SQL语句;2)软测面试中,笔试 / 面试 ,需要用到的 SQL问题 & 答案 ;2. SQL这种硬技能 &#xff0c…

php两个手机号正则表达式_php 手机号码验证正则表达式

php 手机号码验证正则表达式比较简洁的代码一:$str ;$isMatched preg_match(/^0?(13|14|15|17|18)[0-9]{9}$/, $str, $matches);var_dump($isMatched, $matches);代码二//正则表达式$tel "15558530459"; //作者的手机号码,如果有疑问可以电话联系我,或…

ssms没有弹出服务器验证_使用SSMS扫描和查找SQL Server数据库的潜在安全漏洞

SQL Server Management Studio 17.4或更高版本的SSMS中提供了SQL Server漏洞侦测(VA)功能,此功能允许SQL Server扫描您的数据库以查找潜在的安全漏洞,并且可以针对SQL Server 2012或更高版本运行。如果您还没有使用SSMS上的较新版本,请不要担…

驱动api_消费者驱动契约已死?

吐槽文一篇。契约的一些问题在实践前后端分离的这些年来,已经诞生了一些技术与工具让前后端进行沟通:契约的 Mock 服务(Mock Server)。用于模拟一个服务器,为特定的接口返回特定的值。契约测试。对前后端协定的 API 进…

php表单提交邮箱_最全实现dede订单表单提交发送到指定邮箱(附前台设置)

打造销售型网站的订单系统。不是所有销售都有权限登陆网站后台查看订单,特别是外地出差时,用户下了订单后不能及时服务用户,可能会造成订单丢失。但dedecms默认的订单提交后只能在后台看到的,每次都要登陆到后台去查看很麻烦。以下…

php ckeditor 配置,Laravel5.6框架使用CKEditor5相关配置详解

本文实例讲述了Laravel5.6框架使用CKEditor5相关配置。分享给大家供大家参考,具体如下:Laravel 相关配置文件的上传与存储参考文档:创建符号链接php artisan storage:linkproject/public/storage -> project/storage/app/public修改配置文…

udp怎么保证不丢包_在 Flink 算子中使用多线程如何保证不丢数据?

分析痛点笔者线上有一个 Flink 任务消费 Kafka 数据,将数据转换后,在 Flink 的 Sink 算子内部调用第三方 api 将数据上报到第三方的数据分析平台。这里使用批量同步 api,即:每 50 条数据请求一次第三方接口,可以通过批…

堆排序时间复杂度_图解堆结构、堆排序及堆的应用

前言这次我们介绍另一种时间复杂度为 O(nlogn) 的选择类排序方法叫做堆排序。我将从以下几个方面介绍:堆的结构堆排序优化的堆排序原地堆排序堆的应用堆的结构什么是堆?我给出了百度的定义,如下:堆(Heap)是计算机科学中一类特殊的…

恶意软件分析沙箱在网络安全策略中处于什么位置?

恶意软件分析沙箱提供了一种全面的恶意软件分析方法,包括静态和动态技术。这种全面的评估可以更全面地了解恶意软件的功能和潜在影响。然而,许多组织在确定在其安全基础设施中实施沙箱的最有效方法方面面临挑战。让我们看一下可以有效利用沙盒解决方案的…

php websocket 帧封装,swoole websocket封装类和调用

上代码 ws.php/*** ws 优化 基础类库* User: singwa* Date: 18/3/2* Time: 上午12:34*/class Ws {CONST HOST "0.0.0.0";CONST PORT 9512;public $ws null;public function __construct() {$this->ws new swoole_websocket_server("0.0.0.0", 9512)…

夸克浏览器怎么安装脚本_广告看烦了?别砸手机!这五款浏览器能拯救你

哈喽大家好,欢迎来到黑马公社。随着各种良莠不齐的内容开始泛滥,黑马发现自己很难通过网络第一时间找到自己想要的内容。在电脑上,黑马为自己的每个浏览器都安装了不下三个广告屏蔽插件,而在手机上,很难。先不说手机浏…

php 今天 明天 后天 显示10天,【微信小程序】实现含有今天,明天,后天的日期组件...

封面图.JPG前言做过微信小程序的前端er都知道,小程序有个日期组件,叫picker,但是,需求方要求日期和时间都要显示的,用picker组件的话,那就用到两个picker,date和time,就是说要让用户…

php数组实例,php常用数组函数实例小结

本文实例总结了php常用数组函数。分享给大家供大家参考,具体如下:1. array array_merge(array $array1 [, array $array2 [, $array]])函数功能:将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回结果的…

手机连接投影机的步骤_投影机安装过程详解

投影机安装过程详解一 投影机的安装方式1、桌面摆放桌面投影虽然看起来不是很美观,但可以省去那些繁琐的步骤,只需要准备一张桌子,还可以购买一些专门用来摆放投影机的可移动小车架,把投影机往上一放,连接上线缆就可以…

php memcached close,PHP连接Memcached安装及数据库操作

memcached介绍Memcached是一套开源的高性能分布式内存对象缓存系统,它将所有的数据都存储在内存中,因为在内存中会统一维护一张巨大的Hash表,所以支持任意存储类型的数据。很多网站通过使用 Memcached提高网站的访问速度,尤其是对于大型的需要频繁访问数据的网站。Memcached是典…

坏道修复是不是硬盘东西全部都没有了_硬盘有坏道就不能用了吗?别再吃哑巴亏了,今天跟大家再说一次...

硬盘是电脑的存储硬件,是电脑中核心的硬件之一,目前市场上主要使用的是固态硬盘与机械硬盘两种,固态硬盘的读写速度较快,容量小,价格贵,机械硬盘读写速度慢,容量大价格便宜,现在的电…

html5+php调用android手机图片,html5+exif.js+canvas+php实现手机上传图片,图片损坏无法打开...

上传图片,图片损坏无法打开,图片路径也是正确的,function selectFileImage(fileObj) {var file fileObj.files[0];//图片方向角 added by lzkvar Orientation null;if (file) {console.log("正在上传,请稍后...");var rFilter /…