使用Javascript / Jquery访问Servlet响应属性

时间:2013-07-17 15:43:43

标签: javascript jsp servlets

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

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

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

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

3 个答案:

答案 0 :(得分:5)

正如@CarlosGavidia(秘鲁研究员)所解释的那样,scriplets在服务器端运行,而JavaScript(以及jQuery或Dojo之类的其他框架)在客户端运行,例如在浏览器客户端。此外,脚本小程度的使用非常气馁,详细解释如下: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>
    
  3. 请注意,使用任何这些方法意味着您可以使用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类名称应用于<td>,以了解您将获得所需值的位置。以"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对象部分,其中介绍了获取请求参数和其他功能。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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);
            }});