前言
在熟悉代码时,随便选了一个按钮,规则导出的功能。
在使用F12进行debug时,发现被调用的js方法和按钮不在一个jsp页面中,感觉很神奇的调用了!
正文:
第一阶段:
通过F12查看调用的路径,可以看到被调用的方法名。
在代码中搜方法名关键字可以得到名字叫XXX的Java方法和在B.jsp中调用这个方法的js代码.
但是B.jsp中并没有调用JS方法的地方。
所以,我再次用搜索方法,在代码中搜JS方法,得到和B.jsp同一级目录的A.jsp文件。
截至目前,相当于是在一个jsp页面中调用了另外一个jsp中的js代码了,我在网上搜索,很明显,大量的经验者告诉我们不能在jsp中调用另外一个JSP中的js方法。
但是!在index.jsp文件中有这样一句代码:<jsp:include page="B.jsp"/>,也就是说,B.jsp页面被包含在A.jsp页面中。似乎这样就可以解释为啥可以在A.jsp中调用B.jsp的js方法了。
第二阶段:
然而,当我想了解一下include标签时,看到的是这样的:
1
而对于动态包含<jsp:incude
>,如果被包含文件是动态的,那么就会生成两个Servlet,也就是被包含文件也要经
过jsp引擎编译执行生成一个Servlet,两个Servlet通过request和reponse进行通
信。如果被包含的文件是静态的,那么这种情况和<%@include
>就很相似,只生成了一个Servlet,但是他们之间没有进行简单的嵌入,而依然是通
过request和reponse进行的通信。
因为包含的jsp页面并不是静态的,所以会编译成两个servlet文件,我感觉和其他两个平常的jsp页面是一样的啊!!~
难道是我理解的有问题??
看到一篇文章(具体参见JSP中的include的两种用法),其中有几句话:
可以拜访请求作用域内的全部对象
? 这句话的意思就是可以直接调用include jsp中的js方法???
按照上面的想法,生成的两个servlet之间通讯是通过request和response来进行消息的传递,所以,请求作用域也只是request范围内的对象吧。
第三阶段:
之后,猜想是不是因为JSP在编译之后有啥不一样的地方?因为jsp中的东西包括java html 和js代码,有可能是这三种的处理方式不一样。
然后百度了一下jsp编译过程,得到如下图:https://blog.youkuaiyun.com/napoay/article/details/50755064
JSP的生命周期大概就是这个样子,下面有一个更为详细的有关jsp生命周期的文章:
https://blog.youkuaiyun.com/oncealong/article/details/51393266
然而,看了很多的文章,只是说JSP中是有Java代码和html代码,并没有提js,是js默认就是当作html里面了吗??......
现在能理解的可能的情况就是,在编译之后,JS是在前端的代码,所以,所有的js代码都被放进了html里面,所以就可以直接调用了。
如果是这样就有了另外一个疑惑,百度“JSP调用另外一个jsp的js代码”得到的结果都是不可以直接调用另外一个jsp里面的js代码......
第四阶段:
在优快云发了一个帖子,a.jsp为什么能调用b.jsp里面的js方法?期待有个好的解释![期待脸]