java中的jsp小节五
1.默写九大隐式对象
JSP九个隐式对象:
request 表示客户端的请求,包含了所有的请求信息,是service方法的resquest参数
response 处理JSP生成的响应,然后将响应结果发送给客户端,是service方法response参数
page 对应this关键字,JSP网页本身,page对象是当前页面转换后的Servlet类的实例。从转换后的Servlet类的代码中,可以看到这种关系:Object page = this;在JSP页面中,很少使用page对象
pageContext javax.servlet.jsp.PageContext的实例,该对象代表该JSP 页面上下文,使用该对象可以访问页面中的共享数据。常用的方法有getServletContext()和getServletConfig()等。
session 表示用户的会话状况,用此机制可以轻易的识别每一个用户,能保存和跟踪用户的会话状态,是HttpSession的一个实例
application 服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象
out out对象是一个输出流,用来向客户端输出数据,out对象用于各种数据的输出。
config javax.servlet. ServletConfig的实例,该实例代表该JSP的配置信息。常用的方法有getInitParameter(StringparamNarne) 及getInitParameternarnes()等方法。事实上, JSP页面通常无须配置,也就不存在配置信息,因此,该对象更多地在Servlet中有效。
exception java.lang.Throwable的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page 的isErrorPage属性为true 时,该对象才可以使用。常用的方法有getMessage()和printStackTrace()等。
2.简述page指令的各个属性的值。
page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。
① import属性:
page指令中唯一容许在同一文档出现多次的属性,属性的值可以以逗号隔开。 指定jsp页面转换成servlet应该输入的包,对于没有明确指定包的类,将根据jsp页面所在的包(生成的servlet的目录)决定类的包的位置。 这意味着,将在jsp页面所在的包来寻找该类。
一定要将实用工具类和bean包放在指定的包中,不要依赖于自动导入。
② language属性:
用于指定在脚本元素中使用的脚本语言,默认java,在jsp2.0规范中,只能是java。
③ contentType和pageEncodeing属性: contentType属性设置发送到客户端文档的响应报头的MIME类型和字符编码,多个使用;号分开。 pageEncodeing属性只用于更改字符编码。 servlet默认MIME是text/plain,jsp默认MIME是text/html。
④ session属性:
控制页面是否参与会话,默认true,如果存在已有会话,则预定义session变量,绑定到已有会话中,否则创建新会话将其绑定到session,对于高流量网站,设置false可以节省大量服务器内存。 设置false表示不自动创建新会话,在jsp页面转换为servlet时,这时对变量session的访问导致错误。 设置为false并不是禁用会话跟踪,它只是阻止jsp页面为不拥有会话的用户创建新会话。
对于不需要会话跟踪的页面那就设置为false,当设置为false时session对象是不可访问的。
⑤isELlgnored属性:定义在jsp页面中是否执行或忽略EL表达式,true表示忽略,false表示执行。 默认值依赖于web.xml的版本,servlet2.3之前默认true,servlet2.4默认false。 用于JSP版本不一致造成使用EL表达式出现的问题,使用:isELlgnored="true";
⑥buffer和autoFlush属性: buffer属性指定out对象(JspWriter)使用的缓冲区大小,以kb为单位,默认8kb。 none表示不使用缓冲区,这样要求设置报头或状态代码的jsp元素要出现在文件的顶部,任何HTML内容之前。
autoFlush属性控制当缓冲区满了后,是自动清空输出缓冲区(默认true),还是在缓冲区溢出后抛出异常(false)。 在buffer=none的时候,autoFlush=false是错误的。 ⑦info属性: 定义一个可以在servlet中通过getServletInfo方法获取的字符串。
jsp容器做的是在servlet中生成getServletInfo方法返回info属性指定的String。
⑧errorPage和isErrorPage属性:
指定页面专用的错误页面,errorPage属性用来指定一个jsp页面,由该页面来处理当前页面中抛出但没有捕获的任何异常,指定的页面可以通过exception变量访问异常信息。isErrorPage属性表示当前页是否可以作为其他jsp页面的错误页面,可以是true或false。 错误页面应该放在WEB-INF目录下面,只让服务器访问,也不会生成转发的调用,客户端只能看到最初的请求页面URL,看不到错误页面的URL。 如果为整个web应用程序指定错误页面,或为应用中不同类型的错误指定错误处理页面,使用web.xml中的error-page元素。
如果一个页面通过该属性定义了专有的错误页面,那么在web.XML文件中定义的任何错误页面不会被使用。 只能够在错误处理页面中使用错误对象exception。
⑨isThreadSafe属性:
采用显式的同步来代替该方法。 控制由jsp页面生成的servlet是否允许并发访问(默认true允许)。 这种阻止并发访问的实现是基于SingleThreadModel接口。所以,避免使用isThreadSafe属性。
⑩extends属性:
extends 属性指定 JSP 页面所生成的 servlet的超类(superclass)。它采用下面的形式:
<%@ pageextends="package.class" %>
这个属性一般为开发人员或提供商保留,由他们对页面的运作方式做出根本性的改变(如添加个性化特性)。一般人应该避免使用这个属性,除非引用由服务器提供商专为这种目的提供的类。