把稳:一个page指令中,可以有多个【属性名称=属性值】,也可以多次利用page指令。
1.2、指令属性page指令中,供应了很多个属性,常见的属性有这几个:contentType、pageEncoding、errorPage、isErrorPage、import、language、session、isELIgnored,下面我们就先容每一个属性的浸染。
这一小节先容errorPage、isErrorPage、session、isELIgnored四个属性的浸染。
(1)session
session属性浸染:设置当前JSP页面中是否可以利用session工具,取值:true、false。默认是true,设置成false,那么当前JSP页面里面就不能利用session工具。
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ page session="true" %><html><head> <title>JSP指令之Page</title></head><body> <h3>JSP指令之Page</h3> <% // 利用session工具 Object username = session.getAttribute("username"); System.out.println(username); %></body></html>
如果设置session="fasle",那么在JSP页面中利用session,编译会报错,如下所示:
这是由于,当我们设置session="false"的时候,JSP编译之后,对应的java源代码中,都不会定义session变量,来看下session设置成true和false两种情形下,对应的源代码如下图所示:
(2)isELIgnored
isELIgnored属性浸染:这个属性的浸染是设置当前JSP页面是否忽略EL表达式,取值:true、false,默认值是true。
false表示当前页面不忽略EL表达式,那么也便是说,当前JSP页面支持EL表达式;设置成true之后,那么当前JSP页面中如果利用了EL表达式的内容,此时会被当作普通字符输出。<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ page isELIgnored="true" %><html><head> <title>JSP指令之Page</title></head><body> <h3>JSP指令之Page</h3> 利用EL表达式获取参数: ${"输出EL表达式内容"}</body></html>
运行结果如下所示:
当我们设置成isELIgnored="false"的时候,再次访问jsp页面,此时结果如下所示:
(3)isErrorPage
isErrorPage属性浸染:指定当前JSP页面是否作为缺点处理界面,取值:true、false,默认值是false。设置成true之后,那么当其他的JSP页面发生报错的时候,通过errorPage属性,就会转发到这个缺点页面。
把稳:isErrorPage属性一样平常是和errorPage属性结合利用的。
(4)errorPageerrorPage属性浸染:指定当前JSP页面的缺点页面地址,一样平常是和isErrorPage属性结合利用。errorPage设置的相对路径,源代码上便是转发到对应的缺点页面。
首先创建一个error.jsp页面。<%@ page contentType="text/html;charset=UTF-8" language="java" %><%-- 指定当前页面是缺点页面 --%><%@ page isErrorPage="true" %><html><head> <title>JSP缺点显示页面</title></head><body> <h3> Sorry,你访问的页面报错啦!
接着再创建一个page.jsp页面。
!
!
</h3></body></html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%-- 指定缺点页面的路径地址 --%><%@ page errorPage="error.jsp" %><html><head> <title>errorPage属性</title></head><body> <%-- 仿照报错 --%> <% int i = 10 / 0; %></body></html>
启动Tomcat容器,浏览器访问http://localhost:8080/servlet/page.jsp,结果如下所示:
查看page.jsp编译之后对应的源代码,可以看到有一个handlePageException()方法,这个方法便是处理JSP页面非常的。
点进去查看源代码,如下所示:
private void doHandlePageException(Throwable t) throws IOException, ServletException { if (this.errorPageURL != null && !this.errorPageURL.equals("")) { this.request.setAttribute("javax.servlet.jsp.jspException", t); this.request.setAttribute("javax.servlet.error.status_code", 500); this.request.setAttribute("javax.servlet.error.request_uri", ((HttpServletRequest)this.request).getRequestURI()); this.request.setAttribute("javax.servlet.error.servlet_name", this.config.getServletName()); try { this.forward(this.errorPageURL); } catch (IllegalStateException var3) { this.include(this.errorPageURL); } Object newException = this.request.getAttribute("javax.servlet.error.exception"); if (newException != null && newException == t) { this.request.removeAttribute("javax.servlet.error.exception"); } this.request.removeAttribute("javax.servlet.error.status_code"); this.request.removeAttribute("javax.servlet.error.request_uri"); this.request.removeAttribute("javax.servlet.error.servlet_name"); this.request.removeAttribute("javax.servlet.jsp.jspException"); } else if (t instanceof IOException) { throw (IOException)t; } else if (t instanceof ServletException) { throw (ServletException)t; } else if (t instanceof RuntimeException) { throw (RuntimeException)t; } else { Throwable rootCause = null; if (t instanceof JspException || t instanceof ELException || t instanceof javax.servlet.jsp.el.ELException) { rootCause = t.getCause(); } if (rootCause != null) { throw new ServletException(t.getClass().getName() + ": " + t.getMessage(), rootCause); } else { throw new ServletException(t); } }}
从上面源代码就可以看到,有一个this.forward()方法,这个方法便是转发的浸染。到此,page指令的常用属性都先容完啦。
本日就到这里,未完待续~~