5.JavaWeb基础 JSP内置对象




   在JSP中为了简化用户的开发,提供了一些内置对象,这些内置对象将由容器自动为用

户进行实例化,用户直接使用即可。而不像在Java中,必须通过new关键字进行实例化对象

后才可以使用。




最重要的五个内置对象
内置对象类型描述
pageContextjavax.servlet.jsp.PageContextJSP的页面容器
requestjavax.servlet.jsp.HttpServletRequest
得到用户的请求信息
responsejavax.servlet.jsp.HttpServletResponse
服务器向客户端的回应信息
sessionjavax.servlet.jsp.HttpSession
用来保存每一个用户的信息
applicationjavax.servlet.jsp.ServletContext
表示所有用户的共享信息





一.4种属性范围

   在JSP中提供了4种属性的保存范围,属性保存范围,就是指一个内置对象,可以在多少个

页面中保存并且继续使用。


  1.page:只在一个页面中保存属性,跳转之后无效。

  2.request:只在一次请求中保存属性,服务器跳转之后无效。

  3.session:在一次会话范围中保存,无论怎么跳转都能使用,但是新开的浏览器无法使用。

  4.application:在整个服务器中保存,所有用户都能使用。




page的属性范围:


只能在本页面中<%=%>得到值如果添加了 :


<!--  服务器跳转 -->
<jsp:forward page="xxx.jsp">


则在xxx.jsp页面找不到原来页面的属性内容。





request的属性范围:


即使是添加了:


<!-- 服务器跳转 -->
<jsp:forward page="xxx.jsp">


在xxx.jsp页面上还是能得到原来页面的属性内容。但是,如果是超链接:


<!-- 地址改变 客户端跳转 -->
<a href="yyy.jsp">


那么在yyy.jsp页面上得不到原来页面的属性内容。






session的属性范围:


这个很容易理解的,无论是服务器跳转(<jsp:forward>)还是客户端跳转(<a href="xxx">),

session都能保存和读取。



但是:如果再打开一个新的浏览器直接访问页面 ,却无法得到设置的属性内容。





application的属性范围:


这个无论怎样都能得到,包括新开的浏览器也能得到。









二.深入request对象


   request内置对象是使用最多的一个对象,其主要作用是接受客户端发送而来的请求

信息。





   使用request接受参数是最常见的,但是,在进行参数提交的时候也会存在一些中文的

乱码问题。


乱码解决 : 


request_demo1.html : 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title>CaMnter</title>

</head>
<body>

	<form action="request_demo1.jsp" method="post">

		<input type="text" name="info"></input> <input type="submit"
			value="提交"></input>

	</form>


</body>
</html>




request_demo1.jsp:


<%@ page contentType="text/html" pageEncoding="UTF-8"%>

<%
	request.setCharacterEncoding("UTF-8");
%>

<h2><%=request.getParameter("info")%></h2>









三.深入response对象


   response对象的主要作用是对客户端的请求进行回应,将Web服务器处理后的结果发送给

客户端。



设置头信息 :


<%@ page contentType="text/html" pageEncoding="UTF-8"%>

<%!int count = 0;%>

<%
	// 2秒刷新一次	
	response.setHeader("refresh", "2");
%>

<h2><%=count++%></h2>

定时刷新,2秒刷新一次。



<%@ page contentType="text/html" pageEncoding="UTF-8"%>

<%!int count = 0;%>

<%
	// 2秒后跳转到	request_deme1.html 页面

	response.setHeader("refresh", "2,URL=request_deme1.html");
%>

<h2><%=count++%></h2>


2秒后跳转,这个跳转属于客户端跳转,显而易见,地址变了。





页面跳转 :


<%@ page contentType="text/html" pageEncoding="UTF-8"%>

<%
	//直接跳转到xxx.html页面
	response.sendRedirect("xxx.html");
%>



response的跳转属于客户端跳转。






操作Cookie :



<%@ page contentType="text/html" pageEncoding="UTF-8"%>

<%
	Cookie cookie = new Cookie("CaMnter", "Save you from anything 07");

	//保存7777秒
	cookie.setMaxAge(7777);

	response.addCookie(cookie);
%>








三.深入Session对象

   session对象的最主要的功能就是完成用户登录(login)和注销(logout)等常见

功能,每一个session对象都表示不同的访问用户。




取得Session Id :


<%@ page contentType="text/html" pageEncoding="UTF-8"%>

<%
	String id = session.getId();
%>

<h2>
	Session Id :
	<%=id%></h2>
<h2>
	Session Id 长度 :
	<%=id.length()%></h2>




session.invalidate() 方法 :将在服务器上销毁此session 的全部信息。


session.isNew() 方法 : 判断一个用户是否是第一次访问页面。实质是通过Cookie的方

       式进行判断的。


session.getCreationTime() 方法 : 取得session的创建事件。


session.getLastAccessedTime() 方法 : 取得session的最后一次操作事件。








四.深入Application对象

   application对象是javax.servlet.jsp.ServletContext接口的实例化对象,从

单词上表示的是整个Servlet的上下文,ServletContext代表了整个容器的操作。






取得虚拟目录对应的绝对路径 :


<%@ page contentType="text/html" pageEncoding="UTF-8"%>

<%
	//取得当面虚拟目录的真实路径
	String path = application.getRealPath("/");
%>

<h2>
	path:
	<%=path%></h2>


得到的path,也就是这个 : 


<Context path="/CaMnter" docBase="x:\xxx" reloadable="true">





application = this.getServletContext() 


<%@ page contentType="text/html" pageEncoding="UTF-8"%>

<%
	//this.getServletContext
	String path = this.getServletContext().getRealPath("/");
%>

<h2>
	path:
	<%=path%></h2>


注意:尽量使用this.getServletContext()来代替application,对于理解有帮助。




特别提示:Tomcat目录下lib中如果放了第三方的jar包,则这些jar包都是通过application

属性自动设置到服务器上去的。












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值