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


有在 servlet 中显式调用 getSession()方法时才创建 session。
对现象的理性说明
1。 只有执行了 getSession()才会生成 session。(此处无参数,默认与 
getSession(true)功能相同)。
2。 jsp 转换成 servlet 后,生成的 servlet 代码中包含 getSession()。
例子中见 tomcat 目录下, 
workCatalinalocalhost99…01orgapachejsptest1。jsp,其中包含 
了pageContext。getSession()。
142 / 148
…………………………………………………………Page 143……………………………………………………………
3。 我们可以在 jsp 中使用禁止生成 session 
的代码,这样即使访问此 jsp 页面,也不会创建 session。
例子中见 tomcat 目录下, 
workCatalinalocalhost99…01orgapachejsptest2。jsp,这里已经 
看不到 getSession()的代码了。
因为不会生成默认的 session,在这个 jsp 页面里 
就无法直接使用 session 变量了。下面的代码会导致 jsp 无法编译的错误。
访问 test3。jsp 会出现 500 服务器内部错误
143 / 148
…………………………………………………………Page 144……………………………………………………………
在使用过的页面里只能使用 getSession()手工获 
得 session 才能使用了。
演示用代码放在 99…01 目录下,TestServlet 映射到/请求路径,test1。jsp 会自 
动创建 session,test2。jsp 禁用了 session,test3。jsp 直接使用 session 会出 
现错误。
这个问题是典型的无用研究之一,实际工作中会有人使用 getSession(false) 
吗?
16。2。 对手工将 jsp 转换为 servlet 的无用讨论
有同学提到了一个问题:让用户自己编写 jsp 上传到服务器,服务器接收后保存 
入数据库,在用户访问的时候从数据库中取出对应的 jsp,运行后返回响应。
这个效果从理论上讲是可以实现的,我们已经对 jsp 的运行机制非常熟悉了, 
第 6。2 节 “jsp 与 servlet 的关系”,我们只需要将 jsp 转换为对应 servlet 
的 java 文件,再编译为 class,最后使用 ClassLoader 加载生成的 class 执行 
即可。
好消息是 tomcat 为我们提供了批量转换 jsp 的工具,使用以下的 ant 脚本就可 
以将指定目录下的 jsp 转换成对应 servlet 的 java 代码。(ant 的使用方法已 
经超出了本文的讨论范围,如果有兴趣请自行参阅官方网站。 
http://ant。apache。org/)
144 / 148
…………………………………………………………Page 145……………………………………………………………
为了顺利完成转换工作,我们需要把一系列 jar 文件放入 classpath 中:
1。 WEB…INF/lib/*。jar (星号代表所有)
2。 {java。home}/。。/lib/tools。jar ({java。home}表示 jdk 安装目录)
3。 {CATALINA_HOME}/server/lib/*。jar ({CATALINA_HOME}表示 tomcat 
的安装目录)
4。 {CATALINA_HOME}/mon/lib/*。jar
简要介绍一下 jasper2 的配置参数。
1。 verbose=〃1〃表示打印进度信息,如果 verbose=〃0〃则不打印信息。
2。 package=〃org。apache。jsp〃表示生成 servlet 中的包名(package)。
3。 uriroot=〃。〃表示会把当前目录下的所有 jsp 都转换成 servlet。
4。 webXmlFragment=〃WEB…INF/generated_web。xml〃会在 WEB…INF 目录下生 
成 servlet 的默认配置。
比如我们转换的test。jsp 将生成如下部分。
org。apache。jsp。test_jsp
org。apache。jsp。test_jsp
org。apache。jsp。test_jsp
/test。jsp
145 / 148
…………………………………………………………Page 146……………………………………………………………
将这部分复制到你项目中的web。xml 中就可以通过/test。jsp 请求来访问 
生成的 servlet 了。
5。 outputDir=〃。/WEB…INF/src/〃表示生成的 servlet文件放在WEB…INF/src 
目录下,tomcat 会自动生成 package 对应的目录,比如 test。jsp 生成的 
最终路径是 WEB…INF/src/org/apache/jsp/test_jsp。java。
接着把生成的 servlet 编译成 class,这次除了 mon/lib/servlet…api。jar 
以外我们还需要mon/lib/jasper…runtime。jar 加入 classpath 中,编译脚本 
参考 WEB…INF/src/pile。bat。
现在可以删除 test。jsp 了,web。xml 中已经将/test。jsp 请求转发至对应的 
servlet 处理,我们甚至不需要修改任何链接。
jspc 的主要功能在于预先编译 jsp 发现其中的语法错误,有些公司也使用这种 
方式进行加密(毫无意义的做法,把 jsp 唯一的灵活性都浪费了)。
演示程序在 99…02 目录下,需要安装ant 之后才可能执行 run。bat 将 jsp 转换成 
servl
小说推荐
返回首页返回目录