【问题标题】:How to call servlet from javascript如何从javascript调用servlet
【发布时间】:2011-09-07 06:36:57
【问题描述】:

web.xml 中的 Servlet 配置

<servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>DataEntry</servlet-name>
    <servlet-class>com.ctn.origin.connection.DataEntry</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>DataEntry</servlet-name>
    <url-pattern>/dataentry</url-pattern>
  </servlet-mapping>

Javascript:

<script type="text/javascript">
    function unloadEvt() {

        document.location.href='/test/dataentry';

    }
</script>

但是使用这个 javascript 不能调用我的 servlet。

有什么错误吗?如何调用servlet?

【问题讨论】:

  • 您是否尝试通过在浏览器的地址栏中输入 url 来加载 servlet?
  • 我会假设 URL 末尾的双双引号只是一个粗心的错字。如果属实,请在您的问题中解决它。
  • 是的,我在提交表单和工作完美时被调用。现在我想把它叫做 javascript 的 onunload 事件

标签: java javascript jsp servlets


【解决方案1】:

从你原来的问题:

document.location.href="/dataentry";

URL 中的前导斜杠 / 会将您带到域根目录。

所以如果包含脚本的JSP页面正在运行

http://localhost:8080/contextname/page.jsp

那么您的location URL 将指向

http://localhost:8080/dataentry

但你确实需要

http://localhost:8080/contextname/dataentry

所以,相应地修复 URL

document.location.href = 'dataentry';
// Or
document.location.href = '/contextname/dataentry';
// Or
document.location.href = '${pageContext.request.contextPath}/dataentry';

除此之外,函数名称unloadEvt() 表明您正在onunloadonbeforeunload 期间调用该函数。如果这是真的,那么您应该寻找另一种解决方案。 不保证请求会到达服务器。这取决于所使用的浏览器。如何正确解决它取决于问题中不清楚的唯一功能要求。

【讨论】:

  • 我希望用户填写不完整的删除并关闭浏览器,然后将这么多详细信息输入数据库。
  • 好的,然后相应地解决它,这样您就不需要破解onunload。如果您不知道如何正确解决它,请随时提出一个新问题,并明确阐述功能要求
【解决方案2】:

如果你使用 jQuery,你可以试试这个。很简单:

<script>
    $(window).unload(function() {
        document.location.href='/test/dataentry';
    });
</script>

【讨论】:

  • 这与window.onload = function() { ... } 相比究竟有何不同?
  • 您正在使用 onload。我指的是卸载。这将捕获卸载事件并将用户转发到 /test/dataentry
【解决方案3】:

这可以使用 ajax 来完成

<script type="text/javascript">
    function loadXMLDoc() {
        var xmlhttp;
        if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {// code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", "/testmail/dataentry", true);
        xmlhttp.send();
    }
</script>

【讨论】:

  • 不保证适用于所有浏览器。它还取决于客户端和服务器之间的网络速度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 2015-10-07
  • 2013-06-02
  • 2012-01-09
相关资源
最近更新 更多