JSP有三大指令,分别是page、include、taglib
这些指令的作用互不相同,下面将首先介绍page指令
一、page指令的作用
主要用来设定JSP页面的全局属性,语法格式:
<@page 属性1=“属性1” 属性2=“属性2”%>
二、常用的属性及作用
1、language属性、extends属性、import属性
这三个属性比较简单,language属性目前只有java值,extends属性主要指生成的Servlet继承哪个父类,import属性主要是导包
三者格式分别是:
<@page language=“java” extends=“pack.class” import=“java.util.*” %>
2、autoFlush属性、buffer属性、info属性
暂时不讲
3、session属性
这个主要用来指定JSP页面是否可以使用session对象,默认是true
如何看出?新建一个1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP '1.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
</body>
</html>
那么我们看翻译过来的Servlet就会看到有session,
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
如果将session设置为false时,那么上面的session就会消失
4、isThreadSafe属性
用来指定是否支持多线程的使用,默认为true,表示支持多线程的使用
假如我们设置为false时,那么翻译过来的servlet又有什么变化?
之前的头部是这样:
public final class _1_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent{}
现在变成了这样
5、errorPage属性和isErrorPage属性
这两个属性都是处理异常的,errorPage属性表示当前文件如果出现异常会跳转到指定的文件,isErrorPage属性则是指定该文件是否是能够处理异常的JSP文件
假设1.jsp是异常文件,error.jsp要跳转到的文件
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1" errorPage="error.jsp" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP '1.jsp' starting page</title>
</head>
<body>
<% int i=1/0;%>
</body>
</html>
error.jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'error.jsp' starting page</title>
</head>
<body>
你出错啦~~ <br>
</body>
</html>
这时就会跳转到error.jsp文件
假如在error.jsp文件中添加 isErrorPage=false,那么就跳转不到error.jsp文件中来
扩展:我们可以在web.xml配置通用的错误跳转文件
<error-page>
<error-code>500</error-code>
<location>/error/500.jsp</location>
</error-page>
<error-page>
<error-code>400</error-code>
<location>/error/400.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error/400.jsp</location>
</error-page>
6、pageEncoding属性和contentType属性
JSP页面的东西要经过几个步骤才能被浏览器访问
第一是:JSP页面写完后要保存
第二是:JSP页面要编译成Servlet
第三是:编译后的Servlet要服务器发送给客户端才能浏览
在这其中如果涉及到中文,就会出现乱码
保存的时候,如果用UTF--8保存,而编译的时候用GBK编译就会乱码(默认是ISO-8859-1)
假如我们用UTF-8保存,那么我们要指定编译用pageEncoding="UTF-8"指定编译的是UTF-8码表
但假如发送的是GBK码表也是不行的,所以我们应该设置contentType="text/html;charset="UTF-8"
但myecilpse是非常智能的,假如设置pageEncoding="UTF-8",那么保存和发送都是用UTF-8码表