《JSP入门教程(DOC格式)》第37章


方式进行加密(毫无意义的做法,把 jsp 唯一的灵活性都浪费了)。
演示程序在 99…02 目录下,需要安装ant 之后才可能执行 run。bat 将 jsp 转换成 
servlet。
在了解如何手工转换 jsp 之后,我们可以来讨论在数据库中保存 jsp 的问题了。
将 jsp 从数据库中提取出来,将这些数据保存成本地文件,使用 jspc 转换成 
servlet 再编译为 class,最后使用自定义的ClassLoader 读取到 jvm 中执行。
难点在于生成文件要保证互不影响和自定义 ClassLoader 如何加载管理这些生 
成的 class。
这个问题是典型的无用研究之一,任何想获得灵活模板功能的同学都应该亦然决 
然的抛弃 jsp,jsp 这种先解释编译再执行的机制不仅没有帮助我们提升效率, 
反而大大增加技术难度并降低响应效率。需要自定义模板的同志务必考虑 
velocity; freemarker 此类模板引擎或者 groovy 一类脚本语言,这时使用 jsp 
无异于给自己带上一副沉重的枷锁。
16。3。 胡乱解释一下 session
会话都保存在服务器端。
每个用户打开浏览器就服务器就会给它生成一个 sessionId,浏览器或者把这个 
sessionId 放到 cookie 里,或者每次请求都带在 url 后边(自动的),然后服 
务器就拿到这个 sessionid,在内存里翻啊翻啊,翻出对应的 session 来,就这 
么对应上的。
ServletContext 和 session 就没多大关系了,虽然 ServletContext 也是在服务 
器端,每个 web 应用发布的时候,就要创建这么一块空间放置 ServletContext, 
146 / 148
…………………………………………………………Page 147……………………………………………………………
这个 web 应用中的所有的 servlet; jsp; filter; listener 都可以访问这块空 
间。你可以把他看作是一个全局变量,所有共享数据都放到里边。
16。4。 下载文件乱码
参考 如何在 PHP 下载文件名中解决乱码。
基本代码如下:
0) {
fileName = 〃attachment; filename=”〃 +
java。URLEncoder。encode(fileName; 〃utf…8〃) + 〃。txt”〃 ;
} else {
fileName = 〃attachment; filename*=”utf8""〃 +
java。URLEncoder。encode(fileName; 〃utf…8〃) + 〃。txt”〃 ;

String content = 〃xml 格式内容。〃 ;
response。setContentType(〃application/octet…stream;charset=UTF…8〃);
response。setHeader(〃Content…Disposition〃; fileName);
out。print(content);
%》
按照 RFC2231 的定义, 多语言编码的 Content…Disposition 应该这么定义:
Content…Disposition: attachment;
filename*=〃utf8""%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D。txt 

filename 后面的等号之前要加 *
filename 的值用单引号分成三段,分别是字符集(utf8)、语言(空)和 urlencode 
过的文件名。
最好加上双引号,否则文件名中空格后面的部分在 Firefox 中显示不出来。
使用 urlencode 对非 iso…8859…1 字符进行编码。
147 / 148
…………………………………………………………Page 148……………………………………………………………
经过试验,发现几种主流浏览器的支持情况如下:
IE6
attachment; filename=〃〃
FF3
attachment; filename=〃UTF…8 文件名〃
attachment; filename*=〃utf8""〃
O9
attachment; filename=〃UTF…8 文件名〃
Safari3(Win)
貌似不支持?上述方法都不行
148 / 148
………………………………………………………………………用户上传之内容结束……………………………………………………………………………………
小说推荐
返回首页返回目录