JSP 标签还是很方便的,比如 Struts、Spring 等提供给我们的 JSP

标签,可以用它们来获取变量或进行一些计算。比如 struts2 的 会为我们自动在前面附加上应用上下文,如实际会生成

/testsite/admin/unmi.action。还有更多更方便的标签使用,比如用标签获取到 session 或请求中的数据作为

js 的变量等。

引申此话题的,其实不光是在 JS 中使用 JSP 标签,可用 JSP 标签的地方当然可以直接写 Java 代码,即

ScriptLet 代码。

如果是在 JSP 中内嵌的 JS 代码,那当然好办,JSP 文件中能用什么标签,js

代码中也能随便用,因为 JSP 标签会先在服务端解释生成相应的 JS

代码,丢给客户端执行。

那如果是在单独的 JS 文件中想要使用 JSP 标签,该如何办呢?还直接像 JSP

那样使用标签的话,对不起 JS 文件中给你原样显示出来,因为 JS

文件不被服务器端解释。其实到现在问题也基本有了答案,要解决的问题就是要让服务端去解释你的标签,有两种方案。

一.  js 文件命名为 JSP 文件,写 js

内容,其中用标签,然后用 script src="/scripts/tags.js.jsp">

把该 JSP 文件当作 JS

文件那样引入。

因为 JSP 文件会被服务端解释,所以把该 JSP 文件当作 JS 文件来写,JS

文件里应该是什么,你的 JSP 文件也应该输出什么,只是里面可以放标签,要知道它将会输出什么。用

上面代码执行都没问题的,但是你直接浏览 http://unmi/testsite/scripts/tags.js.jsp 你看到的是挤在一团的代码,不像查看普通 JS

文件那样有清晰的换行和退格,原因是浏览器默认只认扩展名,它的 mime 类型,也就是 Content-Type

text/html。要让它更像是个 JS 文件那得给它加上响应类型的设置,在

tags.js.jsp 文件第一行加上:

%response.setContentType("text/javascript;charset=utf-8");%>

这时候对于浏览器来说,无论从哪个方向来看它都是个切切实实的 JS

文件,只扩展名不同罢了。

上面的方法实际表现是没什么问题的,不过还有两点不那么完美,第一,文件名看起来像 JSP 文件,有些令人误解;第二,在

IDE 中打开该 JSP 文件,没法应用 JS

的语法加亮,给编辑带来不少麻烦。下面的方法充分解决前面两个问题。

二. 直接在 JS 文件中使用 JSP

标签

讲下原理,不是说应用服务器端默认不解释 JS

中的标签吗,那我们可以让个别的 JS 文件同样受到服务器端的关注,不是把 js

原文直接抛给客户端,而是先解释其中的标签,或是其中的 java 代码。

Tomcat 这种应用服务器我们通常也会称它为 Servlet 容器,因为它执行的是 Servlet,JSP

自然也是 Servlet。在 %TOMCAT_HOME%/conf/web.xml

中我们可以看到实际处理 JSP 文件的 Servlet

是:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

servlet>

<servlet-name>jspservlet-name>

<servlet-class>org.apache.jasper.servlet.JspServletservlet-class>

<init-param>

<param-name>forkparam-name>

<param-value>falseparam-value>

init-param>

<init-param>

<param-name>xpoweredByparam-name>

<param-value>falseparam-value>

init-param>

<load-on-startup>3load-on-startup>

servlet>

<servlet-mapping>

<servlet-name>jspservlet-name>

<url-pattern>*.jspurl-pattern>

servlet-mapping>

<servlet-mapping>

<servlet-name>jspservlet-name>

<url-pattern>*.jspxurl-pattern>

servlet-mapping>

org.apache.jasper.servlet.JspServlet,所以我们可以在自己应用的 web.xml

文件中配置某些特别的文件同样由 JspServlet 来处理。比如要特别处理 /scripts/tags.js 文件,在应用的

web.xml 中只要加上:

1

2

3

4

servlet-mapping>

<servlet-name>jspservlet-name>

<url-pattern>/scripts/tags.jsurl-pattern>

servlet-mapping>

注意,上面是 Tomcat 6.x 或更早版中应用的 web.xml 的写法,后来 servlet-mapping 中

url-pattern 可同时写多个,加上 Tomcat 7 自身的古怪,这一设置会覆盖掉原 jsp 的设置,所以在 Tomcat 7

中应用必须配置成如下(也就是必须默认项也带上,然而列出自己的希望被当作 jsp 的 js 文件,可多个,不把 *.jsp/*.jspx

带上的话,你原有的 jsp 会当作文本文件直接展示出源码来):

1

2

3

4

5

6

<servlet-mapping>

<servlet-name>jspservlet-name>

<url-pattern>*.jspurl-pattern>

<url-pattern>*.jspxurl-pattern>

<url-pattern>/scripts/tags.jsurl-pattern>

servlet-mapping>

我们配置 /scripts/tags.js 要由 JspServlet

来处理,不会影响到现有的其他任何 JS 文件。

那现在的 /scripts/tags.js 可不是普通的 js 文件了,它可是具有放置 JSP 标签和写 Java

代码的超能力了,因为其中的 JSP 标签和 Java 代码首先会经由服务端来解释。它集 JS 和

JSP 于一身,另外也别忘了给该 JS 文件前面加上代码:

%response.setContentType("text/javascript;charset=utf-8");%>

不然单独浏览它也就只是不那么好看。

无疑,这是目前我能想的最完美的一种方式了,且兼容于其他的 Servlet

容器,也不用改动公共部分的东西。/scripts/tags.js 在 JS IDE

中打开也漂亮多了,因为它就是个 JS 文件,只是被赋予了 JSP 的功能。

js 调用jsp java代码_如何在 js 代码中使用 jsp 标签或 Java 代码相关推荐

  1. java web 自定义标签_如何在JavaWeb程序中使用自定义标签

    展开全部 tld定义格式32313133353236313431303231363533e78988e69d8331333361323566 [java] view plain copy print? ...

  2. appium java 测试用例_如何在C#中使用Appium编写测试用例?

    1)创建一个类库项目并创建一个新类,例如"Class1" . 添加上面链接中提供的包 . 请尝试以下代码 using System; using System.Collection ...

  3. jupyter notebook怎么写python代码_如何在Jupyter Notebook中使用Python虚拟环境?

    如何在使用Jupyter Notebook时,解决Python虚拟环境间的切换问题?本文一步步帮你拆解.希望你能够避免踩坑的痛苦,把更多的时间花在愉快的编程上. 痛点 Python目前有两个主版本并存 ...

  4. python字体加粗代码_如何在python docx中加粗行单元格的文本?

    在python docx中,可以通过使用 Rich Text 造型.您应该为模板中需要样式化的特定字符/字符串在字符/字符串的位置提供一个上下文变量.此变量映射到 RichText 具有样式定义(在代 ...

  5. 秒表计时器开始计时代码_如何在Windows 10中设置计时器,警报和秒表

    秒表计时器开始计时代码 For whatever reason, Windows did not include alarms, timers, and stopwatches until Windo ...

  6. ios关闭摇动撤销代码_如何在iOS 9中禁用“摇动撤消”功能

    ios关闭摇动撤销代码 iOS allows you to shake your phone to undo typing you just did in apps such as Messages, ...

  7. jsp页面中JSTL/EL标签引用java后台静态static字段的方法总结

    转载自   jsp页面中JSTL/EL标签引用java后台静态static字段的方法总结 为什么使用该功能? 项目中的每个页面都包含产品名称.Logo.版本等信息,我希望修改一处,其它所有的全部跟着变 ...

  8. xvfb运行java脚本_使用xvfb-run(Selenium WebDriver)发行运行Firefox的问题 - java

    我有一个Java应用程序,该应用程序使用Selenium Webdriver登录到站点,检查特定文本,如果找到特定文本,请给我发送电子邮件.我有一项cron作业,该作业每天早晨运行jar文件,并每晚将 ...

  9. amd cpu不能在cmd环境下运行java代码_如何在Windows10中配置java的JDK环境

    今天给大家分享一下如何配置java的JDK环境.操作步骤如下: 1.下载好 jdk 的安装文件,我下载的是 jdk-10.0.1_windows-x64_bin.exe 这个版本的安装文件: 2.使用 ...

  10. vscode中怎样格式化js代码_如何在Visual Studio代码(VSCode)中格式化代码

    回答(30) 2 years ago 对于那些想要自定义要格式化的JavaScript文件的人,可以使用 JSfiles 属性上的任何扩展名同样适用于HTML . { "beautify.o ...

最新文章

  1. iOS 11开发教程(十四)iOS11应用代码添加视图
  2. Cause: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY错误
  3. python可以写安卓应用吗_python可以编写android程序吗?
  4. 7-40 奥运排行榜 (25 分)(详解+思路+map+vector做法)兄弟们冲压呀呀呀呀呀呀呀
  5. 中国科学院大学计算机金智,金智-中国科学院大学-UCAS
  6. 【转】TCP/IP协议——ARP详解
  7. (88)FPGA二分频设计,面试必问(十二)(第18天)
  8. html超链接同一页面,你绝对想要的HTML页面超链接的修改问题
  9. Python 黑帽子 netcat工具python3实现
  10. 奇迹服务器技能修改,奇迹技能修改教程-地狱火技能修改介绍
  11. WorkNC3D沿面精加工快速修圆小技巧
  12. BZOJ1006神奇的国度
  13. 人工智能对客服职业的影响
  14. 基于Mirror Driver的屏幕捕捉技术
  15. ACK打击是什么意思?ACK打击怎么防御?
  16. Visual Studio+VAssistX自动添加注释,函数头注释,文件头注释
  17. CSDN文章复制没有图片只有文字
  18. 机器学习笔记----最小二乘法
  19. Windows7下的IE10卸载
  20. 密码找回php,PHP结合jQuery实现找回密码

热门文章

  1. 数据统计分析(1):数据分析流程
  2. 旋转式光电编码器的设计动向
  3. vue中SM4加密解密(js部分)
  4. VS2012更改/重置默认开发环境
  5. 关于FND_PROFILE与FND_GLOBLE
  6. 【MSFconsole进阶】auxiliary模块:信息收集、扫描、嗅探、指纹识别、口令猜测和Dos攻击等
  7. cdr怎么转plt_win10系统怎么将cdr格式转换成plt?win10将cdr格式转换成plt的方法
  8. argb纯黑色_设计师应避免使用纯黑色字体,但应使用哪种深灰色字体
  9. MFC功能扩展控件BCGSuite for MFC入门指南
  10. 单片机 基于IIC通讯 驱动TM1640点亮LED灯