【问题标题】:Accessing Servlet Response Attributes With Javascript/Jquery [duplicate]使用 Javascript/Jquery 访问 Servlet 响应属性 [重复]
【发布时间】:2013-07-16 06:34:05
【问题描述】:

我正在使用带有 Tomcat 的 Java servlet 以 HTML 格式显示位置表。表行中的数据由名称、位置等信息组成,是通过获取 servlet 响应数据并将其注入标签中获得的。然而,一旦完成,我需要使用 Javascript 根据它们的值来操作“td”元素。因此,如果进入“td”元素的位置之一是“USA”,我的 Javascript 函数会针对“USA”元素执行一些特定的操作,例如将周围的边框设为红色、白色和蓝色。

我不想使用 $.ajax 发送请求。我只是想在脚本元素的范围内访问由 servlet 响应返回的属性,就像我使用 JSP scriptlets 以以下方式一样

<% request.getAttribute("location"); %>

我有点惊讶我还没有找到如何在网上执行此操作,因为这似乎是任何使用 servlet 和 JS 的人的日常操作,但我在 SO 和 Google 上搜索无济于事。

【问题讨论】:

  • 你能发布一些关于你想要完成的 HTML 代码吗?

标签: javascript jsp servlets


【解决方案1】:

正如@CarlosGavidia(秘鲁研究员)所解释的,脚本在服务器端运行,而 JavaScript(以及在其之上的其他框架,如 jQuery 或 Dojo)在客户端运行,例如在浏览器客户端。此外,强烈建议不要使用 scriptlet,详细说明请参见:How to avoid Java code in JSP files?

如果您访问了最后一个链接,您就会知道应该使用ELJSTL 来访问您的页面上下文(PageContext)、请求(ServletRequest)、会话(HttpSession)和/或应用程序(ServletContext ) 属性(更多相关信息:How to pass parameter to jsp:include via c:set? What are the scopes of the variables in JSP?)。

有了这个背景,现在您可以理解,您无法直接访问请求属性(或 Java 代码中的其他属性),除非它们被设置为 DOM 的一部分或注入到 javascript 代码中。显示两种情况的示例:

  1. 将请求属性设置为 DOM 的一部分。

    <input type="hidden" id="hidReqAttr" value="${location}" />
    <script type="text/javascript">
        function foo() {
            var fromJavaSide = document.getElementById("hidReqAttr").value;
            //fromJavaSide value will be ${location}
        }
    </script>
    
  2. 直接在 JavaScript 上注入请求属性。

    <script type="text/javascript">
        function foo() {
            var fromJavaSide = '<c:out value="${location}" />';
            //fromJavaSide value will be ${location} as string
        }
    </script>
    

请注意,使用这些方法中的任何一种意味着您可以使用 JavaScript 操作 Java 服务器变量值,但将在 JavaScript 端工作,不会影响在服务器端设置的请求属性值。换句话说:

<script type="text/javascript">
    function foo() {
        var fromJavaSide = '<c:out value="${location}" />';
        //fromJavaSide value will be ${location} as string
        fromJavaSide = fromJavaSide + '_modified';
        //last line affects only the JavaScript variable, not the request attribute value
    }
</script>

因此,如果进入“td”元素的位置之一是“USA”,我的 Javascript 函数会针对“USA”元素执行一些特定的操作,例如将周围的边框设为红色、白色和蓝色。

使用带有 ID 的 HTML 组件或将 CSS 类名称应用于您的 &lt;td&gt; 以了解您将在哪里获得所需的值。以"USA" 为例:

<td class="${location eq 'USA' ? 'usaStyle' : 'commonStyle'}">${location}</td>
<script type="text/javascript">
    function foo() {
        var usaTDs = document.getElementsByClassName('usaStyle');
        //now you have all TDs with usaStyle that has your `USA` text
    }
</script>

根据您的评论,您还希望访问请求参数(可能来自查询字符串)。使用${param.parameterName} 获取它们。上面 EL 链接中的更多信息,请查看隐式 EL 对象部分,该部分解释了获取请求参数和其他功能。

【讨论】:

  • 优秀的回应 Luiggi。我已经阅读了您之前发布的 SO 页面,但结合您的解释,现在更清楚了,尤其是您的最后一个示例。有趣的是现在我正在检查一些旧代码并将所有 scriptlet 更改为 JSTL 和 EL!
  • 我取消了绿色复选标记,因为我回到了我的问题,我意识到你所说的对我的具体问题没有帮助。这就是我想要做的:一旦加载了 HTML,我需要知道如何使用 JS 来访问设置在servlet,然后使用一些 JS 代码来操作这些参数/属性。
  • @almel 如果您不解释您的具体问题,您将无法得到直接的答案。请编辑您的问题并解释真正的问题,而不是将其发布在我的答案的评论中,以便未来的读者可以从一个好的问题和准确的答案中受益。
  • @almel 答案已更新。
【解决方案2】:

HTML DOM 操作应该使用 JavaScript 来完成。 JSP/Servlet 是服务器端编程技术,无法通过 JavaScript 访问像 HTTPServletRequest 这样的对象:这些实例位于 Servlet 容器中,而 JavaScript 在客户端浏览器中执行。

另一方面,我认为通过纯 JavaScript 更改 TD 标记内容没有问题。您可以使用 Dojo 或 JQuery 等工具包来简化此任务。

【讨论】:

  • 好的,具体来说,我将如何使用 Jquery/Javascript 来访问 HTTPServletRequest?请提供通用(但不是伪代码)来访问 HTTPServletRequest。谢谢卡洛斯
  • @almel 是通过 ajax 调用访问的 Servlet 还是什么?你能在你的问题中澄清这一点吗?
  • @LuiggiMendoza 不,它不是通过 ajax 调用访问的。用户在查看某个网页时,单击指向 servlet 的链接,然后该 servlet 查询数据库中的 Place 值,将它们设置为响应中的属性,然后通过将用户重定向到 .jsp 来提供该响应文件供查看。这就是访问 servlet 的方式。在 jsp 中,我可以使用 JSP 脚本访问 servlet 的 Places 数据,但我希望能够使用 Javascript/Jquery 访问 servlet 数据,以便可以在运行时更改页面。
【解决方案3】:
using ajax cal we can cal directly to our servlet class and   servlet return string in json format(using gson lib) we can parse json using jquery parse method     
 $.ajax({
        url: "controller/url", 
         success: function(result){
                alert(result);
            }});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2012-11-28
    • 2014-08-04
    相关资源
    最近更新 更多