一、JSP三大指令
1,page
(1)pageEncoding:指定当前jsp页面的编码,只要跟设置的编码方式是一致的,就不会有乱码。在服务器要把jsp编译成.java时,需要使用pageEncoding.
Content-Type:表示一个响应头,等同于response.setContentType("text/html;charset=UTF-8");
以上两个属性只设置其中一个,那么另一个与之设置的值一样。
(2)import导入包。可以多次出现。<@ page import="java.util.*;">
(3)errorPage和isErrorPage
--》errorPage:当前页面如果抛出异常,会转发到哪一个页面。
--》isErrorPage:指定当前页面是否为处理错误的页面,这个页面会设置状态码为500,而且这个页面可以使用9大内置对象的exception。只有声明了isErrorPage="true"的页面才能使用exception
还可以通过在web.xml设置出错显示页面的信息,这时候就不用在页面中设置“errorPage="errorPage.jsp"”的属性了。代码如下:
<error-page>
<error-code>404</error-code>
<location>/errorpage/errorPage.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/errorpage/errorPage.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.RuntimeException</exception-type>
<location>/index.jsp</location>
</error-page>
--》autoFlush和buffer
autoFlush:指定jsp的输出流缓冲区满时,是否自动刷新,默认为true,如果为false,那么缓冲区在满时会抛出异常;
buffer:指定缓冲区的大小,默认为8kb,通常不需要修改。
--》isELIgnored:是否忽略EL表达式,默认值为false。即不忽略EL表达式。
--》基本上不用的属性:
language:指定当前jsp编译后的语言类型,默认值为java。目前为止只能编译成java
info:信息
isThreadSafe:当前jsp是否支持并发访问,默认为false。允许并发。
session:当前页面是否支持session。如果为false,那么当前页面就没有session这个内置对象。
entends:让jsp生成的servlet去继承该属性指定的类。
2,include:静态包含
与RequestDispatcher的include()方法的功能相似。
两者的区别:
<%@include%>它是在编译成java文件时完成的共同生成一个java(就是一个servlet)文件,最后生成一个class。直接把被包含文件的代码包含进来,注意被包含页面不能在设置html的各种头信息了,直接写body内的内容即可。
RequestDispatcher的include()方法,包含和被包含的是两个servlet,即两个.class。他们只是把响应的内容在运行时合并了。
作用:把页面分解了,使用包含的方式组合在一起,这样页面中不变的部分,就是一个独立的jsp.
3,taglib:导入标签库
两个属性:
(1)prefix:指定标签库在本页面的前缀,有我们自己来起名称;
(2)url:指定标签库的位置
<%@taglib prefix="pre" url="/struts-tags"%>
<pre:text></pre:text>处多个理标签库中的名称冲突。例如a标签库有text标签,b标签库中也有text标签。那么为了区分这两个标签,会使用前缀。
二、九大内置对象:
记法:ORRCS APPE
out:等同于request.getWriter();输出数据
request:请求对象
response:响应对象
config:即对应被编译后的jsp文件中的ServletConfig
session:HttpSession类的对象
application:即ServletContext类的对象
page:当前JSP的真身类型,当前JSP页面的this,即当前对象
pageContext:页面上下文对象,它是一个域对象。
exception:只有在错误页面中使用这个对象
1.pageContext:一个顶九个
Servlet中有三个域。而JSP中有四个域。它就是JSP中最后一个域对象。setAttribute()、getAttribute()、removeAttribute()
--》ServletContext(application):整个应用程序
--》session:一次会话
--》request:一次请求
--》pageContext:当前JSP页面,这个域是在当前JSP页面和当前JSP页面中使用的标签之间共享数据。理解:在当前页面有两个空间,本页面和在本页面中使用的标签。
(1)可以代理其他域:pageContext.setAttribute("xxx","XXX",PageContext.SESSION_SCOPE);将xxx参数存到了session域中。
(2)全域查找:pageContext.findAttribute("xxx");从小域到大域,依次查找。大小域中存在同名的参数,那么小域优先级大于大域。非常重要
(3)可以获取其他8个内置对象:getPage(),getResponse().......