您的位置:首页 > Web前端 > JavaScript

Cached JSP引发的问题与思考

2005-07-15 18:59 316 查看
在最近的Project中遇到了一个表面上看起来蛮奇怪的问题。具体问题是这样的,在Project中,所有跨模块的constant都会定义在一个名字叫Constants的interface中,然后在JSP里面,我们也会相应地使用到这些constant。 每当更改了Interface里面某一个constant的值的时候,在JSP中并不会反应出来,从而引起了很多混淆。由于Constants是由我来负责的,每当我修改了constant的值,都会有同事问我,到底constant的值修改了没有,为什么JSP上面没有看到更新的值。一开始我也很迷惑,后来仔细一想,应该是由于Cached JSP引起的。大家都知道,JSP的本质仍然是Servlet,一个更新的JSP文件在第一次被访问的时候,会translate(翻译)成一个Servlet,然后再被编译成.class文件,存放在固定的一个folder中,以后的访问就不必再进行编译的动作,从而提高JSP的访问速度。而JSP的编译动作通常都会在JSP本身发生改变后进行,那么JSP所依赖的class发生变化之后,是不是也会引发JSP的重新编译呢?带着这个问题,我做了一个很简单的试验。
我在WSAD中建立了一个很简单的Dynamic Web Project,这个Project中之包含了一个JSP:Test.jsp和一个interface:Constants。具体代码如下:

<HTML>
<HEAD>
<TITLE>Test.jsp</TITLE>
</HEAD>
<BODY>
<P><%=Constants.NAME%></P>
</BODY>
</HTML>
( Test.jsp )

public interface Constants {
public class NewConstants {
public static final String NAME = "Fantasy";
}
重复以上的步骤,当我改变了NAME的值之后,譬如改为"Soft",编译Project却会引发JSP的重新编译。 由此可以得出,final关键字的使用并非问题的关键所在。
最后我得出的结论就是JSP是否能够自动编译,需要看所依赖的是class还是interface。如果是class,则class的改动也会相应引起JSP的编译,而interface则不会。这只是我的试验的结论,哪位朋友可以更深入地对这个问题解释一下呢?在下不胜感激了。:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: