JSP主要内置对象
内置对象是指可以不用显式声明并且可以直接使用的对象。本篇介绍最常用的五个内置对象—— request、response、session、application、pageContext。
1.1request请求对象
request请求对象通常用来设置和取得 request范围变量。就是说,request对象用来封装客户端的请求信息。通过request的 setAttribute() 来设置属性,通过request的 getAttribute() 取得属性。request对象是HttpServletRequest接口的实例。
范例: 用request对象设置和获得request范围变量。
RequestScopeDemo01.jsp
<%@ page language = "java" pageEncoding = "gb2312" >
<html>
<head>
<title>
RequestScopeDemo01
</title>
<head>
<body>
<%
request.setAttribute("name", "James"); //保存name属性在request范围
request.setAttribute("age", "30"); //保存age属性在request范围
request.setAttribute("sex", "男"); //保存sex属性在request范围
%>
<jsp:forward page = "RequestScopeDemo02.jsp"></jsp:forward>
</body>
</html>
RequestScopeDemo02.jsp
<%@ page language = "java" pageEncoding = "gb2312" >
<html>
<head>
<title>
RequestScopeDemo02
</title>
</head>
<body>
<%
String name = (String)request.getAttribute("name");
String age = (String)request.getAttribute("age");
String sex = (String)request.getAttribute("sex");
out.println("姓名:" + name + "<br>");
out.println("年龄:" + age + "<br>");
out.println("性别:" + sex + "<br>");
%>
</body>
</html>
在浏览器地址栏输入 “http://localhost:8080/JavaWeb03/RequestScopeDemo01.jsp”。可以看到如下界面:
范例: 使用request对象的getParameter(String name)方法接收用户参数。
RequestDemo.jsp
<%@ page language = "java" pageEncoding = "gb2312" >
<html>
<head>
<title>
RequestDemo
</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");//设置参数编码格式
String username = request.getParameter("username");//获得username参数值
String upassword = request.getParameter("upassword");//获得upassword参数值
String repassword = request.getParameter("repassword");//获得repassword参数值
String name = request.getParameter("name");
String age = request.getParameter("age");
String sex = request.getParameter("sex");
%>
用户名:<%= username %><br>
密码:<%= upassword %><br>
确认密码:<% repassword %><br>
姓名:<% name %><br>
年龄:<% age %><br>
性别:<% sex %><br>
</body>
</html>
RequestForm.html
<html>
<head>
<title>RequestForm.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<form action = "HelloWorld.jsp" method = "post">
<table>
<tr>
<td>用户名</td>
<td><input type = "text" name = "username" /></td>
</tr>
<tr>
<td>密码</td>
<td><input type = "password" name = "upassword" /></td>
</tr>
<tr>
<td>确认密码</td>
<td><input type = "password" name = "repassword" /></td>
</tr>
<tr>
<td>姓名</td>
<td><input type = "text" name = "name" /></td>
</tr>
<tr>
<td>年龄</td>
<td><input type = "text" name = "age" /></td>
</tr>
<tr>
<td>性别</td>
<td>
<input type = "radio" name = "sex" value = "男" />男
<input type = "radio" name = "sex" value = "女" />女
</td>
</tr>
<tr>
<td><input type = "submit" value = "注册" /></td>
<td><input type = "reset" value = "重置" /></td>
</tr>
</table>
</form>
</body>
</html>
在浏览器地址栏输入 **“http://localhost:8080/JavaWeb03/RequestForm.html”。可以看到如下界面:
注意点: 在<form >
标签提交表单时,要注意是否会发生提交中文乱码,所以在RequestDemo.jsp文件里面有一句
request.setCharacterEncoding("UTF-8");//设置参数编码格式
如果不采用UTF-8,而是采用gb2312编码格式,则会出现表单提交时中文乱码。
1.2response响应对象
response对象包含了响应客户端请求的有关信息,是HTTPServletResponse类的实例。response对象用来添加cookies、添加标头、设置页面重定向等。response对象包含了很多方法,重点介绍sendRedirect(URL),用来实现页面跳转。
范例: 通过response对象来设置页面文件格式,以及页面的重定向。
ResponseDemo.jsp
<%@ page language = "java" pageEncoding = "gb2312" >
<html>
<head>
<title>
ResponseDemo
</title>
</head>
<body>
<p>将当前页面保存为word文档吗?</p>
<form action = "HelloWorld.jsp" method = "get" >
<input type = "submit" value = "yes" name = "submit">
<input type = "submit" value = "no" name = "submit">
</form>
<%
String str = request.getParameter("submit");//获得submit参数值
if(str == null){
str = "";
}
if(str.equals("yes")){
response.setContentType("application/msword;charset = GB2312");
}
if(str.equals("no")){
response.sendRedirect("ResponseDemo.jsp");//Response的重定向
}
%>
</body>
</html>
在浏览器地址栏输入 http://localhost:8080/JavaWeb03/ResponseDemo.jsp 。可以看
到如下界面:
点击yes则会弹出询问下载的提示框,点击no则相当于刷新。
1.3session会话对象
session对象表示用户的会话状况,用于保存用户的各种信息,直到生命周期时或者被认为释放掉为止。分别通过session的setAttribute()和getAttribu()来设置属性获得属性。
范例: 获得session的各种信息。
SessionScopeDemo.jsp
<%@ page language = "java" pageEncoding = "gb2312" >
<html>
<head>
<title>
SessionScopeDemo
</title>
</head>
<body>
<%
long creatTime = session.getCreationTime();//获得session的生成时间
out.println("session的生成时间为:" + creatTime + "<br>");//输出session的生成时间
String sessionID = session.getId();//获得session的ID
out.println("session的ID为:" + sessionID + "<br>");//输出session的ID
long lastTime = session.getLastAccessedTime();//最后通过session发送请求时间
out.println("最后通过session发送请求时间为:" + lastTime + "<br>");
boolean isnew = session.isNew();//判断session是不是新的
out.println("是否为新的:" + isnew);//输出session是否为新的
%>
</body>
</html>
在浏览器地址栏输入 http://localhost:8080/JavaWeb03/SessionScopeDemo.jsp 。可以看到如下界面:
总结: 每次重启浏览器,都会有一个不同的sessionID。服务器端根据sessionID来判断是否属于同一个session。
1.4application应用服务对象
application对象用来取得和设置Servlet的相关信息。application对象的生命周期时服务器启动直到关闭。分别用setAttribute()和getAttribute()来设置属性和获得属性。
范例: 获得主要、次要的Servlet API版本等信息。
ApplicationDemo.jsp
<%@ page language = "java" pageEncoding = "gb2312" >
<html>
<head>
<title>
ApplicationDemo.jsp
</title>
</head>
<body>
<%
int majorVersion = application.getMajorVersion();//主要的Servlet API版本
int minorVersion = application.getMinorVersion();//次要的Servlet API版本
String info = application.getServerInfo();//服务器版本
//获得指定文件的MIME类型
String mimeStr = application.getMimeType("HelloWorld.jsp");
//获得Local的Application context
ServletContext contextStr = application.getContext("HelloWorld.jsp");
//获得指定path的绝对路径
String pathStr = application.getRealPath("/");
%>
<%= "主要的Servlet API版本:" + majorVersion %><br>
<%= "次要的Servlet API版本:" + minorVersion %><br>
<%= "服务器版本:" + info %><br>
<%= "文件的MIME类型:" + mimeStr %><br>
<%= "Application context:" + contextStr %><br>
<%= "绝对路径:" + pathStr %><br>
</body>
</html>
在浏览器地址栏输入 http://localhost:8080/JavaWeb03/ApplicationDemo.jsp 。可以看到如下界面:
1.5pageContext页面上下文对象
用来设置page范围的属性。page范围指设置的属性只在当前页面有效。通过pageContext对象可以获得其他内置的对象,如request对象、response对象、out对象、page对象、exception对象等。
范例: 获得不同范围属性的信息。
PageContextDemo.jsp
<%@ page language = "java" pageEncoding = "gb2312" >
<html>
<head>
<title>
PageContextDemo
</title>
</head>
<body>
<%
pageContext.setAttribute("name","page_buda"); //设置page范围name属性
request.setAttribute("name","request_buda");//设置request范围name属性
session.setAttribute("name","session_buda");//设置session范围name属性
application.setAttribute("name","application_buda");//设置application范围name属性
%>
<%
//获得page范围name属性
String pageStr = (String)pageContext.getAttribute("name",pageContext.PAGE_SCOPE);
//获得request范围name属性
String requestStr = (String)pageContext.getAttribute("name",pageContext.REQUEST_SCOPE);
//获得session范围name属性
String sessionStr = (String)pageContext.getAttribute("name",pageContext.SESSION_SCOPE);
//获得application范围name属性
String applicationStr = (String)pageContext.getAttribute("name",pageContext.APPLICATION_SCOPE);
%>
<%= "page范围:name属性值" + pageStr %><br>
<%= "request范围:name属性值" + requestStr %><br>
<%= "session范围:name属性值" + sessionStr %><br>
<%= "application范围:name属性值" + applicationStr %><br>
</body>
</html>
在浏览器地址栏输入 http://localhost:8080/JavaWeb03/PageContextDemo.jsp 。可以看到如下界面:
欢迎来评论