使用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>