JSP内置对象上.docx
- 文档编号:4956301
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:26
- 大小:148.34KB
JSP内置对象上.docx
《JSP内置对象上.docx》由会员分享,可在线阅读,更多相关《JSP内置对象上.docx(26页珍藏版)》请在冰豆网上搜索。
JSP内置对象上
1、课程名称:
JSP内置对象
2、知识点
2.1、上次课程的主要知识点
1、page指令的使用,设置MIME类型、指定编码、导包操作;
2、两种包含的使用:
·静态包含:
<%@include%>,先包含后处理;
·动态包含:
forward>,先处理后包含结果,可以向被包含页传递参数。 3、跳转操作: foward>,跳转之后地址栏不发生任何的改变,所以此种称为服务器端跳转,可以向跳转的页面中传递参数。 4、现在的参数都使用request.getParaemter()进行接收,此操作返回String型的数据,如果没有参数返回的内容就是null; 5、使用JSP+JDBC完成的登陆程序必须可以编写熟练; 6、理解分页程序的操作原理,并且可以使用分页组件进行操作。 2.2、本次预计讲解的知识点 1、JSP中的九个内置对象的概览; 2、背下JSP中四种属性范围的操作; 3、request内置对象的使用; 4、response内置对象使用; 5、将JSP的程序进行一个整体的开发项目的操作。 3、具体内容 3.1、内置对象(重点) 之前如果要想使用一个对象,则首先必须使用关键字new进行对象的实例化操作,对象的名称也由用户自己决定,而所谓的内置对象指的是,在WebContainer之中已经为用户提供好了若干个对象,用户直接使用即可,例如: 之前接收参数操作时使用的request.getParameter()中的request就是一个内置对象,在JSP中一共有以下九个内置对象。 背以上九个内置对象的时候,一定要记住的是背下对应的包.接口名称。 3.2、属性的操作(核心重点) 属性操作可能现阶段感觉不到其作用,但是其作用必须结合到标准的开发或者是实际的应用中来解释,下面先记住这四种属性范围的特点,慢慢的消化。 所谓的属性范围就是指一个保存的对象(属性),可以保存的JSP页面的范围,在JSP中提供了如下三个方法进行属性的操作: ·设置属性: publicvoidsetAttribute(Stringname,Objectvalue); ·取得属性: publicObjectgetAttribute(Stringname); ·删除属性: publicvoidremoveAttribute(Stringname); 但是以上的三个方法在四个内置对象中都有: pageContext(page)、request、session、application。 3.2.1、page属性范围(pageContext) 所谓的page属性范围指的就是一个对象只能保存在一个JSP页面之中,跳转之后无效,但是如果要想进行page属性的操作必须使用pageContext的这个内置对象完成。 范例: 设置和取得page属性 <%@pagecontentType="text/html"pageEncoding="GBK"%> <%@pageimport="java.util.*"%> <%//设置属性 pageContext.setAttribute("username","SMITH"); pageContext.setAttribute("birthday",newDate()); %> <%//取得属性 Stringname=(String)pageContext.getAttribute("username"); DatemyDate=(Date)pageContext.getAttribute("birthday"); %> <%=name%>姓名:
生日:
<%=myDate%>
现在是在当前页中设置的属性,所以也可以直接在当前页中取得,但是如果现在发生了跳转的话,则无法取得。
范例:
第一个页面设置属性
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%@pageimport="java.util.*"%>
<%//设置属性
pageContext.setAttribute("username","SMITH");
pageContext.setAttribute("birthday",newDate());
%>
forwardpage="scope_b.jsp"/> 范例: 第二个页面取得属性 <%@pagecontentType="text/html"pageEncoding="GBK"%> <%@pageimport="java.util.*"%> <%//取得属性 Stringname=(String)pageContext.getAttribute("username"); DatemyDate=(Date)pageContext.getAttribute("birthday"); %>姓名:
<%=name%>
生日:
<%=myDate%>
现在由于已经发生了跳转的操作,所以在一个页面上设置的属性就不存在了。
3.2.2、request属性范围
如果现在希望属性在一次服务器端跳转后可以继续取得的话,那么就可以将属性范围扩大到request范围上。
范例:
设置属性
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%@pageimport="java.util.*"%>
<%//设置属性
request.setAttribute("username","SMITH");
request.setAttribute("birthday",newDate());
%>
forwardpage="scope_b.jsp"/> 范例: 取得属性 <%@pagecontentType="text/html"pageEncoding="GBK"%> <%@pageimport="java.util.*"%> <%//取得属性 Stringname=(String)request.getAttribute("username"); DatemyDate=(Date)request.getAttribute("birthday"); %>姓名:
<%=name%>
生日:
<%=myDate%>
如果现在设置的是request属性范围的话,那么不管有多少个页面,只要是在一次服务器端跳转上都会继续保留下来。
但是如果说现在换成了超链接呢?
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%@pageimport="java.util.*"%>
<%//设置属性
request.setAttribute("username","SMITH");
request.setAttribute("birthday",newDate());
%>
由于现在发生的是客户端跳转,所以没有了,一个request只能保存在一个请求之中。
3.2.3、session属性范围
如果现在希望某一个属性不管是服务器端还是客户端跳转都可以继续取得属性操作的话,那么就可以使用session属性范围完成。
范例:
设置属性
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%@pageimport="java.util.*"%>
<%//设置属性
session.setAttribute("username","SMITH");
session.setAttribute("birthday",newDate());
%>
范例:
取得属性
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%@pageimport="java.util.*"%>
<%//取得属性
Stringname=(String)session.getAttribute("username");
DatemyDate=(Date)session.getAttribute("birthday");
%>
姓名:
<%=name%>
生日:
<%=myDate%>
通过session设置的属性范围不受跳转的限制,但是如果现在新打开了一个浏览器的话,就无法保存了。
因为对于服务器来讲,每一个新打开的浏览器都是一个新的session,而且在之前的oracle也学习过,一个session就表示一个用户,例如:
在实际的生活之中,要想发送邮件需要登陆邮箱,登陆之后无论怎么发送,发送人永远是这个登陆帐号。
session用于保存每一个用户自己的信息,一个属性保存的范围越大,占用的资源就越多。
3.2.4、application属性范围
如果将一个属性保存在了application范围,则就意味着这个属性保存在服务器上,这样,每一个用户(每一个用户就是一个session)都可以访问此属性。
范例:
设置属性
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%@pageimport="java.util.*"%>
<%//设置属性
application.setAttribute("username","SMITH");
application.setAttribute("birthday",newDate());
%>
范例:
取得属性
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%@pageimport="java.util.*"%>
<%//取得属性
Stringname=(String)application.getAttribute("username");
DatemyDate=(Date)application.getAttribute("birthday");
%>
姓名:
<%=name%>
生日:
<%=myDate%>
由于application的属性是保存在服务器上的,所以每个用户都可以访问,但是如果在此属性范围中保存的内容过多,则肯定将会过多的占用服务器端的资源,这样对于服务器的性能肯定有所影响。
从实际应用来讲,application属性范围出现的比较少,只有在保存公共属性的时候才会用到。
3.2.2、page属性范围深入(pageContext)
通过以上的代码可以感觉出page属性范围似乎是一个没有用处的玩意,但是从实际来讲,page属性范围是最有用一个,这一点必须结合标准设计模式来讲,而且如果再深入的话,实际上四种属性范围都是通过pageContext指定的,在pageContext中定义了如下一个属性设置方法:
publicvoidsetAttribute(Stringname,Objectvalue,intscope)
此方法之中多了一个设置的范围,而这个范围需要指定一个int型的数据,而这个数据由PageContext类中的以下常量提供:
·PAGE范围:
publicstaticfinalintPAGE_SCOPE
·REQUEST范围:
publicstaticfinalintREQUEST_SCOPE
·SESSION范围:
publicstaticfinalintSESSION_SCOPE
·APPLICATION范围:
publicstaticfinalintAPPLICATION_SCOPE
如果使用了普通的属性设置方法,则默认的范围就是PAGE范围。
范例:
通过pageContext指定request属性范围
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%@pageimport="java.util.*"%>
<%//设置属性
pageContext.setAttribute("username","SMITH",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("birthday",newDate(),PageContext.REQUEST_SCOPE);
%>
forwardpage="scope_b.jsp"/> 范例: 取得属性的时候依然使用普通的request对象完成 <%@pagecontentType="text/html"pageEncoding="GBK"%> <%@pageimport="java.util.*"%> <%//取得属性 Stringname=(String)request.getAttribute("username"); DatemyDate=(Date)request.getAttribute("birthday"); %>姓名:
<%=name%>
生日:
<%=myDate%>
通过以上的代码可以发现,pageContext算是一个最全能的对象,这一点会随着课程的深入而继续深入讲解。
但是从实际的使用来讲,每种属性范围还是习惯于使用指定的对象,例如:
request范围就使用request对象设置,而基本上不会通过pageContext设置。
3.3、request内置对象(核心重点)
在B/S的程序之中都是基于请求(request)/回应(response)的操作流程,如果现在服务器端要想取得客户端的某些信息就只能依靠request内置对象完成,request内置对象对应的接口是javax.servlet.http.HttpServletRequest,此接口定义:
publicinterfaceHttpServletRequest
extendsServletRequest
HttpServletRequest接口是javax.servlet.ServletRequest接口的子接口,而且ServletRequest也只有一个子接口,那么为什么在设计的时候不将这两个接口合成一个接口呢?
之所以这样设计,主要的原因是因为现在的JSP中使用的是HTTP协议,如果以后再有新的协议出现的话,那么就可以让新的协议定义成一个接口,并将一些公共的操作直接从ServletRequest接口中继承而来。
3.3.1、接收单个参数
在request对象之中使用最多的就是在于参数的接收上,例如,之前编写表单都可以传递参数,这些参数都直接使用:
publicStringgetParaemeter(Stringstr)的方法进行接收。
范例:
下面定义表单
请输入内容:
选择性别: