整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Jsp页面中常见的page指令

、《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}},我们一起飞!