-jsp使用java语言进行编程,java是一门面向对象的语言,除了几个简单数据类型外,其余均为对象
-在jsp中存在几个内置对象,这些对象可以不经过显式声明直接引用,也不需要专门的代码创建其实例,在程序设计中可以直接使用这些对象。
例子:
使用jsp中 request.getParameter("参数"),用于接受客户端的参数
request是一个对象
java:所有的用法都是:
对象.方法()
类.方法()
命名规则:对象全小写,类单词首字母大写
java中的对象必须先实例化再使用,分配内存空间
web Contecter:web容器---为对象实例化
内置对象概览:
-------------------------------------------------------------------
内置对象 类型 作用域
request javax.servlet.http.HttpServletRequest request
response javax.servlet.http.HttpServletResponse page
pageContext javax.servlet.jsp.PageContext page
session javax.servlet.http.HttpSession session
application javax.servlet.ServletContext application
out javax.servlet.jsp.JspWriter page
config javax.servlet.ServletConfig page
page java.lang.Object page
exception java.lang.Throwable page
-----------------------------------------------------------
request -> HttpServletRequest 接口的实例化对象
而且 HttpServletRequest 有一个父类:ServletRequest
现在ServletRequest 只有 HttpServletRequest 一个子接口
目的:为以后新出的协议服务
jsp内置对象分类
-与Servlet有关的隐含对象
- page
- config
-与input/output有关的隐含对象
-out
-request (客户端---->服务器端)
-response (服务器端---->客户端)
-JSP执行时,提供有关Context的隐含对象
-session
-application
-pageContext
-与Error有关的隐含对象
-exception
最重要的概念,jsp要有四种属性的保存范围
JSP中的属性的保存范围
-在JSP中可以采用下面的方法设置和取得属性:
-设置属性:
public abstract void setAttribute(java.lang.String name,java.lang.Object attribute)
-取得属性
public abstract java.lang.Object getAttribute(java.lang.String name)
public void setAttribute(String name,Object attribute)
设置属性:属性名称为字符串,属性值可以为任意对象
public Object getAttribute(String name)
取得属性:返回对象,值为字符串
本两个方法的参数及属性的类型必须记住
-在JSP中提供了四种属性保存范围:
-在一个页面范围内:page
-在一次服务器请求范围内:request
-在一次会话范围内: session
-在一次应用服务器范围内: application
page范围:
在JSP中设置一个页的属性范围必须通过pageContext容器完成.
a.jsp设置属性,同页可以取得属性, 当a.jsp forward 到 b.jsp后,b.jsp无法取得a.jsp设置的page属性
设置属性方法
pageContext.setAttribute("name","zhaoya");
取得属性方法
String name=(String)pageContext.getAttribute("name");
pageContext属性范围,是最为重要的jsp属性之一,但是如果使用纯粹的jsp代码开发,则此属性显现不出用处。只有在structs,WebWork中才能显现作用
request范围:
将属性保存在一次请求之内.必须使用服务器端跳转。
a.jsp中设置属性,同页可以取得属性。
jsp:forward 到 b.jsp ,可以取得属性 ,继续 jsp:forward 到 c.jsp 依然可以取得属性
但是直接的超链跳转不能取得属性
request.setAttribute("name","zhaoya");
String name=(String)request.getAttribute("name");
应用到:MVC、structs、WebWork。
session范围:
只保留一个用户的信息。
只要设置,不管什么跳转都可以取得属性。但新开窗口中不能取得值。
与session有关的任何打开的页面都可取得session,用于验证用户是否登陆。
session.setAttribute("name","zhaoya");
String name=(String)session.getAttribute("name");
application范围:
保存在服务器端,所有用户都可以取得此信息,此信息在整个服务器上被保留。
application.setAttribute("name","zhaoya"); //设置一次,所有窗口都可取得属性
String name=(String)application.getAttribute("name");
application的资源释放,只能重新启动服务器
application、session、request 都需要跨多页
属性保存是有内存开销的
设置过多application或session保存过多的对象,会使服务器性能降低。
因此能使用request就不要使用session,能使用session的就不要使用application。
application应用:在线人员统计、在线人员名单列表
强调一个重要概念:
pageContext->默认情况下表示一个页面的保存范围
pageContext对象的属性中
setAttribute的第二种方法:
setAttribute(String name,Object value,int scope)
scope可以定义范围
说明四种属性范围都是配置pageContext完成的.
设置可以通过以下方式,实现四种属性范围:
pageContext.setAttribute("name","zhaoya",PAGE_SCOPE);
pageContext.setAttribute("name","zhaoya",REQUEST_SCOPE);
pageContext.setAttribute("name","zhaoya",SESSION_SCOPE);
pageContext.setAttribute("name","zhaoya",APPLICATION_SCOPE);
与上面四种属性范围设置作用相同
总结:
四种属性范围都是依靠pageContext展开的,但是在开发中,往往使用session、request范围最多
四种范围是整个J2EE WEB端开发必须深刻记住的概念
包括设置属性和取得属性的参数范围,返回值类型