`
allenversion
  • 浏览: 3753 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

如何在 js 代码中使用 jsp 标签或 Java 代码

阅读更多

    JSP 标签还是很方便的,比如 Struts、Spring 等提供给我们的 JSP 标签,可以用它们来获取变量或进行一些计算。比如 struts2 的 <s:url value="/admin/unmi.action"/> 会为我们自动在前面附加上应用上下文,如实际会生成 /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"></script> 把该  JSP  文件当作 JS 文件那样引入。 

因为 JSP 文件会被服务端解释,所以把该 JSP 文件当作 JS 文件来写,JS 文件里应该是什么,你的 JSP 文件也应该输出什么,只是里面可以放标签,要知道它将会输出什么。用 <script> 来引入的话,页面顺理的把它认为是一段外部 JS 代码。

例如文件 /scripts/tags.js.jsp 中的内容是:

<%@ taglib  prefix="s" uri="/struts-tags" %>
var currentUser = '<s:property value="#session.userName" />';
alert("currentUser: " + currentUser);
 

    那么在某个网页中用 <script src="/scripts/tags.js.jsp"></script> 引入该文件时,上面的 JS 代码将会弹出当前 session 中的用户名来。 

    上面代码执行都没问题的,但是你直接浏览 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 是:

    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>
 
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>

      org.apache.jasper.servlet.JspServlet,所以我们可以在自己应用的 web.xml 文件中配置某些特别的文件同样由 JspServlet 来处理。比如要特别处理 /scripts/tags.js 文件,在应用的 web.xml 中只要加上: 

    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>/scripts/tags.js</url-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 的功能。

分享到:
评论

相关推荐

    JSP中java代码与js之间的传值

    - **通过JSP脚本元素**:在JSP中,可以使用 `&lt;script&gt;` 标签直接输出JavaScript代码,将Java变量的值传递给JavaScript。例如: ```jsp var myValue = "&lt;%= javaVariable %&gt;"; ``` - **通过JSP表达式语言...

    1.源代码统计工具,用于统计c/C++,JAVA,JS,XML,JSP等格式代码

    本文将深入探讨源代码统计工具在C/C++、Java、JavaScript、XML和JSP等格式代码中的应用。 首先,让我们关注C/C++代码统计。C/C++是两种广泛使用的系统级编程语言,它们的源代码通常包含大量的头文件和实现文件。...

    JSP(全称JavaServer Pages)

    另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件...

    j2ee12:jsp01:jsp页面嵌套java代码、<%@ %>的使用

    7. **JSTL(JSP Standard Tag Library)**:JSTL是一组标准标签库,用于处理常见的任务,如迭代、条件判断、XML处理等,以替代在JSP页面中使用脚本元素。 8. **开发工具**:开发JSP应用时,IDE如Eclipse或IntelliJ ...

    过滤出java中的sql,js中的javascript

    在实际项目中,可能有需求将Java和SQL结合,如使用ORM(对象关系映射)框架,如Hibernate或MyBatis,它们允许在Java代码中直接书写SQL,或者使用注解来定义数据库操作。对于JavaScript,现代Web开发通常采用模块化和...

    javaJSP租房网项目源代码

    Java代码被嵌入在`&lt;%...%&gt;`或`&lt;jsp:...&gt;`标签中,用于处理服务器端逻辑。在`HouseRent_ZY`项目中,我们可能会看到这些元素如何组合在一起,以展示房源信息、处理用户请求并完成交互。 2. **JSP指令和动作**:JSP...

    代码检查器(java js jsp sql)

    JSP检查侧重于模板语言的正确使用、EL表达式和JSTL标签的规范性、以及可能的安全漏洞。它会检测是否正确处理了请求参数、是否存在SQL注入或跨站脚本攻击的风险,以及JSP页面结构的合理性。这些检查有助于提高JSP...

    jsp技术开发的精品课程网站(源代码)

    2. **JSP到Servlet转换**:JSP的每个动态部分都会在生成的Servlet中对应一段Java代码。 3. **EL(Expression Language)**:用于在JSP页面中方便地访问JavaBean或其他数据源,简化页面中的数据绑定。 4. **JSTL...

    JSP中使用JavaScript动态插入删除输入框实现代码.docx

    在本文中,我们将介绍如何在JSP中使用JavaScript实现动态插入删除输入框的功能。 一、JavaScript动态插入删除输入框的实现代码 在JSP中,使用JavaScript可以实现动态插入删除输入框的功能。下面是实现代码: ```...

    JSP网络编程从基础到实践 Java 课程设计 Java毕业设计 实例代码 适合初学者使用

    4. **内置对象**:JSP提供了9个内置对象,如`request`, `response`, `session`, `application`等,可以直接在JSP页面中使用,无需显式创建,极大地简化了开发。 5. **EL(Expression Language)**:一种简洁的...

    jsp标签大全

    【JSP标签大全】 JSP(JavaServer Pages)是一种服务器端的动态网页技术,它允许开发者将HTML代码与Java代码结合起来,以实现更强大的功能。其中,JSP标签是JSP的重要组成部分,提供了丰富的功能,包括调用...

    bbs论坛 代码 java jsp

    1. **JSP元素**:包括指令(Directives)、脚本元素(Scripting Elements)、表达式(Expressions)、声明(Declarations)等,它们分别用于设置页面属性、插入Java代码、输出变量值和定义Java变量或方法。...

    企业网站模板jsp java

    通过深入研究这个“webApp”文件,你可以了解到企业网站模板的具体实现方式,包括但不限于JSP页面如何组织、如何与后端Java代码通信、如何处理用户请求以及如何使用CSS和JavaScript进行美化和增强用户体验。...

    java jsp 极简聊天室网页版代码

    在JSP页面中,我们可以使用`&lt;jsp:directive.page&gt;`、`&lt;jsp:expression&gt;`、`&lt;jsp:scriptlet&gt;`等标签来编写Java代码。在聊天室项目中,JSP将用于接收用户输入、处理消息并展示聊天记录。 2. **Eclipse IDE** Eclipse...

    jsp java 开发的bbs论坛源码

    Java是一种广泛使用的面向对象的编程语言,常用于构建服务器端应用程序,而JSP则是Java的一种视图技术,它允许开发者在HTML中嵌入Java代码,实现动态网页的生成。结合这两者,开发者可以创建出交互式的Web应用,如...

    jsp 精美版面与代码

    4. **JSP标签和脚本**:研究JSP页面中的Java代码,理解它们如何与后端服务器交互,处理请求和响应。 5. **数据库操作**:如果涉及到数据库,学习如何使用SQL查询,以及JDBC(Java Database Connectivity)进行数据...

    JSP标签,采用web.xml引入标签库描述文件

    本文将深入探讨JSP标签,特别是自定义标签,并解释如何通过`web.xml`配置文件来引入标签库描述文件,以便在JSP页面中使用这些标签。 首先,JSP标准标签库(JSTL)是一套预定义的标签,用于处理常见的任务,如迭代、...

    JSP交友网站 源代码

    JSP是Java平台上的动态网页技术,它允许开发者在HTML页面中嵌入Java代码,以实现服务器端的业务逻辑处理。JSP通过编译成Servlet来运行,从而提供了高效且可扩展的Web应用开发方式。在这个交友网站中,JSP主要负责...

    jsp java自定义标签 实现分页 当前位置标签

    在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,它允许开发者将HTML、CSS、JavaScript与Java代码相结合。自定义标签是JSP的一种扩展机制,允许我们封装复杂的功能或逻辑,使其在页面上以...

    js中使用 C标签 获取request中的list的值

    综上所述,在JavaScript中使用C标签和EL表达式可以实现对服务器端数据的动态处理和展示,这在现代Web开发中是一种非常实用的技术组合。通过理解并熟练掌握C标签、S标签以及EL表达式的用法,开发者可以更高效地构建...

Global site tag (gtag.js) - Google Analytics