JSP页面page指令
来源:互联网 发布:兄弟标牌打印机软件 编辑:程序博客网 时间:2024/06/08 20:01
1 前言
JSP页面有三大指令:page、include、taglib,都是为了方便操作jsp页面而创建了,先来学习page指令。page指令总共含有如下属性:
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="utf-8"%><%@ page autoFlush="true" buffer="8kb" deferredSyntaxAllowedAsLiteral="false"%><%@ page errorPage="" extends="jsp.MyHttpJspBase" info="调用getServletInfo方法" %><%@ page isErrorPage="false" isThreadSafe="true" isELIgnored="false" session="true" %><%@ page import="java.util.*" trimDirectiveWhitespaces="false"%>
我们一个一个来了解每个属性的具体含义。
2 language
language用于指定jsp使用的语言,属性值必须为“java”,不定义则默认language=”java”,其他所有的情况都会导致页面报错,language属性肯定是为了以后扩展JSP而设定的,如用其他语言PHP来解析JSP。
3 contentType
contentType用于设置页面媒体类型和页面编码格式,默认值为:text/html; charset=ISO-8859-1,通常修改为text/html; charset=utf-8或者text/html; charset=gbk用于支持中文。
4 pageEncoding
pageEncoding用于设定页面编码格式,效果同contentType内容中charset部分,如果两者均设置,则以contentType内容中的charset为准。
5 autoFlush 和buffer
这是一对共同使用的属性,有如下规则:
①autoFlush 可选值为:true和false,默认为true,即自动刷新,这里的刷新值缓存区内容;buffer默认为8kb,且单位只能为kb,即最多缓存8kb则需要自动刷新或者手动刷新。
②当buffer设置为“none”时,autoFlush必须设置为“true”,不然jsp页面会抛出异常。
③当buffer设置为其他值时,如buffer=“16kb”,autoFlush可以设置为“true”或者“false”。设置为“false”时,在jsp页面的输出内容填满buffer之前,应该使用手动方式刷新,即out.flush()方法,不然页面会抛出异常。
④不管使用了哪一种刷新,只要页面刷新了,就不能再使用重定向操作将页面跳转到其他页面了或者调用out.print()方法,不然就会抛出异常。原因分析:刷新了之后,页面的头信息就已经发送出去了,这时再重定向到其他页面,头信息对应不上,自然就抛出异常了。
6 deferredSyntaxAllowedAsLiteral
作用:控制页面是否能使用延迟操作符#{}来获取数据,默认为false。
当设置为false时,如果页面调用#{name},则会引起页面错误:#{…} is not allowed in template text;
当设置为true时,则可以调用#{name},且效果同${name}。
7 extends
作用:改变当前jsp继承类,默认继承org.apache.jasper.runtime.HttpJspBase,可定义新类继承该类,重写_jspService方法,然后设定extends=”新类全限定名称”,一般不建议这样做,可能会改变JSP解析执行性能或者引起服务器崩溃。
8 info
作用:重写父类(org.apache.jasper.runtime.HttpJspBase)的getServletInfo方法实现,页面上指定调用getServletInfo()获取返回值,Java Servlet代码中可通过Servlet.getServletInfo()获取返回值。
9 isErrorPage和errorPage
作用:isErrorPage设置该页面是否为错误处理页面,默认为false,当值为true时,可使用exception隐含对象;
errorPage设置当前页面如果发生异常跳转的页面。
示例如下:
正常页面index.jsp如果不设置errorPage<%@ page isErrorPage="false" %><body> 这是我的第一个JSP页面,JSP首页!<br/> <% // 执行语句肯定会发生异常 int i = 0; int j = 5/i; %></body>访问index.jsp页面,页面报错如下
如果指定错误页面error.jsp
index.jsp 设置如下<%@ page isErrorPage="false" errorPage="error.jsp" %>error.jsp 设置如下<%@ page isErrorPage="true"%><body> This is my error.jsp<br/> 我可以获取错误信息:<br/> <%=exception.fillInStackTrace()%><br></body>再次访问index.jsp页面,结果如下:This is my error.jsp我可以获取错误信息:java.lang.ArithmeticException: / by zero
10 isThreadSafe
作用:isThreadSafe表示该页面访问是否线程安全,默认为true。
isThreadSafe=false模式表示它是以Singleton模式运行。 该模式implements了接口javax.servlet.SingleThreadModel, 该模式同一时刻只有一个实例,不会出现信息同步与否的概念。 若多个用户同时访问一个这种模式的页面, 那么先访问者完全执行完该页面后,后访问者才开始执行。isThreadSafe=true模式表示它以多线程方式运行。 该模式的信息同步,需访问同步方法(用synchronized标记的)来实现。 一般格式如下: public synchronized void method(...){ if(...) { wait(); } notifyAll(); }
11 isELIgnored
作用:设置页面是否禁用EL表达式,默认为false,即可用使用EL表达式,如果设置为true,则禁用EL表达式,${name}方式获取值则会默认当做字符串“${name}”输出。
12 session
作用:设置页面是否可以使用session隐含对象,默认为true。如果设置为false,则使用session对象是会页面报错,因为解析的java中没有默认初始化session对象,如session.setAttribute(“age”, “18”);则页面报错。
注意:session=”false”,只是没有了session隐含对象,但是可以自己创建session对象做其他操作,代码如下:
这是我的第一个JSP页面,JSP首页!<br/> <% request.setAttribute("name", "request"); HttpSession session = request.getSession(); session.setAttribute("age", "18"); %> 测试session的作用:<br/> ${name} <!-- 这里的session为自己在上面创建的对象,不是session隐含对象,可换成其他变量名称mySession --> <%=session.getAttribute("age") %>**页面可正常获取域值:18**
14 trimDirectiveWhitespaces
作用:设置是否去除生成的页面中大量的空白行,默认为false,即不去除。设置为true,则去除大量的html空白行输出,效果如下:
页面输出代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body> 这是我的第一个JSP页面,JSP首页!<br/></body></html>
情况一:trimDirectiveWhitespaces默认为false的时候
out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n"); out.write("<title>Insert title here</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("\t这是我的第一个JSP页面,JSP首页!<br/>\r\n"); out.write("</body>\r\n"); out.write("</html>");
情况二:trimDirectiveWhitespaces=”true”的时候
out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n"); out.write("<title>Insert title here</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("\t这是我的第一个JSP页面,JSP首页!<br/>\r\n"); out.write("</body>\r\n"); out.write("</html>");
15 import
作用:引入其他类供调用,JSP页面默认引入了以下类,其他的需要自己引入。
import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;
如<%@ page import="java.util.*"
则java.util下的所有类都可以在该JSP页面使用,没有引入则调用会报错:找不到该类。
16 总结
以上即使JSP中page指令的全部知识,更多的详情可以自己研究源码来查看。
- JSP页面page指令
- Jsp指令---page(页面)指令
- JSP页面元素简介及page指令
- JSP指令--Page指令
- 关于jsp页面page指令中errorpage和iserrorpage属性
- JSP page指令 关于isErrorPage指定错误页面的使用
- JSP中的PAGE指令
- jsp page 指令
- [JSP 指令] page
- JSP之page指令
- JSP的page指令
- jsp指令:page
- JSP语法 Page指令
- Jsp中的Page指令
- jsp page指令
- JSP page、include指令
- jsp page指令详解
- JSP之【page】指令
- Scala学习之路----高级编程
- tensorflow学习笔记十五:tensorflow官方文档学习 TensorBoard: Graph Visualization
- HDU 3555 Bomb
- 1003. 我要通过!(20)——PAT乙级
- Hessina技术
- JSP页面page指令
- UVa 725 Division(除法)
- LeetCode Algorithms 98. Validate Binary Search Tree
- C#中static void Main(string[] args) 参数详解
- C++四种类型转换的关键字及其特点
- 设计模式之原则
- 蓝桥杯 蚂蚁感冒
- AutoCAD2010安装教程
- rhel6关于samba访问权限