我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用HttpServletRequest对象的作用有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用HttpServletRequest对象的作用有哪些

这篇文章将为大家详细讲解有关使用HttpServletRequest对象的作用有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

  使用HttpServletRequest可以防止盗链行为,什么是盗链行为,比如说在一个别的网站上超链接,指向我们的网页中的某个数据,这样从他的网页上就可以直接进入到我的某个页面,无需从我的指定路口进入:

例如在一个简单的1.html文件中加入了我的【myservlet】web应用下的某个Servlet访问的超链接:

使用HttpServletRequest对象的作用有哪些

如果我的Servlet中代码仅仅为为访问输出数据,例如:

response.setContentType("text/html;charset=utf-8");String data ="银魂真是一部好动漫";response.getWriter().write(data);

那么点击这个超链接肯定会访问到这个Servlet:

使用HttpServletRequest对象的作用有哪些

那么我们如果不想被比人直接通过地址访问或者超链接访问怎么办呢:

记得学习HTTP协议中的“referer”请求头吗,这个请求头是告诉服务器该请求是从哪个URL发来的,那么我们就可以根据这个URL来判断是否是我们允许的请求地址来控制服务器是否将响应发送回去。

代码如下:

String reqUrl = request.getHeader("referer"); if(reqUrl==null || !reqUrl.startsWith("http://localhost:8080/myservlet/index.jsp")){ response.sendRedirect("/myservlet/index.jsp"); return ; }  response.setContentType("text/html;charset=utf-8"); String data ="银魂真是一部好动漫"; response.getWriter().write(data);

在if判断中判断是否为空是防止直接将该web资源以输入URL地址直接访问,而另一个判断是防止访问该web资源不是从指定的地方来访问进来。

通过该代码,如果我们继续在1.html页面中点击超链接,则会自动跳转到我们设置好的index.jsp中:

使用HttpServletRequest对象的作用有哪些

而如果我们直接在浏览器中访问Servlet也是会跳到这个页面的。

只有在index.jsp中点击我们设置好的超链接,才能访问到:

使用HttpServletRequest对象的作用有哪些

接下来,我们来讨论的使用HttpServletRequest响应对象来获取表单数据,这是非常重要的知识点,表单提交的数据根据提交方式的不同会放置在不同位置,例如采用POST方式则会将这些数据放置在HTTP请求数据实体中,无论采用哪种方式,都是可以用响应对象的getParameter(String)等等方式获取,这点在《Servlet的学习(十)》中已经介绍。

现在,我们在需要新创建一个HTML页面编写我们的表单代码,和一个Servlet作为服务器端接收表单提交的数据,将Servlet命名为ServletRequest,而表单的传送服务器和选择HTTP方式如下:

<form action="/myservlet/servlet/ServletRequest" method="post">

先来看

<input type="text" name="user" /> <input type="password" name="password" />

这两种常见的输入字符情况。

当然还需要在表单中提供具有提交功能的标签才能提交,我们选择

<input type="submit" value="提交" >

这样的提交方式,效果如下:

使用HttpServletRequest对象的作用有哪些

在表单中这两个都可以直接通过getParameter(String)方法获取用户输入的数据,代码如下:

String username = request.getParameter("user");String password = request.getParameter("password");

只要我们在用户名和密码中输入数据,再点击提交,就可以将用户名和密码中的数据传递给服务器:

使用HttpServletRequest对象的作用有哪些

同时,由原来的表单的HTML页面会自动跳转到该Servlet的页面上。

对于text和password两种表单方式的健壮性判断:

依据:

如果表单中用户名和密码不填,那么直接提交后会是传递给服务器空字符串。

如果不是在表单,而是知道了平常表单提交后会跳转的Servlet页面,那么直接输入该Servlet地址则是传递Null给服务器

因此必须加入健壮性语句:

String username = request.getParameter("user");if(username!=null && !username.trim().equals("")) {System.out.println("user:"+username);}

password部分代码同理。

接下来是单选按钮,比如性别选择:

性别 <input type="radio" name="gender" value="male"/>男<input type="radio" name="gender" value="female"/>女

使用HttpServletRequest对象的作用有哪些

只有<input type=”radio”>标签中的”name”属性一样,才能具有单选的功能,同时”name”属性也是在Servlet中获取用户单选数据的重要参数,代码:

String gender = request.getParameter("gender");

如果单选没有选择任何选项,则提交会返回null,所以需加入健壮性语句:

String gender = request.getParameter("gender");if(gender != null) {System.out.println(gender);}

接下来是下拉列表,下拉列表可以是作为选择城市,如:

城市<select name="city"> <option value="none">--选择城市--</option> <option value="beijing">北京</option> <option value="shanghai">上海</option> <option value="hangzhou">杭州</option> <option value="amoy">厦门</option></select>

由<select>标签中的”name”属性作为Servlet中服务器获取客户端发来的下来列表数据的重要参数,代码如下:

String city = request.getParameter("city");System.out.println(city);

由于下拉列表会默认选择其第一个<option>标签的内容,所有即使我们没有进行任何选择,也是会传递值得,这里可以无需健壮性判断。

接下来是复选框,复选框可以是一些所学技能,或者兴趣爱好,如:

<input type="checkbox" name="hobby" value="sing">唱歌<input type="checkbox" name="hobby" value="surf">冲浪 <input type="checkbox" name="hobby" value="swim">游泳

由<input type=”checkbox”>标签中的name属性决定了这些复选框是否属于同一个复选框组,也是同时也是作为Servlet中获取表单复选框的数据的重要参数,由于多个参数使用同一个参数名,所以必须使用getParameterValues(String)方法来获取所有的被勾选的复选框,代码如下(包含健壮性):

String[] hobbies = request.getParameterValues("hobby");for(int i=0;hobbies!=null&&i<hobbies.length;i++) {System.out.println(hobbies[i]); }

如果没有勾选任何一个复选框,则不会向服务器Servlet传送任何数据。所以如果直接接收可能会发生空指针异常,必须判断是否接收到的字符串数组有数据(hobbies!=null)。

重要:

现在,我们再重新回到<input type="text" name="user" /> 上,如果我们输入的是中文数据,点击提交之后会是怎样?

使用HttpServletRequest对象的作用有哪些

在控制台看到的结果:

使用HttpServletRequest对象的作用有哪些

结果就是出现了中文乱码问题。这是浏览器在发送时通常要看当时的编码,如:

使用HttpServletRequest对象的作用有哪些

或者:

使用HttpServletRequest对象的作用有哪些

但是!!

在Servlet收到request请求对象发来的数据时,通过getParameter方法是默认查询“ISO-8859-1”码表的,所以造成了编码不一致!

解决方式也很简单,只要在Servlet中将获取的request对象选择正确的解码方式即可,只要在代码前添加一句:

request.setCharacterEncoding("UTF-8");

就可以获取表单中正确的中文数据了:

使用HttpServletRequest对象的作用有哪些

注意,对于响应对象的setCharacterEncoding方法只对HTTP协议的POST方式有效,对GET方式无效。

如果我们将表单提交方式改为GET,那么提交表单中有中文数据的话依然在Servlet中会出现乱码。

如果想使GET方式也不会出现中文乱码,并没有好的捷径方法。先要通过getParameter获取请求数据(这时在Servlet中以ISO8859码表进行解码),然后再通过ISO8859进行编码成字节数组,最后通过创建字符串对象的方式选择UTF-8解码表解出最开始客户端编码的数据。

代码如下:

String userTemp = request.getParameter("user");String username = new String(userTemp.getBytes("ISO8859-1"),"utf-8");

即可。

当然这种方式对POST方式也是有效的。

另外一种对GET方式是修改Tomcat中的配置文件(这种方式只适合GET方式,用POST方式还是会乱码)。通过Tomcat服务器的首页,选择“Configuration”查看配置文档,选择“Connector”下的“HTTP”:

使用HttpServletRequest对象的作用有哪些

在这个文档中有一个URIEncoding属性,是指可以在server.xml文件中配置这个属性,如果没有这个属性,则Tomcat默认采用ISO8859-1编码:

使用HttpServletRequest对象的作用有哪些

通过在server.xml文件中的<connector>标签中添加设置即可:

使用HttpServletRequest对象的作用有哪些

由于是在Tomcat中修改server.xml文件,所以服务器需要重启。

经过这种方式,就无需在代码中再设置任何编码表,所有在服务器端都会采用“URIEncoding”属性设置的码表。但这个方式不建议使用。

同样在“Configuration”的配置文档中的“Connector”下的“HTTP”说明文档中,有useBodyEncodingForURI这么个属性:

使用HttpServletRequest对象的作用有哪些

当在server.xml文件中的<connector>标签中添加设置了这个属性,还未完成:

使用HttpServletRequest对象的作用有哪些

还必须在Servlet中同时调用了响应对象的setCharacterEncoding方法,就能再次使GET方式不会出现乱码:

request.setCharacterEncoding("utf-8");String username = request.getParameter("user");

同样,这种配置server.xml文件的方式依然不建议采用。

最后说明一点,在HTML编程中,我们也可以使用超链接来提交数据,当然这样的方式属于HTTP中的GET方式,原理类似于在浏览器地址URL后手动添加参数,比如如下代码:

<a href="/myservlet/servlet/ServletRequest?user=银魂" >用户名为中文</a>

跟随的参数为中文!!

两种解决方式:

在这个超链接上必须将这个中文进行URL编码,必须在JSP中进行编写(在后面的篇章中会介绍如何使用);

或者使用上述GET处理中文乱码的第一种方式,进行双次编码:

String userTemp = request.getParameter("user");String username = new String(userTemp.getBytes("ISO8859-1"),"utf-8");

关于使用HttpServletRequest对象的作用有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用HttpServletRequest对象的作用有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用HttpServletRequest对象的作用有哪些

这篇文章将为大家详细讲解有关使用HttpServletRequest对象的作用有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。  使用HttpServletRequest可以防止盗链行为
2023-05-31

Response对象的作用有哪些

Response对象的作用主要有以下几个:1. 封装HTTP响应:Response对象负责封装HTTP响应的各种信息,包括状态码、头部信息、响应体等。2. 提供访问响应数据的方法:Response对象提供了一系列方法,用于访问响应数据,例如
2023-09-06

如何正确的使用HttpServletRequest对象方法

这篇文章将为大家详细讲解有关如何正确的使用HttpServletRequest对象方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。深入体验JavaWeb开发内幕——关于HttpServle
2023-05-31

jsp作用域对象有哪些

在JSP中,有以下几种作用域对象:1. Page作用域(page scope):Page作用域是最小的作用域,它只在当前JSP页面中有效。在JSP页面中声明的变量,默认就是Page作用域。2. Request作用域(request scop
2023-09-22

Java String对象的使用方法有哪些

这篇文章主要讲解了“Java String对象的使用方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java String对象的使用方法有哪些”吧!String 对象的实现Strin
2023-06-02

java对象的引用有哪些

本篇内容介绍了“java对象的引用有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!java对象的引用reference分为有强引用,软引
2023-06-17

cad对象选择过滤器有哪些作用

小编给大家分享一下cad对象选择过滤器有哪些作用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!cad对象选择过滤器的作用:1、以对象的类型、图层、颜色等特性作为条件,过滤选择符合设定条件的对象;2、可以根据所设定的值,比如
2023-06-14

Java中page对象使用方法有哪些

在Java中,Page对象通常用于表示Web页面或应用程序中的单个页面。Page对象可以通过以下方法来使用:1. 获取页面元素:使用Page对象可以获取页面中的各种元素,例如文本框、按钮、下拉框等等。可以使用Page对象提供的方法,例如fi
2023-06-14

python中面向对象的使用限制有哪些

这篇文章主要介绍python中面向对象的使用限制有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网站均为Pytho
2023-06-14

redis操作对象的方式有哪些

Redis操作对象的方式有以下几种:1. RedisClient对象:通过RedisClient对象可以直接连接到Redis服务器,并执行各种操作。通过RedisClient对象可以创建其他操作对象。2. RedisCluster对象:用于
2023-08-30

php抽象类的作用有哪些

PHP抽象类的作用包括:1. 定义通用的属性和方法:抽象类可以定义一些通用的属性和方法,供其子类继承和实现。这样可以避免在多个类中重复定义相同的属性和方法。2. 强制子类实现特定方法:抽象类可以定义抽象方法,这些方法必须在其子类中被实现。这
2023-08-09

C++对象与继承使用的问题有哪些

本篇内容主要讲解“C++对象与继承使用的问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++对象与继承使用的问题有哪些”吧!定义抽象类class Person {public:virt
2023-06-22

session对象的应用场景有哪些

Session对象在Web开发中的应用场景有以下几种:1. 用户认证和授权:Session对象可以用来存储用户的认证信息,如用户名、密码等。在用户登录后,可以将认证信息存储在Session中,以便在整个会话期间进行身份验证和授权操作。2.
2023-09-27

JavaScript基本对象有哪些及怎么使用

这篇“JavaScript基本对象有哪些及怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript基本对象
2023-06-27

ADO.NET的对象有哪些

这篇文章主要讲解了“ADO.NET的对象有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ADO.NET的对象有哪些”吧!ADO.NET的对象五个主要的组件,分别是Connection对象
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录