一、Page指令,常用基本属性
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.Date" session="false" buffer="none" errorPage="/error.jsp" isErrorPage="true" pageEncoding="UTF-8" %>
【1】import属性
导入需要使用到的包
【2】session属性
JSP会被jsp引擎翻译为Servlet,本质上JSP还是Servlet。session属性默认为true,表示访问JSP页面,引擎便会在Servlet对象中创建Session对象。设置为false,则表示不会自动创建Session对象,只有调用request.getSession()才会创建Session对象。设置为true,可能会导致不必要的空间浪费。如果确定jsp中不需要session可以设为false。
【3】buffer属性
buffer表示缓冲区大小,设置为none表示,没有缓冲区。没有缓存。
【4】errorPage属性
errorPage表示当页面出现错误的时候,跳转到该界面上。提高用户体验。
错误界面的跳转,建议在web.xml中设置。这样就可以不需要每个界面都去书写errorPage属性。
在web-app标签内书写,以下内容
<error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/500error.jsp</location> </error-page>
error-code表示错误代码
location表示发生错误,跳转界面路径
【5】isErrorPage
如果设置此属性为true,翻译过来的servlet中将含有Exception隐式对象,其中封装的就是上一个页面中抛出的异常对象。
<%=exception.getMessage()%> 查看错误信息
使用exception对象,必须将isErrorPage设置为true。
【6】pageEncoding
服务器翻译jsp时使用的编码集。如果想防止jsp乱码,应该保证文件的保存编码和jsp翻译成servlet用的编码以及输出到页面中的编译三者完全一致。即JSP页面保存到磁盘的编码格式要与将磁盘上的JSP翻译成Servlet的编码格式保持一致。(底层编码格式)。
【7】注意点
page指令可以放在任意行,也可以写多个page指令。
二、JSP九大内置对象
当一个jsp页面在被访问的时候,会由jsp翻译引擎翻译为一个servlet文件去执行,向页面中输出数据。
大家可以去 [Tomcat所在目录]\work\Catalina\localhost\[项目名称]\org\apache\jsp\...中查看翻译的Servlet
翻译的Servlet继承HttpJspBase类和实现JspSourceDependent接口。
以下是Servlet中的内置对象
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
以及_jspService()方法中的 request, response对象
从以上内置对象便可知道分别代表的对象
page | 代表servlet的对象 |
response | 代表response的对象 |
request | 代表request的对象 |
config | 代表servletconfig的对象 |
application | 代表servletcontext的对象 |
session | 代表session的对象 |
exception | 代表exception的对象 |
out | 代表out的对象 |
pageContext | 代表pageContext的对象 |
注意:
【1】exception、out对象
将isErrorPage设置为true才可以使用,表示页面中出现的异常
out对象多用来输出流,输出内容。(现多不使用)
三、pageContext对象详解
【1】获取其他域对象
<% pageContext.getRequest(); pageContext.getServletConfig(); pageContext.getPage(); .......... %>
【2】作为域对象使用
域对象:如果一个对象有一个可见的范围,利用这个对象身上的map属性,在这个范围内进行共享数据,则称这个对象为域对象。
<% pageContext.setAttribute("name","zs"); pageContext.getAttribute("name"); pageContext.removeAttribute("name"); pageContext.getAttributeNamesInScope(PageContext.PAGE_SCOPE); %>
生命周期:在访问jsp页面时,pageContext对象创建,生命周期开始。在结束访问jsp页面时,pageContext对象销毁,生命周期结束。
作用范围:整个jsp页面
【3】设置其他域对象的内容
pageContext.setAttribute("name","张三",PageContext.APPLICATION_SCOPE); //application域中设置
pageContext.setAttribute("name","李四",PageContext.SESSION_SCOPE); //session域中设置
pageContext.setAttribute("name","王五",PageContext.REQUEST_SCOPE); //request域中设置
pageContext.setAttribute("name","赵六",PageContext.PAGE_SCOPE); //pageContext域中设置
【4】自动搜寻域
pageContext.findAttribute("country");
findAttribute会在四个作用域中,由小到大的搜索指定名称的域属性,如果在某一个域中获取到域属性,则不会向更大范围的域搜索。
【4】方便进行请求转发
pageContext.forward("/Demo1.jsp");