您的位置:首页 > Web前端 > JavaScript

JSP九大内置对象和EL表达式中国的隐含对象

2018-03-07 10:38 169 查看
虽然现在基本上使用SpringMVC+AJAX进行开发了Java Web了,但是还是很有必要了解一下JSP的九大内置对象的。像request、response、session这些对象,即便使用其他框架也是会经常用到的。因此十分有了解的必要。这些对象可以在JSP页面中调用,而不需要事先定义,这使得JSP编程更加的方便和快捷。其实这些内置对象都对应着某个Servlet类,在JSP被翻译成Servlet之后,这些内置对象会相应转换成对应的类实例。JSP中使用到的内置对象主要有如下九个:
在jsp开发当中使用比较多的就request、response、session和out对象。下面是各个对象的介绍和使用实例。

一、request内置对象

request内置对象是最常用的对象之一,它代表的是java.servlet.HttpServletRequest类的对象。request内置对象中包含了有关浏览器请求的信息,并提供了多个用于获取cookie、header以及session内数据的方法。request对象常用方法request对象主要用于客户端请求处理,其中,该对象中所包含的方法有:
request常用方法的实例下面通过一个实例讲解来让读者了解有关request内置对象中的常见调用方法。创建一个request.jsp文件,该文件的详细源代码如下:
程序说明:request中的getParameter()方法是最为常用的,使用此方法获取到上一页面所提交的参数值。此处,页面通过提交了一个myname参数给本页面,并调用request.getParameter(“myname”)获取到这个参数值。页面中的其他request方法是用来获取各种请求信息。

二、response内置对象

response对象与request对象相对应,它是用于响应客户请求,向客户端输出信息。response是javax.servlet.HttpServletResponse类的对象。response对象的常用方法response对象提供了多个方法用来处理HTTP响应,可以调用response中的方法修改ContentType中的MIME类型以及实现页面的跳转等等,
比较常用的方法如下:
这些方法中,getWriter()和sendRedirect(String location)在实际开发中使用的最为频繁。getWriter()常出现在Servlet编写中。response对象的getWriter()方法实例在服务器端的Servlet类文件中,会经常使用getWriter()方法来获取一个PrintWriter对象,从而调用其中的println()方法来向客户端输出内容。下面一段Servlet的代码实例:
程序说明:该Java代码动态地向客户端返回一个简单的HTML页面。
注意:在JSP页面中,response就是HttpServletResponse类的一个对象,可以直接使用response在JSP页面中调用HttpServletResponse类中所有方法。页面重定向实例下面再通过一个例子来加深对用于页面重定向的sendRedirect(String location)方法的理解。在helloworld模块下创建一个index4.jsp文件:
程序说明:页面中有个下拉菜单,选择需要跳转的页面。request内置对象通过getParameter()方法获取到传递过来的参数值,response对象再根据参数值不同调用sendRedirect()方法进行页面跳转。重定向的hello.jsp页面代码如下:
Goodbye.jsp页面代码为:

三、page内置对象

page对象有点类似于Java编程中的this指针,就是指当前JSP页面本身。page是java.lang.Object类的对象。page对象的常用方法比较常用的page内置对象的方法有:
由于page内置对象在实际开发过程并不经常使用,所以page对象的其他方法在这里就不一一列举出来了。page的常用方法实例下面举一个实例来加深对page内置对象使用的理解。创建一个page.jsp文件,其详细源代码如下:

四、session内置对象

session是与请求有关的会话期,它是java.servlet.http.HttpSession类的对象,用来表示和存储当前页面的请求信息。在实际的Web应用开发过程会经常遇到这样的一个问题:会话状态的维持。当然有很多种方法可以用来解决这个问题,例如:Cookies、隐藏的表单输入域或者将状态信息直接附加到URL当中去,但是这些方法使用非常不便。Java Servlet提供了一个可以在多个请求之间持续有效的会话对象HttpSession,此对象允许用户存储和提取会话状态的信息。JSP同样也支持了Servlet中的这个概念。JSP中的session内置对象就是对应于Servlet中的HttpSession对象。当Web应用系统希望通过多个页面完成一个事务的时候,session的使用是非常有用和方便的。session对象的常用方法session内置对象中的常用方法如下:
session一般在服务器上设置了一个30分钟的过期时间,当客户端停止操作后30分钟,session中存储的信息会自动失效。另外读者要非常注意的,session中保存和查找的信息不能是基本的类型,如int、double等,而必须是Java相对应的对象,例如Integer、Double等。问题回答操作实例接下来本书将创建三个页面来模拟一个多页面的Web应用,使得读者能够对session的使用有深入的了解。第一个页面(session1.jsp)仅仅包含了一个要求输入用户名的HTML表单,代码如下:
第二个页面(session2.jsp)需要通过request对象获取session1.jsp页面中的username参数值,并把它保存在session中。session对象是以哈希表存储信息的。session2.jsp的另外一个操作是询问第二个问题,具体的代码如下:
第三个页面(session3.jsp)主要任务是显示回答结果。具体代码如下:
程序说明:通过关键字theusername使用session对象中的getAttribute(String key)方法获取到用户名,并把用户名和第二个问题的答案显示出来。session内置对象的使用非常频繁,例如,使用session来存储用户的信息,并可以根据session中的用户对象是否为空来判断用户是否已经登陆。所以读者对此对象的使用要熟练掌握。

五、application内置对象

application是javax.servlet.ServletContext类对象的一个实例,用于实现用户之间的数据共享(多使用于网络聊天系统)。application对象与session对象的区别它的作用有点类似于前一节介绍的session内置对象。但是它们之间还是有区别的,一般来说,一个用户对应着一个session,并且随着用户的离开session中的信息也会消失,所以不同客户之间的会话必须要确保某一时刻至少有一个客户没有终止会话;而applicat则不同,它会一直存在,类似于系统的“全局变量”,而且只有一个实例。application对象的常用方法application内置对象的常用方法如下:
网站计数器实例同样,下面将通过一个实例来讲解Application内置对象中常用方法的使用。在模块helloworld中创建一个setappattr.jsp页面,用于获取application内置对象中的信息以及设置计数初始值,详细代码如下:
程序说明:此处调用了application内置对象中的setAttribute()方法来存储用户名信息以及计数初始值。另外在相同目录下创建另外一个getappattr.jsp文件,用于获取计数值。具体的代码如下:
程序说明:和session对象一样,application存储的是对象类型而不是普通的数值类型。此处调用了application对象中的getAttribute()方法来获取前一个页面所存储的信息,并把读取出的计数值加一,然后重新存储在application当中去。当关闭以上运行的两个浏览器窗口,再多次交替地打开和关闭getappattr.jsp窗口,会看到计数值一直在递增,只用tomcat服务不关闭。而session对象存储的信息会随着窗口的关闭而释放。

六、out内置对象

out对象是在JSP开发过程中使用得最为频繁的对象,但使用也是最为简单的。out对象的常用方法out对象的常用方法如下:
其中print()与println()两个方法是使用最为频繁的。数据输出实例下面,同样将举一个例子来讲解out内置对象的使用方法。创建一个out.jsp文件,详细代码如下:
程序说明:page指令中的buffer属性用来设置缓冲区的大小。autoFlush属性为true表示缓冲区是自动清空的。在浏览器中运行这个JSP页面将会发现,程序只能输出到i=106,后面的数字以及内容将全部被清空了,显示不出来。这是因为out对象调用的clearBuffer()方法把缓冲区当前内容全部清除掉了。把程序中的clearBuffer()方法换成clear()方法,再运行会报错。这是因为在调用clear()方法之前,缓冲区已经自动清除过了(autoFlush=true)。如果把程序中的循环次数改小一点,则不管程序调用的是clear()还是clearBuffer()方法,浏览器上将什么也不显示。因为内容已经被clear()或者clearBuffer()方法清空掉了。但这时使用clear()方法却不会出错,因为缓冲区这时还没有满,autoFlush没有起到作用。

七、exception内置对象

exception内置对象是用来处理页面出现的异常错误,它是java.lang.Throwable类的一个对象。前面已经讲过,在实际JSP网站开发过程中,通常是在其页面中加入page指令的errorPage属性来将其指向一个专门处理异常错误的页面。如果这个错误处理页面已经封装了这个页面收到的错误信息,并且错误处理页面页面含有的isErrorpage属性设置为true,则这个错误处理页面可以使用以下方法来访问错误的信息:
异常错误一般都是开发人员无法避免的,所以对各种可能的异常进行后期的处理和提示是非常必要的。读者要养成及时处理各种异常错误的习惯。

八、config内置对象

config内置对象是ServletConfig类的一个实例。在Servlet初始化的时候,JSP引擎通过config向它传递信息。这种信息可以是属性名/值匹配的参数,也可以是通过ServletContext对象传递的服务器的有关信息。
一般在JSP开发过程很少使用到config内置对象。只有在编写Servlet时,需要重载Servlet的init()方式时才用到。

九、pageContext内置对象

pageContext对象是一个比较特殊的对象。它相当于页面中所有其他对象功能的最大集成者,即使用它可以访问到本页面中所有其他对象,例如前面已经描述的request、response以及application对象等。pageContext对象的常用方法这个对象中常使用的方法如下:
之上提到的scope范围的取值含义:
pageContext对象的简单实例下面为应用pageContext对象的示范例子:
pageContext对象在实际JSP开发过程中很少使用,因为像request和response等对象本来就可以直接调用方法进行使用,如果通过pageContext来调用其他对象就有点舍近求远

EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。
语法:${隐式对象名称} :获得对象的引用
隐含对象名称描 述
pageContext对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。)
pageScope代表page域中用于保存属性的Map对象
requestScope代表request域中用于保存属性的Map对象
sessionScope代表session域中用于保存属性的Map对象
applicationScope代表application域中用于保存属性的Map对象
param表示一个保存了所有请求参数的Map对象
paramValues表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
header表示一个保存了所有http请求头字段的Map对象
headerValues同上,返回string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
cookie表示一个保存了所有cookie的Map对象
initParam表示一个保存了所有web应用初始化参数的map对象

例子

1.1 pageContext
<%
pageContext.setAttribute("name", "aaaa");
%>
${name} <!--取出pageContext里面的name属性-->
1
2
3
4
1
2
3
4
1
2
3
4
1.2 sessionScope
<%
session.setAttribute("user", "");
%>
<!--获取session里面的值,与pageContext有点区别-->
${sessionScope.user==null ?"您没有登录":"欢迎您," }${user }
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1.3 requestScope
<%
request.setAttribute("age", "20");
%>

<!--获取reqeust里面的值,与pageContext有点区别-->
${requestScope.age}
1
2
3
4
5
6
1
2
3
4
5
6
1
2
3
4
5
6
1.4 param 和paramValues 取地址栏参数
http://127.0.0.1:8080/day10/04param.jsp?name=junjiex&age=10&age=20

<!--获取name-->
${param.name }

<!--获取age数组-->
${paramValues.age[0] }<!--得到10-->
${paramValues.age[1] }<!--得到20-->
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: