JSP 的 request 内置对象

news2024/9/29 4:16:24

文章目录

  • 前言
  • 一、request 内置对象是什么?
  • 二、request 对象
    • 1.访问请求参数
    • 2.在作用域中管理属性
    • 3.获取 cookie
    • 4.解决中文乱码
    • 5.获取客户端信息
    • 6.显示国际化信息
  • 总结

前言

        我们在学习 JavaScript 的时候有了解过常用对象,这些对象可以在这门脚本语言中全局直接调用。相同的,该篇所讲的 JSP 内置对象,就是在 JSP 中内置的一些可以直接调用的对象,无需像 java 一样实例化对象,就可以实现许多功能。


一、request 内置对象是什么?

        JSP(JavaServer Pages)内置对象是在JSP页面中可以直接调用的特殊对象,无需进行额外的声明或初始化即可直接使用,它们能实现许多有用的功能。

二、request 对象

        request 对象封装了由客户端生成的 HTTP 请求的所有细节,主要包括 HTTP 头信息、系统信息的请求方式和请求参数。通过调用 request 对象的相关方法就可以处理客户端浏览器提交的 HTTP 请求中的各种信息。 

1.访问请求参数

        通过超链接<a>发送请求时,可以为该请求传递参数,需要在超链接<a>后面加上" ? "来实现(问号是英文半角的)。访问请求参数的作用是在客户端和服务器之间传递数据,以便于服务器获取、处理和根据需要进行相应的操作。

        实操:创建index.jsp和test.jsp页面,index.jsp 页面创建跳转到 test.jsp 页面的链接,同时为该链接创建传递值 id,数值为 101。

        index.jsp 页面代码: 

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<!--以上是指令标识-->

<html>
<head>
<meta http-equiv="Content-Type" Content="text/html;charset=UTF-8">
<title>index.jsp</title>
</head>
<body>
<center>
    <a href="test.jsp?id=101">test.jsp</a>    <!--在超链接标签中添加请求参数-->
</center>
</body>
</html>

        test.jsp 页面代码:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<!--以上是指令标识-->

<% String id=request.getParameter("id");%>    <!--通过request调用方法,获取访问参数-->

<html>
<head>
<meta http-equiv="Content-Type" Content="text/html;charset=UTF-8">
<title>index.jsp</title>
</head>
<body>
<center>
    <%="来自请求跳转的此网站 ID 为:"+id%>
</center>
</body>
</html>

        运行结果:

        如果要同时指定多个请求参数时,各参数间使用与符号“&”进行连接。例如:

<a href="test.jsp?id=101&cookie=">

        获取数据的页面各写对应行数的 java 片段来获取请求参数。例如:

<%
    String id=request.getParameter("id");
    String cookie=request.getParameter("cookie");
    String database=request.getParameter("database");
%>

        如上示例,使用 request 的 getParameter() 方法获取传递的参数值。如果要获取的参数是超链接未定义的参数名,比如上方举例的 database,那么返回 null值。定义了参数名,未赋值,返回字符串""。

2.在作用域中管理属性

        既然超链接标记可以用来在页面中传递数据,那么就没有更便捷的东西来让我们管理和处理这些数据?这时就要用到 request 对象的 setAttribute() 方法。将数据保存到 request 范围内的变量。用于数据保存到指定对象的方法,语法格式如下:

request.setAttribute(String name,Object object);

参数说明:

        name:表示变量名,数据类型为 String。在之后的页面中调取保存的 object 数据,都通过该变量名来调取。

        object:指定在 request 对象范围内需要传递的数据,类型为 Object。

        用于调取出数据的方法,语法格式如下:

request.getAttribute(String name);

参数说明:

        name:表示变量名,该变量名在 request 对象的范围内,并且该变量已经被 setAttribute()保存过了。

        实操:创建两个 JSP 文件,index.jsp使用setAttribute()方法保存数据;test.jsp使用getAttribute()方法获取数据。

        index.jsp代码:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<!--以上是指令标识-->

<html>
<head>
<meta http-equiv="Content-Type" Content="text/html;charset=UTF-8">
<title>index.jsp</title>
</head>
<body>
    <%
        int PV=46378;
        request.setAttribute("index_PV",PV);
        <!--保存数据-->
    %>
<center>
    <jsp:forward page="test.jsp"/>
    <!--跳转页面-->
</center>
</body>
</html>

        test.jsp代码:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<!--以上是指令标识-->

<html>
<head>
<meta http-equiv="Content-Type" Content="text/html;charset=UTF-8">
<title>test.jsp</title>
</head>
<body>
<center>
  <%
    Object indexPV = request.getAttribute("index_PV");
    String str = (indexPV != null) ? indexPV.toString() : "No data available";
  %>
    <%=str%>
</center>
</body>
</html>

        getAttribute() 方法返回值为 Object 类型,在上方代码调用 toString() 方法将其数据类型转化为 String 进行输出。 

        运行结果:

         如上图运行所示,index.jsp页面立马跳转到了test.jsp页面,并且将index.jsp页面中保存的数据输出了出来。

3.获取 cookie

        cookie 是小段文本信息,在网络服务器上生成,并发送给浏览器。cookie 可以用来标识用户身份,记录用户名和密码,跟踪重复用户等。我们浏览器登录上账户后,可以自动访问网站无需登录,就用到了 cookie。cookie 以 key/value 的形式保存到客户机的指定目录中。以下是 cookie 的部分常用方法:

cookie 的部分常用方法
方法功能描述
getCookies()用于获取到所有 cookie 对象的集合
getName()用于获取到指定名称的 cookie
getValue()用于获取到 cookie 对象的值

        在使用 cookie() 时,应该保证客户机上允许使用 cookie,可以我们的浏览器中的"隐私"进行设置。将 cookie 对象发送到客户端,使用 response 对象的 addCookie() 方法。

        实操:创建两个 JSP 文件,在index.jsp文件中创建账户成功后,该文件会创建一个带有用户信息的Cookie,并发送给浏览器,浏览器把Cookie保存到本地。test.jsp文件用于在服务器端保存 cookie。当再次打开index.jsp文件时,index.jsp遍历服务器端保存的所有Cookie,与浏览器中保存到本地的cookie进行校验来判断是否登录账户。

        index.jsp 代码:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<%@ page import="java.net.URLDecoder" %>
<%@ page import="javax.servlet.http.Cookie.*" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>test.jsp</title>
</head>
<body>
  <%
    request.setCharacterEncoding("UTF-8"); // 设置请求字符编码
    Cookie[] cookies = request.getCookies();
    String user = "";
    if (cookies != null) {
        for (int i = 0; i < cookies.length; i++) {
            if (cookies[i].getName().equals("mrCookie")) { // 确保 Cookie 名称一致
                user = URLDecoder.decode(cookies[i].getValue().split("#")[0], "UTF-8"); // 获取用户名
            }
        }
    }
    if ("".equals(user)) {
  %>
  <center>
        欢迎登录橘喵贴吧,请登录账户!
        <form action="test.jsp" method="post">
            请输入账户名:<input name="user" type="text" value="">
            <input type="submit" value="确定">
        </form>
  </center>
  <%
        } else {
  %>
  <center>
            欢迎回到橘猫贴吧,<b><%= user %></b>,欢迎您!<br>

  </center>
  <%
        }
  %>
</body>
</html>

        test.jsp 代码:

<%-- setCookie.jsp --%>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="javax.servlet.http.Cookie.*" %>
<%
    request.setCharacterEncoding("GB18030"); // 设置请求字符编码
    String user = request.getParameter("user"); // 直接获取用户输入
    String encodedUser = URLEncoder.encode(user, "UTF-8").replace(" ", "+"); // URL编码并替换空格字符
    Cookie cookie = new Cookie("mrCookie", encodedUser); // 创建并实例化 Cookie 对象
    cookie.setMaxAge(60 * 60 * 24 * 30); // 设置 Cookie 的有效期为 30 天
    response.addCookie(cookie); // 添加 Cookie
    response.sendRedirect("test.jsp"); // 使用服务器端重定向
%>

        运行结果:

         在 cookie 中保存信息,保存中文时,需要调用 java.net.URLEncoder 类的 encode()方法将要保存到 cookie 中的信息进行编码;在读取 cookie 的内容时,还需要使用 java.net.URLDecoder类的decode()方法进行解码。这样就能成功向 cookie 写入中文信息,避免乱码。

4.解决中文乱码

        请求参数的文字编码格式方式与页面中的格式不一致会导致中文乱码。如果所有的 requerst 请求的文字编码格式都是 ISO-8859-1,而此页面的编码格式是UTF-8。面对这种情况,想要解决中文乱码的问题,只需要将获得到的数据通过 String 的构造方法使用指定的编码类型重新构造一个 String 对象就可以正确显示中文。

<%= new String(request.getParameter("参数").getBytes("ISO-8859-1"),"UTF-8")%>

        如上即可将乱码的传参重构编码格式。

5.获取客户端信息

        request 对象可以获取到客户端的许多信息,例如 HTTP 报头信息、客户信息提交方式、客户机主机IP地址、端口号等。request 对象可以获取的信息如下表所示:

request 获取客户端信息的常用方法
方法功能描述
getHeader(String name)获得 HTTP 协议定义的文件头信息
getHeaders(String name)返回所有 request Header 的所有值,结果为一个枚举类型的实例
getHeadersNames()返回所有 request Header 的名字,结果为一个枚举类型的实例
getMethod()获得客户端向服务器端传送数据的方法,如 get、post、trace等
getProtocol()获得客户端向服务器端传送数据所依据的协议名称
getRequestURI()获得发出请求字符串的客户端地址,不包括请求的参数
getRequestURL()获得发出请求字符串的客户端地址,包括请求的参数
getRemoteAddr()获得客户端的IP地址
getRemoteHost()获得客户端的主机名
getSeverName()获取服务器的名字
getServletPath()获取客户端所请求的脚本文件的文件路径
getServerPort()获取服务器的端口号

        实操:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Index Page</title>
</head>
<body>
    <br>客户机提交信息的方式:<%=request.getMethod()%>
    <br>使用的协议:<%=request.getProtocol()%>
    <br>获取发出请求字符串的客户端地址:<%=request.getRequestURL()%>
    <br>获取提交数据的客户端IP地址:<%=request.getRemoteAddr()%>
    <br>获取服务器端口号:<%=request.getServerPort()%>
    <br>获取服务器的名称:<%=request.getServerName()%>
    <br>获取客户端的主机名:<%=request.getRemoteHost()%>
    <br>获取到客户端所请求的脚本文件的文件路径:<%=request.getServletPath()%>
    <br>获得 HTTP 协议定义的文件头信息 Host 的值:<%=request.getHeader("host")%>
    <br>获得 HTTP 协议定义的文件头信息 User-Agent 的值:<%=request.getHeader("user-agent")%>
    <br>获得 HTTP 协议定义的文件头信息 accept-language 的值:<%=request.getHeader("accept-language")%>
    <br>获得请求文件的绝对路径:<%=application.getRealPath("index.jsp")%>
</body>
</html>

        运行结果:

        由此可见,我们可以通过 request 内置对象获取到服务器和客户机许多信息。

6.显示国际化信息

        浏览器可以通过 accept-language 的 HTTP 报头向 Web 服务器指明用户使用的国家语言。 request 内置对象中的 getLocal() 和 getLocals() 方法允许JSP 开发员获取该信息。获取用户使用的国家语言,需要用到 java.util.Local 包,该包封装各个国家和地区的语言。JSP 开发者可以根据该信息实现网站内容显示为对应用户的国家语言。

        实操代码:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Index Page</title>
</head>
    <%
        java.util.Locale locate=request.getLocale();
        String str="";
        if(locate.equals(java.util.Locale.US)){
            str="Hellow,welcom to access Orange cat post it web!";
        }
        if(locate.equals(java.util.Locale.CHINA)){
            str="你好,欢迎来到橘猫贴吧网站!";
        }
    %>
<body><center>
    <%=str%>
</center></body>
</html>

        运行结果:

        我将自己的浏览器国家语言设置成了US美国

        运行自己的代码显示页面为美国国家语言的欢迎界面:

 

        根据这个 java.util.Local 包 我们就能实现自己网站的国际化了。


总结

        以上就是 JSP 的 request 内置对象的介绍,本文简单介绍了 request 的涉及内容,有补充或者指正的内容,欢迎在评论区中留言。

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

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

相关文章

java项目之作业管理系统设计与实现源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的作业管理系统设计与实现源码。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 作业管理系统…

怎么选择一款适合自己的蓝牙耳机?2024开放式耳机选购指南

在选择开放式耳机时&#xff0c;可以从以下几个要点着手&#xff1a; 佩戴舒适程度&#xff1a; 耳挂的设计&#xff1a;好的耳挂设计能让耳机稳稳地戴在耳朵上&#xff0c;且不会给耳部造成过多压迫。比如有些耳机配备了可调节的耳挂&#xff0c;能依照不同人的耳型和佩戴习…

WordPress 要求插件开发人员进行双因素身份验证

全球超过40%的网站由 WordPress 提供支持&#xff0c;其庞大的插件和主题生态系统在全球范围内提供了灵活性和定制性。然而&#xff0c;这种受欢迎程度也使其成为网络攻击的主要目标。 WordPress 将为所有插件和主题开发人员引入强制性双因素身份验证 (2FA)&#xff0c;以应对…

Vue3动态导入后端路由

动态获取文件 // modules就是一个map&#xff0c;文件路径作为key&#xff0c;文件对象作为value const modulesimport.meta.glob(../views/**/*.vue)获取到的modules对象如下&#xff1a; 添加动态路由 import {createRouter, createWebHashHistory} from vue-routerconst m…

Vue项目开发注意事项

事项一&#xff1a;项目代码放在本地怎么运行起来 1、首先确定项目对应的node和npm版本 node下载地址 Index of /dist/https://nodejs.org/dist/ node 与 npm版本对应关系 Node.js — Node.js Releases 2、node卸载的时候&#xff0c;会自动把对应的npm卸载掉 情况1&…

【源码】询比价管理系统,招投标采购管理系统

前言&#xff1a; 随着互联网和数字技术的不断发展&#xff0c;企业采购管理逐渐走向数字化和智能化。数字化采购平台作为企业采购管理的新模式&#xff0c;能够提高采购效率、降低采购成本、优化供应商合作效率&#xff0c;已成为企业实现效益提升的关键手段。源码获取本文末…

vue3 实现文本内容超过N行折叠并显示“...展开”组件

1. 实现效果 组件内文字样式取决与外侧定义 组件大小发生变化时,文本仍可以省略到指定行数 文本不超过时, 无展开,收起按钮 传入文本发生改变后, 组件展示新的文本 2. 代码 文件名TextEllipsis.vue <template><div ref"compRef" class"wq-text-ellip…

新疆交投路桥桥梁公司:向“新”求“质”,积蓄发展新势能

向“新”求“质”谋发展&#xff0c;“发展新质生产力是推动高质量发展的内在要求和重要着力点&#xff0c;必须继续做好创新这篇大文章&#xff0c;推动新质生产力加快发展”。以新质生产力塑造国企新的核心竞争力成为实现高质量发展的关键内容&#xff0c;既具有重大理论意义…

在传销案件中数据库取证的分步指南

金字塔计划的特点是分层结构&#xff0c;主要由招募新成员的机制驱动。取证部门调查这些方案时&#xff0c;往往依靠数据库记录来分析这种结构。这些记录详细描述了上级和下级之间的关系&#xff0c;使调查人员能够描绘出组织的动态。在本文中&#xff0c;我们将探讨如何利用数…

如何用好通义灵码企业知识库问答能力?

通义灵码企业版&#xff1a;通义灵码企业标准版快速入门_智能编码助手_AI编程_智能编码助手通义灵码(Lingma)-阿里云帮助中心 通义灵码提供了基于企业知识库的问答检索增强的能力&#xff0c;在开发者使用通义灵码 IDE 插件时&#xff0c;可以结合企业知识库内上传的文档、文件…

23款奔驰E300立标升级23P智能辅助驾驶案例分享

《23 款奔驰 E300 立标升级 23P 智能辅助驾驶案例》 在汽车科技不断进步的今天&#xff0c;越来越多的车主开始追求更加智能、安全的驾驶体验。今天&#xff0c;我们就为大家带来一款 23 款奔驰 E300 立标升级 23P 智能辅助驾驶的精彩案例。 这辆 23 款奔驰 E300 立标原本就散…

业务调度 -- 线路单板中继模式

OTN网络中&#xff0c;线路板可以设置为中继模式&#xff0c;作为中继提高系统传输距离。当前设备支持“双向中继”与“单向中继”两种模式&#xff0c;不同的线路板支持其中的一种模式。单向中继与双向中继模式下支持“光中继”或“电中继”。 单向中继 VS. 双向中继 单向中…

DTOF(direct Time-of-Flight,直接飞行时间)

一、基本概念 1.1 定义 dToF&#xff0c;即直接飞行时间&#xff08;direct Time-of-Flight&#xff09;&#xff0c;是一种通过测量光脉冲发射出去并反射回来的时间差来直接计算距离的技术。 TOF应用场景非常多&#xff0c;电子消费品领域有人脸识别&#xff0c;照相机辅助对…

程序员数学 | 数学归纳法

目录 一、数学归纳法是什么二、使用编程来模拟数学归纳法的证明 人类做重复性的劳动没有效率&#xff0c;而计算机却能更快更准确的完成重复性劳动。所以以重复为特点的迭代法在编程中有着⼴泛的应⽤。实际项目中是否可以用不断更新变量值或者缩小搜索的区间范围的方法&#xf…

AniJS:无需编程的动画解决方案

前言 在网页设计中&#xff0c;动画效果能够显著提升用户体验&#xff0c;但传统的动画实现往往需要复杂的 JavaScript 代码。 AniJS 库的出现&#xff0c;为设计师和开发者带来了一种全新的动画实现方式&#xff0c;它通过简单的 HTML 属性就能创建出令人惊叹的动画效果。 介…

HTML5+JavaScript绘制闪烁的网格错觉

HTML5JavaScript绘制闪烁的网格错觉 闪烁的网格错觉&#xff08;scintillating grid illusion&#xff09;是一种视觉错觉&#xff0c;通过简单的黑白方格网格和少量的精心设计&#xff0c;能够使人眼前出现动态变化的效果。 闪烁的栅格错觉&#xff0c;是一种经典的视觉错觉…

柯桥小语种学习英语口语培训|被点名时,中文喊“到”,那英文喊什么?

"今日体育课&#xff0c;张老师准时点名。阳光下&#xff0c;同学们精神抖擞&#xff0c;一一应答到。课堂氛围活跃&#xff0c;准备充分&#xff0c;期待精彩训练。"被点名时&#xff0c;中文喊“到”&#xff0c;那英文喊什么&#xff1f; “到”用英语怎么说&…

在WPF中实现多语言切换的四种方式

在WPF中有多种方式可以实现多语言&#xff0c;这里提供几种常用的方式。 一、使用XML实现多语言切换 使用XML实现多语言的思路就是使用XML作为绑定的数据源。主要用到XmlDataProvider类. 使用XmlDataProvider.Source属性指定XML文件的路径或通过XmlDataProvider.Document指定…

5G NR 协议规范表(对应3GPP 协议编号)

文章目录 5G NR 协议规范表&#xff08;对应3GPP 协议编号&#xff09;5G 架构相关协议5G 新空口相关协议无线接入网相关协议终端相关协议 5G NR 协议规范表&#xff08;对应3GPP 协议编号&#xff09; 5G 架构相关协议 5G 新空口相关协议 无线接入网相关协议 终端相关协议

怎么将其他内容与表单组合成二维码?扫码查看内容填写数据的制作技巧

怎么将视频、图片、文字等内容和表单组合生成二维码&#xff1f;现在用二维码来制作表单收集用户数据是一种很常见的方式&#xff0c;将问题做成表单生成二维码&#xff0c;其他人只需要扫码就能够根据问题来填写自己的反馈信息&#xff0c;更加的简单方便。 那么需要让扫码者…