Jsp的内置对象(这一部分的概念性东西比较多,就不贴代码了,随便敲两下就能看到效果)
(本文需要的Jar包:commons-beanutils-1.8.3.jar
commons-logging-1.1.1.jar)
1.不要在jsp页面中创建,可以直接使用的对象
对象名 | 主要作用 | 备注 |
Request(域对象) | 获取请求信息 | 相当于Servlet中的HttpServletrequest |
Response | 获取相应信息 | 相当于Servlet中的HttpServletResponse |
Session(域对象) | 获取Session | 相当于Servlet中的HttpSession |
pageContext(域对象) | 当前页面 | jsp特有的域对象 |
application(域对象) | 获取Web中的文件 | 相当于Servlet中的ServletContext |
config | 获取servlet名称,初始化参数 | 相当于Servlet中的ServletConfig |
page | 当前对象 |
|
out | 输出对象 | 向页面输出内容 |
exception | 错误对象 | 需要配置指令isErrorPage |
2开发中用的比较多的对象:
2.1 Out对象:
2.1.1需要注意的是,这个对象和response.getWriter()使用的不是一个对象
out使用的是JspWriter
response.getWriter()使用的是PrintWriter
2.1.2 输出机制
使用Out对象输出,会产生两个缓冲区,Out缓冲区和response缓冲区
在代码中如果同时用这两个对象进行页面内容的输出,会发现response输出内容在Out输出之前,这是因为Out缓冲区不能直接输出内容,会把内容先放到response缓冲区中,再通过该缓冲区输出内容,故而它的内容在response.getWriter()输出的内容之后
2.2 PageContext对象:是一个域对象
2.2.1注意事项:只能在jsp中使用,范围是当前页面(还好比request范围大)
2.2.2 作用:
①设置,获取值
设置值:setAttribute(java.lang.String name, java.lang.Object value)
获取值:getAttribute(java.lang.String name)
②可以向其他三个域对象中设置值,获取值(当然,也可以给它自己设置自己的值,笑)
其它三个域对象:application,session,request
设置值:setAttribute(java.lang.String name, java.lang.Object value, int scope)
获取值:getAttribute(java.lang.String name, int scope)
③获取到其他的八个内置对象
pageContext.getXXX();//xxx代表内置对象名
④findAttribute(java.lang.String name)方法(el表达式直接获取属性的原理)
获取对应名称的属性值,需要注意的是,当多个域对象中有重复的属性名时,它会获取其中范围最小的值
⑤域对象作用范围:
ServletContext(application) | 整个Web项目 |
Session | 一次会话(打开关闭浏览器) |
Request | 一次请求 |
pageContext | 当前页面 |
3 Jsp的动作标签(这玩意局限性比较大,它只能在jsp中使用,笑)
3.1 作用:在jsp中使用动作标签可以完成的功能
3.2 写法:<jsp:动作标签名称 属性=”属性值”></jsp:动作标签名称>
3.3 常用的动作标签:(注意不要在开始结束标签中写文本,会报错)
3.3.1 <jsp:forword>:转发(类似于get提交)
<jsp:forward page="路径"></jsp:forward>
3.3.2<jsp:include> :页面包含(动态包含)
原则:直接写内容
动态包含会生成多个servlet
可以传递参数,定义变量(意义暂时不明.可能是我开发中用的比较少,暂时没有太好的栗子做解释)
(3)<jsp:param> :传递参数
在带路径的动作标签里面使用(get提交后面的小尾巴)
<jsp:forward page="路径">
<jsp:param name="属性名" value="属性值" ></jsp:param>
</jsp:forward>
3.4 下面的三个动作标签用于操作javabean(下面会有详细解释,这里只做概述)
(不过这个方法用的很少,局限性比较大,不如直接用BeanUtils框架封装更好)
3.4 <jsp:useBean>
3.5 <jsp:setProperty>
3.6 <jsp:getProperty>
4 JavaBean(关于MVC和Dao模式写在另外一篇文章,这里只做简单概述)
4.1 本质上是一个java类,一般而言遵循下面的书写规范
4.1.1,在javaBean里面一定有一个公开的没有参数的构造方法,可以写有参构造,但是一定要再写一个无参构造
4.1.2,在javaBean里面属性是私有的(private)
4.1.3,私有的属性要通过公开的方法暴露出来(get set方法),对外提供公共的访问方式
4.2 JavaBean的主要用途是用来封装数据
2.1使用set方法来设置值
2.2使用get方法来获取值
4.3 如何封装到JavaBean
4.3.1使用Java方式(创建对象,set设置属性,从页面获取信息,创建JavaBean对象,调用方法储存,一般会把对象放到一个集合之中)
4.3.2使用jsp中的动作标签(<jsp:setProperty></jsp>)
①<jsp:useBean name="" class="" scope>
设置要封装的是哪一个javaBean,name对象名,class包路径
②<jsp:setProperty Property="" name="">
向哪个属性设置值Property属性名.name对象名
不要通过getParameter()获取,会自动读取提交过来表单中的键值对
简写Property="*"一次性封装所有属性
要求表单中的属性名跟封装类的成员变量名一致
③<jsp:getProperty Property="" name="">
从哪个属性获取值roperty属性名.name对象名
会自动写到页面上
4.3.3使用BeanUtils框架进行封装
4.3.1使用beanUtils框架封装(算是一个小型的类库)
是阿帕奇(谢谢老板)组织开发的技术 ,用于封装数据到javaBean的操作,导入jar包,Web项目jar包放到WEB-INF里,会自动加载
4.3.2要求:表单输入项name的属性值要和javaBean中的成员变量名称一致
4.3.3注意事项:
使用框架里的BeanUtils类里面方法populate(obj map)
obj 需要封装的对象map要封装的数据的Map(key:属性名称,value:值)
request.getParameterMap(),
返回Map集合,key是表单输入项name属性的值,value是输入值
5 el表达式(一直把el表达式给忘了,这里补上)
小技巧: 通过el表达式获取项目名称pageContext.getRequest().getContentPath()
${pageContext.Request.ContentPath}
通过el表达式获取一个类中成员变量是一个引用数据类型中的属性
//在用户类中有一个成员是地址类,对外有setget方法,并且已经被私有
//在地址类中有一个属性叫省份,对外有setget方法,并且已经被私有
//使用el表达式可以直接通过用户对象.地址属性.省份属性获取到省份
//也可以加getAddr但是有的版本不支持,所以干脆就用属性名即可
User u1 =new User();
Addr ar =new Arrt();
ar.setProvinceName(“省份名称”);
u1.setAddr(ar);
${u1.addr.provincename}
5.1 el表达式可以很方便的获取域对象中的值,经常跟html标签一起使用
使用范围:jsp页面,不能单独在html中使用,但是可以在javaScript代码中使用(获取服务端传递的域对象中json的数据)
写法:${域对象名称}
5.2.1获取数组
${数组[0]} 索引越界返回为空字符串 ""
5.2.2.1获取list集合,直接通过下标
${集合[0] }
${集合[1000] }<!-- 空字符串 -->
//el表达式获取不到set集合的值
5.2.2.2获取Map集合,集合名.键名获取值,如果键不存在,获取为空字符串""
${map001.张三 }
${map001["李四"]}//这里必须有双引号
${map001.王五 }
${map001.awdawd } <!-- 空字符串 -->
//Map的键类型为Integer是获取不到的,会报错
5.2.3获取对象的属性
<%
Student s1 =new Student();
s1.setName("孙琦");
s1.setAge(26);
//放到域对象里面
pageContext.setAttribute("s1", s1);
%>
<%--使用el表达式获取值 --%>
${s1.name }
${s1.age }
${s1.adwadwad}//报错
<hr/>
${s1.toString() }
5.3, el表达式其它的操作
5. 3.1.1 数学运算 +,-,*,/
5. 3.1.2 关系运算>,<,<=,<=
5.3.1.3 逻辑运算|,&,&&,||
5.3.2 empty运算符
(1)判断对象是否为空
=${s1==null}
=${empty s1}
=${s1!=null}
=${not empty s1}
5.3.3 三元表达式
5. 3.3.1 ${s1!=null?s1.name:""}
${not empty s1?s1.name:""}
5.3.4 在el表达式中有11个隐含的对象(内置对象)
5.3.4.1 5个域对象,4个后面加Scope,pageContext
5.3.4.2 pageContext隐含对象,对应于jsp页面的pageContext对象,
整理时间2016.05.13