重温jsp③
Jsp详细
九大内置对象
Out jsp的输出流,用来向客户端响应
page 当前jsp对象!他的引用类型是object,即真身中有如下代码:object page=this;
Session httpsession
request httprequest
response httpsponse
Exception Throwable
application servletcontext
config servletconfig
pagecontext 一个顶九个
pagecontext
一个顶九个
Servlet中有三大域。Jsp有四大域
1servletContext 整个应用程序
2Session:整个会话(一个会话只有一个用户)
3request一个请求连
4pageContext 一个jsp页面,这个域是在jsp页面和当前jsp页面中使用的标签中共享数据
域对象 可以代理其他域!
Jsp三大指令
一个jsp页面可以配置多个指令。
1.Page
%@page language="java" info="xxx"....%
pageEncoding:指定当前页面的编码,在服务器把jsp编译成.java时需要使用pageEncoding
ContentType:它表示一个响应头,Content—type!等同于response.setContentType("text/html;charset=utf-8 ");
Import 导包,可以出现多次
ErrorPage和iserrorpage
如果当前页面抛出异常,那么要转发到一个页面,有errorpage来指定。
Iserrorpage 表示当前页面是否为处理页面!当属性为true时这个页面会设置状态码为500,而且这个页面可以使用九大内置对象的exception。
AutoFlush指定jsp的输出流缓冲区满时,是否自动刷新,默认为true,如果为false,那么缓冲区满时抛出异常。
Buffer 指定缓冲区大小,默认为8kb,通常不需要修改。
IsELIgnored 是否忽略el表达式,默认为false,不忽略,即支持!、
2Include—》静态包含 在运行8之前就已经包含了。
与requestDispatcher的include()方法功能类似
<%@include%> 她在jsp编译成Java文件时完成,共同生成一个Java,然后生成class文件
两个页面的内容不能有相同的标签。被包含的页面路径不能为变量,因为是在编译的时候就要合并页面了,而变量是在运行时才有值。
RequestDispatcher的include()方法,包含和被包含的是两个servlet,及两个.class他只是在响应的时候将包含的内容包含在一块了。
作用:把页面分解了,适用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立的jsp,而我们只需处理变化的页面。
3Taglib—导入标签库
两个属性:
Prefix:指定标签库在本页面的前缀!由是我们自己来起名字
Uri:指定标签库的位置。
Jsp的动作标签
这些jsp的动作标签,与html提供的标签有本质的区别。
动作标签是由tomcat(服务器)来解释执行!它和Java代码一样,都是在服务器端执行。
Html有浏览器执行
<jsp:forward>:转发 他与requestDispatcher的forward方法一样的,一个是在servlet中使用,一个是在jsp中使用!
<jsp:include>:包含 它与requestDispatcher的include方法一样的,一个是在servlet中使用,一个是在jsp中使用!
<%@include%>静态包含 代码编译到一块和<jsp:include>动态包含 各编译各自的代码
<jsp:param>
Java bean
@Test public void fun1() throws Exception{ String className="com.pcx.domain.Person"; Class clazz=Class.forName(className); Object bean=clazz.newInstance();
BeanUtils.setProperty(bean, "name","张三"); BeanUtils.setProperty(bean, "age","21"); BeanUtils.setProperty(bean, "gander","男"); //拿到其中的属性 String age=BeanUtils.getProperty(bean, "age"); System.out.println("年龄为:"+age);
System.out.println(bean); }
/** * 将一个map中的值封装成一个user对象 */ @Test public void fun2() throws Exception{ Map<String, String>map=new HashMap<String, String>(); map.put("username", "张三"); map.put("password", "123"); User u=new User(); BeanUtils.populate(u, map); System.out.println(u); }
/** * 测试传智给的jar包 */ @Test public void fun3(){ Map<String, String>map=new HashMap<String, String>(); map.put("username", "张三"); map.put("password", "123"); User user=CommonUtils.toBean(map, User.class); System.out.println(user);
} |
El表达式
Jsp内置的表达式语言。
全域查找 ${}
指定区域
${pageScope.xxx}
${requestScope.xxx}
${sessionScope.xxx}
${applicationScope.xxx}
El代替的是<%=…%>也就是说el只能做输出!
El表达式可以操作四大域。
如果不存在,则输出空字符串。
而不是null
<body>
<% Adress adress=new Adress(); adress.setCity("济南"); adress.setStreet("长青");
Employee emp=new Employee(); emp.setName("李四"); emp.setSalary(124354); emp.setAdress(adress);
request.setAttribute("emp", emp); %> el获取request域中的emp属性 <br> ${requestScope.emp.adress.street } </body> |
El十一大内置对象
Page Request Session application
11个内置对象 10个是map pagecontext不是map 他就是pageContext 一个顶10个
Param
一个参数${param.username } 访问:/1.jsp?username=123
多个参数 ${paramValues.hobby[0] } ${paramValues.hobby[1] }
访问:1.jsp?hobby=c1&hobby=sj
${header['User-Agent'] } 效果: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36 |
初始化参数 ${initParam.xxx}
<context-param> <param-name>xxx</param-name> <param-value>XXX</param-value> </context-param> <context-param> <param-name>yyy</param-name> <param-value>YYY</param-value> </context-param> |
拿到cookie对象
${cookie.JSESSIONID }
拿到cookie的值
${cookie.JSESSIONID.value }
PageContext
${pageContext.request.contextPath}
El函数库(由jstl提供)
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
自定义函数库
写一个类 有静态方法。
写一个在web-inf目录下创建一个tld配置文件
在jsp页面中就可以用了