最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

jsp教程下:10分钟学会jsp内置对象域对象及el表达式

Javaweb admin 浏览 评论

jsp教程下,10分钟能学会jsp内置对象,域对象及jsp el表达式,并了解其作用,为什么说10分钟就能学会jsp的这3大知识点呢?因为太简单了,先来看看jsp内置对象,域对象,el表达式的概念及其作用。

jsp内置对象是在jsp页面中能直接拿来用而不需要new的对象就叫jsp内置对象,域对象是用于在jsp页面中能直接取值的对象就叫域对象,前两者都是在jsp页面写java代码,这样会使jsp页面变得很臃肿,所以出现了jsp el表达式,它是网页标签的形式取值,是一种开发标准,代替了域对象取值的方法。

下面的表格你将清晰的了解jsp内置对象和域对象的区别,先看看这个,"Student stu = new Student();",其中Student是对象的类名称,stu代表的就是new后的对象名称,学java的你应该很清楚吧!

对象名称对象类名称描述
pageContext
PageContextpage域对象,数据只在当前页面中有效
request
HttpServletRequestrequest域对象,数据在request中有效
sessionHttpSessionsession域对象,数据在session中有效
application
ServletContext
application域对象,数据只要tomcat没关就有效
response
HttpServletResponseresponse相应对象
config
ServletConfig
config配置文件管理对象
out
JspWriter
带缓冲功能的输出对象
exception
Throwable异常对象(必须设置当前为错误页面时才能使用)
pagethis
当前对象

其中最上面的4个是域对象,其实域对象也就是jsp内置对象,域对象都有一个特点,例如他们都有这两个方法:

//就是可以在jsp页面中设置值到域对象中以及从域对象中取值
对象名称 .setAttribute("name","张三");
对象名称 .getAttribute("name");

它们的区别是什么呢?就是作用域范围不一样,分别从小到大排列page < request < session < application。

我们先来看看域对象在jsp中是怎么使用的?我们在myeclipse或者eclipse中创建一个web项目,然后新建一个test.jsp页面,写上如下jsp代码,意思就是把值存在各个域对象中,然后用对象名称 .getAttribute("name")方法分别把他们取出来。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">   
    <title>域对象测试</title>
  </head>
  
  <body>
   <%
   		//分别在域对象中设置域对象的值
   		pageContext.setAttribute("name", "page张三");
   		request.setAttribute("name", "request李四");
   		session.setAttribute("name", "session王五");
   		application.setAttribute("name", "application李白");  		  		
   %>
   <!-- 分别在jsp表达式中取域对象的值 -->
   <%=pageContext.getAttribute("name") %><br/>
   <%=request.getAttribute("name") %><br/>
   <%=session.getAttribute("name") %><br/>
   <%=application.getAttribute("name") %><br/>
  </body>
</html>

上面页面的tomcat的运行结果分别是:

page张三
request李四
session王五
application李白

这样我们就可以通过域对象获取到各自域对象的值了,那么我们如何用jsp el表达式来获取这些域对象呢?方法很简单,只要把上面的jsp表达式的获取方法改成el表达式就可以获取值了,格式是:域对象+Scope点属性key,这是固定格式,如下。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">   
    <title>域对象测试</title>
  </head>
  
  <body>
   <%
 		//分别在域对象中设置域对象的值
 		pageContext.setAttribute("name", "page张三");
 		request.setAttribute("name", "request李四");
 		session.setAttribute("name", "session王五");
 		application.setAttribute("name", "application李白");  		  		
   %>
   <%--jsp el表达式的方式获取域对象的值--%>
   ${pageScope.name}<br/>
   ${requestScope.name}<br/>
   ${sessionScope.name}<br/>
   ${applicationScope.name}<br/>
  </body>
</html>

以上的运行结果是一样的,其实前面的Scope部分是可以省略的,我们可以改成。

${name}<br/>

这样你会问上面的4个改成下面的1个jsp el表达式,省略掉前面的Scope范围,那么输出的结果是什么?结果一定是输出域对象范围最小的那一个,这也是我上面为什么首先说了一下他们范围的大小顺序,结果一定是,最小的那位。。

page张三

那么你又会问了,感觉el表达式在setAttribute部分不是一样不能省略吗?第二是我要输出4个结果,你却给我输出一个结果,怎么回事?

回答:其实在开发中,setAttribute部分是从后台java代码传过来的,jsp页面是不写逻辑处理的,只需要用jsp el表达式在页面取值就好了。第2个问题,在后台开发中,一般不会传给前台几个同样的name给同一个页面的,如果有的话,就要加上域范围的形式了,如上的那样,什么域对象设置的值,就用什么域对象的el表达式取值,这样就不会搞混了。

如果setAttribute("stu",student)设置的是对象作为值和setAttribute("list",list)集合作为值传入该怎么用jsp el表达式在页面中取值呢?方法也很简单,代码如下。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="com.taotao.Student"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">   
    <title>域对象测试</title>
  </head>
  
  <body>            
   <%            //备注,我新建了一个学生类,里面有两个属性,id和name,如果你们要测试,一定要新建一个学生类。
   
		//将Student对象值通过request域对象传到页面
		Student stu = new Student();
   		stu.setId("1");
   		stu.setName("域对象从student对象中拿到张三");
   		request.setAttribute("stu123", stu);
		//创建第2个学生		
		Student stu2 = new Student();
   		stu2.setId("2");
   		stu2.setName("域对象从list集合中拿到李四");
   		
   		//将list集合作为值传到页面
   		List<Student> list = new ArrayList<Student>();
		list.add(stu);
		list.add(stu2);
		request.setAttribute("list123", list);
		
   %>
	<!--el表达式从request域对象中取出学生姓名 -->
   ${requestScope.stu123.name}<br/> //因为学生中有getName()方法,el表达式可以直接去掉get,然后N小写,直接.name就可以获取name的属性值
   
   <!--el表达式从request域对象中取出第2个学生的姓名 -->
   ${requestScope.list123[1].name}<br/>  //因为学生中有getName()方法,el表达式可以直接去掉get,然后N小写,直接.name就可以获取name的属性值
  </body>
</html>

以上代码的输出结果是:

域对象从student对象中拿到张三
域对象从list集合中拿到李四

jsp内置对象,域对象,el表达式就讲到这里,希望你能轻松看懂,并自己新建一个项目测试一下。


来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/javaweb/2017/0207/61.html

    与本文相关的文章

    发表我的评论
    取消评论

    表情

    您的回复是我们的动力!

    • 昵称 (必填)

    网友最新评论