、《JSP页面实际上就是Servlet》
2、《JSP页面中最常使用的脚本元素》
3、《JSP页面隐藏了哪些对象》
Page指令
我们在说《JSP页面中最常使用的脚本元素》的时候,提到了指令标签
而Page指令,就是一种极其常见的指令
之前使用的例子:
Page指令可以在页面内随便放置,一般是放在页首的位置。
里面有很多使用:
(1)language:
language属性有默认,写成别的编译不了
写法是:<%@ page language="java"%>
(2)extends:
标明JSP编译时需要加入的Class的全名,最好不使用它,它会限制JSP的编译能力.
写法是: <%@ page extends="package.class"%>
(3)import:
import属性,写了之后会自动添加到servlet的import语句中,但不进行包存在性的检查;
写法:<%@ page import="java.util.*"%>
(4)session:
Session对象是否参与会话,session="false"就没有session对象了
写法:<%@ page session="false"%>
(5)buffer:
buffer属性指定out对象(JspWriter)使用的缓冲区大小,以kb为单位,默认8kb
写法:<%@ page buffer="none"%>
(6)autoFlush:
autoFlush属性控制当缓冲区满了后,是自动清空输出缓冲区(默认true),还是在缓冲区溢出后抛出异常(false)。
写法:<%@ page autoFlush="true"%>
(7)isThreadSafe:
isThreadSafe问你的应用是否是线程安全的,缺省为true,表示应用是线程安全的,可以同时响应多个请求;如果设置为false,那么一次只能处理一个用户请求。
写法:<%@ page isThreadSafe="false"%>
(8)info:
定义一个可以在servlet中通过getServletInfo方法获取的字符串。 jsp容器做的是在servlet中生成getServletInfo方法返回info属性指定的String
写法:<%@ page info="infotext"%>
(9)errorPage:
errorPage="relativeURL" 设置处理异常事件的JSP文件。
isErrorPage="true | false" 设置此页是否为出错页,如果被设置为true,你就能使用exception对象
写法:<%@ page errorPage="error.jsp"%>、、<%@ page isErrorPage="true"%>
(10)isELIgnored:
isELIgnored忽略el表达式
写法:<%@ page isELIgnored="true"%>
(11)contentType:
contentType属性设置发送到客户端文档的响应报头的类型和字符编码。多个使用;号分开。 pageEncodeing属性只用于更改字符编码
写法:<%@ page contentType="text/html; charset=UTF-8"%>
Charset设置的是页面的字符集、pageEncoding定义的输出流的字符集
我们写整理这些,里面的内容会在学习的过程中不断扩展,这次我们就做一个小例子
我们在我们之前的页面写一个明显的错误
然后我们运行服务器
然后访问页面
点击提交
页面就会出现错误
但是这个看的人有点晕。特别是用户他不知道这是什么
我们写一个错误页面
我们写内容
然后在错误页面引入
然后就看到我们写的内容了,这样就不会出现前面用户看不懂的情况,我们可以写我们想写的
这个例子最后一个,也出现了Exception中的隐藏对象,记到笔记了,又遇到一个。
ageEncoding:设置JSP源文件本身和响应正文中的字符集编码。
ContentType 属性指定响应的 HTTP 内容类型。如果未指定 ContentType,默认为 text/HTML。
语法 Response.ContentType [= ContentType ]
contentType:设置JSP源文件和响应正文的字符集编码及MIME类型。
contentType的charset:设置服务器发送给客户端时的内容的编码。
JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8的.java文件至utf-8的.class文件,第三阶段就是由Tomcat传回浏览器的网页, 用的是contentType。
JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。
第一阶段是jsp编译成java
它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。
第二阶段是由JAVAC的JAVA源码至java byteCode的编译
不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。
JAVAC用UTF-8的encoding读取java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。
第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码
输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效
pageEncoding 和contentType的预设都是 ISO8859-1. 而随便设定了其中一个, 另一个就跟着一样了(TOMCAT4.1.27是如此). 但这不是绝对的, 这要看各自JSPC的处理方式. 而pageEncoding不等于contentType, 更有利亚洲区的文字 CJKV系JSP网页的开发和展示, (例pageEncoding=GB2312 不等于 contentType=utf-8)。
jsp文件不像.java,.java 在被编译器读入的时候默认采用的是操作系统所设定的locale所对应的编码,比如中国大陆就是GBK,台湾就是BIG5或者MS950。而一般我们不管 是在记事本还是在ue中写代码,如果没有经过特别转码的话,写出来的都是本地编码格式的内容。所以编译器采用的方法刚好可以让虚拟机得到正确的资料。
但是jsp文件不是这样,它没有这个默认转码过程,但是指定了pageEncoding就可以实现正确转码了。
举个例子:
1.<%@ page contentType="text/html;charset=utf-8" %>
大都会打印出乱码,因为输入的“你好”是gbk的,但是服务器是否正确抓到“你好”不得而知。
但是如果更改为
1.<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK" %>
这样就服务器一定会是正确抓到“你好”了。
需要将文档移动到一个新的位置时,就需要使用JSP重定向了。
最简单的重定向方式就是使用response对象的sendRedirect()方法。这个方法的签名如下:
public void response.sendRedirect(String location)throws IOException
这个方法将状态码和新的页面位置作为响应发回给浏览器。您也可以使用setStatus()和setHeader()方法来得到同样的效果:
....String site = "http://www.runoob.com" ;response.setStatus(response.SC_MOVED_TEMPORARILY);response.setHeader("Location", site); ....
实例演示
这个例子表明了JSP如何进行页面重定向:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*" %><html><html><head><title>页面重定向</title></head><body><h1>页面重定向</h1><%
// 重定向到新地址
String site = new String("http://www.runoob.com");
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site); %></body></html>
将以上代码保存在PageRedirecting.jsp文件中,然后访问http://localhost:8080/PageRedirect.jsp,它将会把您带至http://www.runoob.cc/。
如您还有不明白的可以在下面与我留言或是与我探讨QQ群{{308855039}},我们一起飞!
*请认真填写需求信息,我们会在24小时内与您取得联系。