JSP request对象

本文深入探讨了JSP内置对象的使用,包括request、response、session等,详细讲解了如何处理请求参数,管理作用域属性,获取客户端信息,解决中文乱码问题,以及显示国际化信息的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用JSP内置对象时,不需要先定义这些对象,直接使用即可

在JSP中一共预先定义了9个这样的对象,分别是request,response,session,application,out,pageContext,config,page,exception

request对象

request封装了由客户端生成的http请求的所有细节,主要包括http头信息,系统信息,请求方式和请求参数等

访问请求参数

当通过超链接的形式发送请求时,可以为该请求传递参数,这可以通过在超链接后面加上"?"来实现
eg:

<a href="delete.jsp?id=1">删除</a>

注:如果需要指定多个参数,参数间使用"&"分隔即可

在delete.jsp页面中,可以通过request对象的getParameter()方法获取传递的参数值:

<%
	request.getParameter("id");
%>

注:如果指定参数不存在,将返回null,如果指定了参数名,而参数值未指定,返回空的字符串 “”

在作用域中管理属性

在进行请求转发时,需要把一些数据传递到转发后的页面进行处理,这时就需要request对象的setAttribute()方法将数据保存到request范围内的变量中

语法格式如下:

request.setAttribute(String name, Object object);
  • name:变量名,在转发后的页面取数据时,就是通过这个变量名来获取数据的
  • object:用于指定需要在request范围内传递的数据,为Object对象

在将数据保存到request范围内的变量后,可以通过request的getAttribute()方法获取该变量的值,语法如下:

request.getAttribute(String name);
获取cookie

cookie:小段的文本信息,在网络服务器上生成,并发送给浏览器。通过使用cookie可以标识用户身份,记录用户名和密码,跟踪重复用户等。浏览器将cookie以key/value的形式保存到客户机的某个指定目录中

通过cookie的getCookies()方法可以获取到所有的cookie对象的集合,通过cookie对象的getName()方法可以获取到指定名称的cookie,通过getValue()方法可以获取到cookie的值,另外,将一个cookie对象发送到客户端,使用response对象的addCookie()方法

解决中文乱码

request请求参数的文字编码可能和页面的不一致,故导致乱码
解决方法:

<%=new String(request.getParameter("name").getBytes("请求编码"), "页面编码")%>

// 一般为以下语句
<%=new String(request.getParameter("name").getBytes("ISO-8859-1"), "utf-8")%>
获取客户端信息
  • getHeader(String name):获取HTTP协议定义的头文件信息
  • getHeaders(String name):返回指定名称的request Header的所有值,其结果是一个枚举的实例
  • getHeadersNames():返回所有request Header的名字,结果是一个枚举的实例
  • getMethod():获得客户端向服务器传送数据的方法
  • getProtocol():获得客户端向服务器传送数据所依据的协议名称
  • getRequestURI():获得发出请求字符串的客户端地址,不包括主机,端口等
  • getRequestURL():获得发出请求字符串的客户端地址
  • getRealPath():返回当前请求文件的绝对路径 注:不建议使用
  • getRemoteAddr():获取客户端的IP地址
  • getRemoteHost():获取客户端的主机名
  • getServerName():获取服务器的名称
  • getServletPath():获取客户端所请求的脚本文件的文件路径
  • getServerPort():获取服务器的端口号

eg:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>获取客户端信息</title>
</head>
<body>
客户端提交信息的方式:<%=request.getMethod()%><br/>
使用的协议:<%=request.getProtocol()%><br/>
获取发出请求字符串的客户端地址:<%=request.getRequestURI()%><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/>
获得请求文件的绝对路径:<%=request.getRealPath("requestGetMethod.jsp")%><br/>
</body>
</html>

运行结果:

客户端提交信息的方式:GET
使用的协议:HTTP/1.1
获取发出请求字符串的客户端地址:/6/requestGetMethod.jsp
获取发出请求字符串的客户端地址:http://localhost:8080/6/requestGetMethod.jsp
获取提交数据的客户端IP地址:0:0:0:0:0:0:0:1
获取服务器端口号:8080
获取服务器名称:localhost
获取客户端主机名:0:0:0:0:0:0:0:1
获取客户端所请求的脚本文件的文件路径:/6/requestGetMethod.jsp
获得Http协议定义的文件头信息Host的值:localhost:8080
获得Http协议定义的文件头信息User-Agent的值:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
获得Http协议定义的文件头信息accept-language的值:zh-CN,zh;q=0.9
获得请求文件的绝对路径:D:\after\Java\spring\20190122\out\artifacts\20190122_war_exploded\requestGetMethod.jsp
显示国际化信息

浏览器可以通过accept-language的HTTP报头向Web服务器指明它所使用的本地语言
request对象中的getLocale()和getLocales()方法允许JSP开发人员获取这一信息,获取的信息属于java.util.Local类型
java.util.Locale类型的对象封装了一个国家和国家所使用的一种语言,通过这一信息,JSP开发人员就可以使用语言所特有的信息做出响应

eg:如果所在区域为中国,将显示“你好!”,而如果在英国,则显示“Hello!”

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.Locale" %>
<html>
<head>
    <title>显示国际化信息</title>
</head>
<body>
<%
    Locale locale = request.getLocale();
    String str = "";
    if(locale.equals(Locale.US)){
        str = "Hello!";
    }
    if(locale.equals(Locale.CHINA)){
        str = "你好!";
    }
%>
<%=str%>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值