”疚慕致鄣奈侍獍ǎ喝绾卧贘SP里面使用自定义的JAVA类,如何让你的表格在EXCEL下面显示,怎样指定用单线程的方式执行Servlet,以及怎样设置http输出流的缓冲区大小等等。
ppsJSP的命令一共有三个:page、include和taglib。Page命令让你能够控制从JSP页面生成的Servlet的属性和结构。Include命令让你插入一个文件,通常用于导入Applet。在JSP1.1标准里面,新添加了一个命令taglib,用于自定义的标签。JSP命令的语法格式如下(以page为例):
$#@60;%@ page attribute="value" %$#@62;
或者
$#@60;%@ page attribute1="value1"
attribute2="value2"
attributeN="valueN" %$#@62;
如果你想让你的JSP文件和XML标准兼容,你还可以考虑下面这种写法:
$#@60;jsp:directive.page attribute="value" /$#@62;
在什么位置插入page命令没有关系,因为page命令和其他的命令一样,只在JSP页面编译的时候起作用。
Page命令的参数包括import, contentType, isThreadSafe, errorPage, isErrorPage,session,
buffer, autoflush, extends, info, language。注意这些参数的名称是大小写敏感的。
import参数:使用自定义的类
import参数的作用是让你指定生成的servlet中需要导入的包(packages)。缺省的情况下会自动导入java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.*,另外还可能有你所使用的服务器自动导入的类。但是,出于可移植性的考虑,不要让你的JSP依靠特定的服务器。原则:总是显式的指定自己用到的类包。
import参数的格式为:
$#@60;%@ page import="package.class[,package.class2]" %$#@62;
例如:
$#@60;%@ page import="java.util.*,java.sql.*" %$#@62;
这个命令就导入了java.util和java.sql包里面的所有类。
import参数是page命令的参数中唯一一个可以在同一个页面中出现多次的。尽管命令出现的位置无关紧要,笔者仍然建议你把所有的import参数写在页面的开始部分。
如何引入自定义的类包呢?首先要明确你所要使用的类包被正确的安装到了你的服务器上面。现在的JSP服务器中大多数不支持JSP页面引用具有自动更新(auto-reloading)属性目录下面的类包。不同的服务器的针对servlet的类包的存放目录是不一样的,详见表1。必须注意,一旦你更改了这些目录下面的文件,? 须重新启动服务器。
服务器 |
标准目录 |
候选目录 |
自动更新 |
JSP可用 |
TOMCAT 3.0 |
webpages/WEB-INF/classes |
classes |
N/N |
Y/Y |
JSWDK 1.0.1 |
webpages/WEB-INF/servlets |
classes |
N/N |
Y/Y |
JWS 2.0 |
servlets |
classes |
Y/N |
N/Y |
表1 类包的安装目录
用一个例子来说明自定义类包的引用吧。首先假设你的java源程序里面写明了package pack.cla,那么你编译以后的class文件就会位于你的编译器的output路径/pack/cla下面。再假设你使用的服务器是TOMCAT,你的应用的存放路径是webapps/myapp/。那么你所要做的就是把/pack目录拷贝到/myapp/WEB-INF/classes下面,然后再重新启动TOMCAT。这样你就可以在JSP文件中引用pack.cla里面的类了。
contentType 参数:利用EXCEL来显示表格
contentType 参数指定http响应的头部(response header)的Content-Type值。客户端的浏览器会根据你在contentType指定的MIME类型和字符集代码来显示servlet输出的内容。MIME(Multipurpose
Internet Mail Extention)的内容一直在增加,现在包括的应用程序文档格式已经很多了。表2列出了一些常见的MIME类型。
MIME 类型 |
意义 |
application/msword |
Microsoft Word文档 |
application/pdf |
Acrobat PDF 文件 |
application/vnd.ms-excel |
Microsoft Excel 表格 |
audio/x-wav |
wav格式的音频文件 |
text/html |
HTML格式文本文档 |
text/css |
HTML层叠样式表 |
text/plain |
普通文本文档 |
image/jpeg |
JPEG格式图片 |
video/mpeg |
MPEG格式视频文件 |
表2 常见MIME类型
contentType参数的格式为:
$#@60;%@ page contentType="MIME-type" %$#@62;
或者
$#@60;@ page contentType="MIME-type;charset=Character-Set" %$#@62;
实际上,设置page命令的contenType参数和下面的代码功能上完全等价:
$#@60;% response.setContentType("MIME-Type"); %$#@62;
但是,这样用scriplet直接调用setContentType函数的方式有一个缺陷,书写的位置不像page命令一样是位置无关的(如果servlet的输出流没有设置缓冲区的情形下)。
JSP的默认MIME类型是text/html,普通的servlet则是text/plain。不过两者的默认charset都是ISO-8859-1。需要指出的一点是,如果你使用了FrontPage等网页制作工具来编写JSP页面的话,最好删除其自动加上的Content-Type设置,以免引起可能的冲突。
举一个例子,我们经常碰到某些需要访问数据库并用表格形式显示数据的应用,现在可以通过contentType参数的设置用Excel来显示表格。步骤有两个。首先,用page命令把MIME类型设置为application/vnd.ms-excel。然后,把你想输出的内容按照Excel的格式要求输出。
Excel的表格格式有两种。简单的一种是直接把不同行的数据写在不同的行上,然后把不同列上的数据用TAB键分隔开。比如像下面一样写一个JSP文件:
$#@60;%@ page contentType="application/vnd.ms-excel" %$#@62;
$#@60;%-- 注意数据之间的间隔要用TAB键 --%$#@62;
JAN FEB MAR APR MAY
142 154 225 456 777
在安装了Excel的系统上用浏览器打开这个页面的时候,你就会看到页面中的数据自动在Excel的表格中显示出来。
另外一种数据格式就是用通常的HTML表格,但是只有最新版本的Excel才支持HTML表格的显示。这种方法的好处是不必关心用户是否安装了Excel,就算没有Excel表格也可以正常的显示。自然的,你会马上考虑到能不能动态的改变contentType的值,以便按照用户的需求来显示表格。遗憾的是,page命令不能够在运行期间才确定参数的值,也不能够想当然的把page命令插入到if语句中间去。要到达这一目的,我们只能使用contentType参数的等价形式:setContentType函数。