a.jsp为什么能调用b.jsp里面的js方法? 5C

在a.jsp里面使用include调用B.JSP,就可以直接调用b.jsp里面的js方法了??? 用的是

 <jsp:include page="b.jsp"/>

我看网上说的是生成了两个servlet,然后编译的时候就会生成两个.class文件,应该不能直接调用另外一个文件中的方法吧?

是因为js是前端的,和Java代码不一样?

想知道具体原因,和原理.....

12个回答

include进来的文件前端的js代码不会编译原样发送到客户端,所以js方法可以在其他文件中调用,只要你的js函数作用域是window下

js和服务器端没关系,js无法直接访问服务器端变量,服务器端变量可以输出到js脚本中提供给js访问

sun1187497750
sun1187497750 回复showbo: 那是什么时候怎么把不同servlet中的html写在一起的呢.....
大约 2 年之前 回复
showbo
支付宝加好友偷能量挖,胡杨在等着我的召唤 回复sun1187497750: 是的。不管服务器怎么样,你得看最后发到客户端的代码是什么。include如果加了判断不输出对应的js也是无法调用的,得看所有编译后发到客户端的html是什么
大约 2 年之前 回复
sun1187497750
sun1187497750 回复showbo: 是因为所有的js代码都不会编译,原样发送到客户端,然后所有的JS代码就都在一个html里面了,所以html就可以直接调用了是吗??
大约 2 年之前 回复
showbo
支付宝加好友偷能量挖,胡杨在等着我的召唤 回复sun1187497750: js文件直接申明 function abc(){.....}而不是放到其他函数内容,如 function xxx(){function abc(){....}},放其他函数内容部是私有的,外部无法访问。最直接的就是在浏览器控制台输入window.abc,如果不是undefined就是全局的
大约 2 年之前 回复
sun1187497750
sun1187497750 js函数作用域是window? 怎么看啊....
大约 2 年之前 回复

include 进来后,就拼装成一个js了,然后浏览器就能找到b.jsp里面的js方法,浏览器渲染后就跟后台没关系了,
后台只是把他们拼装起来而已,你疑惑的主要原因我就得就是IDE解析不出方法,为什么浏览器没报错

sun1187497750
sun1187497750 为啥能拼装成一个js呢?
大约 2 年之前 回复

include 页面嵌入 b.jsp的所以方法A都能继承使用

weixin_42544612
任开拓 回复sun1187497750: 相当于把b.jsp的所有东西复制到你include的地方了
大约 2 年之前 回复
sun1187497750
sun1187497750 嗯嗯,我知道能用,但不知道为啥能用。
大约 2 年之前 回复

jsp是servlet,但是servlet中的out.println()生产的什么?生产的还是html,所以,如果你在a.servlet中生产的a.html包含了b.servlet生产的b.html(b.html又引用了js)。a.html肯定可以用b.html的方法。

Lei_Da_Gou
Lei_Da_Gou 回复sun1187497750: 如果是静态导入的话,加载a.html,b.html和对应的b.js就被加载了,只要b.js一加载,那么该项目任何地方都能使用b.js中的方法。这也是为什么项目中index.jsp中引入的index.js里面一般都会放一些公共的方法,方便项目中任何地方都能使用该方法。
大约 2 年之前 回复
sun1187497750
sun1187497750 js代码也算是html的一部分了是吗?
大约 2 年之前 回复
sun1187497750
sun1187497750 include用了之后的效果,就是在jsp编译成servlet之后,html部分是相互包含的关系了? 但servlet是独立的啊,这两个html是怎么包含在一起的呢?....
大约 2 年之前 回复

jsp是先执行的在服务器端;而javascript要到浏览器解释html时才会执行。
先由web服务器执行jsp文件,在此过程中javascript只被当成是普通文本,不会执行的。当web服务器将生成的html文件返回给客户端浏览器时,才会由浏览器执行javascript.
这两者交互,就用jsp控制生成javascript代码。
要注意其顺序的问题。

sun1187497750
sun1187497750 你的意思是html是在web服务器中拼成一个的,而js代码是在html中的,所以最后浏览器执行js的时候,其实所有的js代码都在一个html中了,所以能够相互调用了,是吗????
大约 2 年之前 回复

一个是编译时是依赖,一个是运行时的依赖
首先我们知道jsp是不能直接运行在浏览器的,因为它需要服务端编译解析后转换成html格式才能被浏览器展示。
那么我们说的js文件,在上述编译和解析阶段不会被服务器端处理,会被当做静态文件直接被引用。
所以a.jsp中就包含了b.jsp的所有静态文件的引用,并且js是运行在浏览器上的,那么只要引用路径正常,调用就没问题了

jjjay1258
jjjay1258 回复sun1187497750:ojbk
大约 2 年之前 回复
sun1187497750
sun1187497750 所以,是在编译和解析阶段时,在a.jsp中包含了b.jsp中的静态文件,所以返回到浏览器上就成了一个html?!【感觉答案呼之欲出啊~】
大约 2 年之前 回复

1.首先你要清楚js是浏览器解释性脚本语言,它是由浏览器引擎解释执行的,和jsp是否生成servlet无关。
2.无论是html页面也好,jsp页面也好,js就是由浏览器解释执行的,在其他任意端它只是文本。
3.多个页面文件中如果引用除本页面以外的js函数,那就需要引入js的声明文件,像是如果你定义了一个js文件并且声明了函数,
那你在任意html中想使用js函数就需要引入这个js文件到本页面中。
4.那这样,当你include的时候,实际上是将你引入的页面相当于将全部内容复制过来,这样如果js函数是在另一个页面中声明的
或者是在另一个页面中引入的js文件中声明的。这一次复制相当于所有的动作都是传递的。即相当于全部引入到当前页面中,所以可以
直接使用。

当你include 一个文件的时候, 这个文件里面的js 都加载进来,自然你就可以试用这个文件里面提供的函数了。

sun1187497750
sun1187497750 用了include,b.jsp里面的js就会加载到a.jsp里面??
大约 2 年之前 回复

两个jsp 写给浏览器,就是 两个HTML文件, 那两个HTML文件 中的js 方法,当然可以互相调用了。。。

sun1187497750
sun1187497750 两个JSP的js方法能直接调用? 不能吧
大约 2 年之前 回复

如果是jsp指令的include是把两个jsp生成同一个jsp,然后再编译成一个servlet。如果是jsp动作标签的话,两个jsp页面各生成一个servlet,然后再编译。

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐