JSP 九大内置对象及四个作用域

JSP 九大内置对象及四个作用域

Jsp 九大内置对象及四大作用域概述

在 Jsp 开发中,Jsp 提供了 9 个内置对象,这些内置对象将由容器为用户进行实例化,用户直接使用即可。这个9 个内置对象分别是pageContext,request,response,session,application,config,out,page,exception;常用的是前面 5个,需要熟练掌握;
在 Jsp 开发中,可以保存数据,Jsp 提供了四种数据保存范围;分别是 page,request,session,application;

Jsp四大作用域

page

page 范围:只在一个页面中保存数据; javax.servlet.jsp.PageContext(抽象类)

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
	pageContext.setAttribute("name", "张三");
	pageContext.setAttribute("age", 20);
%>
<%
	String name = (String)pageContext.getAttribute("name");
	int age = (Integer)pageContext.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>
</html>

request

request 范围:只在一个请求中保存数据; javax.servlet.http.HttpServletRequest(接口)

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
	request.setAttribute("name", "张三");
	request.setAttribute("age", 20);
%>
<jsp:forward page="requestTarget.jsp"></jsp:forward>
</body>
</html>

requestTarget.jsp页面

<%
	String name = (String)request.getAttribute("name");
	int age = (Integer)request.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>

session

session 范围:在一次会话范围中保存数据,仅供单个用户使用;javax.servlet.http.HttpSession(接口)

<%
	session.setAttribute("name", "张三");
	session.setAttribute("age", 20);
%>
<h1>session值已创建</h1>

访问session

<%
	String name = (String)session.getAttribute("name");
	int age = (Integer)session.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>

application

application 范围:在整个服务器上保存数据,所有用户共享;javax.servlet.ServletContext(接口)

<%
	application.setAttribute("name", "张三");
	application.setAttribute("age", 20);
%>
<h1>application值已创建</h1>

访问application

<%
	String name = (String)application.getAttribute("name");
	int age = (Integer)application.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>

response 对象

response 内置对象和 request 内置对象是相对应的,response 内置对象用于响应客户请求,向客户端输出信息;
javax.servlet.HttpServletResponse 接口

1,自动刷新应用

每一秒刷新一次页面

<%
	// 每隔一秒刷新一次页面
	response.setHeader("refresh", "1");
	Date myDate = new Date();
%>
当前时间<%= myDate.toLocaleString() %>

2,页面重定向应用 客户端跳转

<%
	// 重定向,客户端跳转
	response.sendRedirect("index.html");
%>

3,操作 cookie 应用

在登录界面输入用户名,密码点击登录,将业务提交到userLogin.jsp页面处理,若在登录页面选择了记住密码,则保存用户名、密码。并在登录界面显示。
登录界面,response3.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript">
	function resetValue() {
		document.getElementById("username").value='';
		document.getElementById("pwd").value='';
	}
</script>
<%
	String username = null;
	String pwd = null;
	Cookie[] cookies = request.getCookies();
	for(int i=0; i<cookies.length;i++){
		if(cookies[i].getName().equals("usernameAndPwd")){
			username = cookies[i].getValue().split("-")[0];
			pwd = cookies[i].getValue().split("-")[1];
		}
	}
	
	if(username==null){
		username =  "";
	}
	if(pwd==null){
		pwd =  "";
	}
%>
</head>
<body>
<form action="userLogin.jsp" method="post">
	<table>
		<tr>
			<td>用户名:</td>
			<td><input type="text" id="username" name="username" value=" <%=username %> "></td>
		</tr>
		<tr>
			<td>密码:</td>
			<td><input type="password" id="pwd" name="pwd" value=" <%=pwd %> "></td>
		</tr>
		<tr>
			<td>记住密码</td>
			<td><input type="checkbox" id="remeber" name="remeber" value="remeber-me"></td>
		</tr>
		<tr>
			<td><input type="submit" value="登录"></td>
			<td><input type="button" value="重置" onclick="resetValue()"></td>
		</tr>
	</table>
</form>
</body>
</html>

业务处理界面,userLogin.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="javax.servlet.http.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
	String username = (String)request.getParameter("username");
	String pwd = (String)request.getParameter("pwd");
	String remeber = (String)request.getParameter("remeber");
	System.out.println("username=" + username);
	System.out.println("pwd=" + pwd);
	System.out.println("remeber=" + remeber);
	
	if("remeber-me".equals(remeber)){
		Cookie usernameAndPwd = new Cookie("usernameAndPwd",username + "-" + pwd);
		usernameAndPwd.setMaxAge(1*60*60*24); // cookie保存一星期
		response.addCookie(usernameAndPwd); //保存cookie
		System.out.println("设置cookie成功");
 	}
	response.sendRedirect("response3.jsp");
%>
</body>
</html>

method属性post get 方法比较
post 放数据包里 ,页面跳转时不含参数,安全;
get 放 Url 后面 get 数据量小,页面跳转时含参数,不安全;

4,cookie 和 session 的比较

cookie 信息是存客户端的,session 信息是存服务器的;

out对象

out 内置对象主要用来向客户端输出各种类型的数据,同时还可以管理应用服务器上的输出缓冲区。所以 out 内置对象的方法是向客户端输出数据和管理缓冲区; 底层 javax.servlet.jsp.JspWriter 抽象类

向客户端输出数据

<%
	out.println("<h1>");
	out.println("Hello Jsp Servlet");
	out.println("</h1>");
%>

管理输出缓冲区

<%
	int totalbuffer = out.getBufferSize(); // 获取总共的缓冲区的大小
	int available = out.getRemaining(); // 获取剩余缓冲区的大小
	int user = totalbuffer - available; // 获取使用的缓冲区大小
	out.println("总共的缓冲区的大小:" + totalbuffer);
	out.println("剩余缓冲区的大小:" + available);
	out.println("使用的缓冲区大小:" + user);
%>

config对象

Config 内置对象是 JSP 页面通过 JSP 容器进行初始化时被传递的对象。javax.servlet.ServletConfig 。在 Servlet初始化的时候,JPS 引擎通过 config 向它传递信息。这种信息可以是属性名和属性值匹配的参数,也可以是通过ServletContext 对象传递的服务器的有关信息
在web.xml中配置属性

<servlet>
  	<servlet-name>init</servlet-name>
  	<jsp-file>/sysInit.jsp</jsp-file>
  	<init-param>
  	 <param-name>jdbc</param-name>
  	 <param-value>com.mysql.jdbc.Driver</param-value>
  	</init-param>
  	<init-param>
  		<param-name>url</param-name>
  		<param-value>jdbc:mysql://localhost:3306/db_xx</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>init</servlet-name>
  	<url-pattern>/init</url-pattern>
  </servlet-mapping>

获取配置属性

<%
	String jdbc = config.getInitParameter("jdbc");
	String url = config.getInitParameter("url");
%>
<h1>驱动名称:<%=jdbc %></h1>
<h1>连接地址:<%=url %></h1>

exception对象

Exception 内置对象用来处理 JSP 文件在执行时发生的所有异常,它是java.lang.Throwable 类的一个对象。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<%@ page errorPage="error.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
	int a=1;
	int b=0;
	out.println(a/b);
%>
</body>
</html>

异常处理页面

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<%@ page isErrorPage="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
	if(exception!=null){
		out.println("程序出错了");
		out.println(exception.getMessage());
	}
%>
</body>
</html>

pageContext对象

pageContext 内置对象是一个比较特殊的对象。它相当于页面中所有对象功能的集合,即使用它可以访问到本页面中所有对象。pageContext 内置对象由 Jsp 容器创建并初始化,pageContext 对象提供了对 JSP 页面所有对象及控件的访问。

<%
	
	pageContext.setAttribute("name0", "pageInfo");
	request.setAttribute("name1", "requestInfo");
	session.setAttribute("name2", "sessionInfo");
	application.setAttribute("name3", "applicationInfo");
	
	out.println("使用pageContext<br/>");
	out.println("page中的属性值:" + pageContext.getAttribute("naem0") + "<br/>");
	out.println("request中的属性值:" + pageContext.getRequest().getAttribute("name1") + "<br/>" );
	out.println("session中的属性值:" + pageContext.getSession().getAttribute("name2") + "<br/>" );
	out.println("application中的属性值:" + pageContext.getServletContext().getAttribute("name3") + "<br/>" );
%>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值