如何从Javascript中调用Servlet

4

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了吗? - Vincent Ramdhanie
我会假设 URL 末尾的双引号只是一个粗心的打字错误。如果是真的,请在您的问题中进行修正。 - BalusC
是的,当我提交表单并且工作完美时,我会调用它。现在我想在JavaScript的onunload事件中调用它。 - chetan
3个回答

15

从您最初的问题中:

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期间调用该函数。 如果是这样,则应寻找另一种解决方案。 请求不能保证始终会到达服务器。 这取决于使用的浏览器等诸多因素。 如何正确解决取决于未在问题中清楚说明的唯一功能要求。

我希望如果用户填写不完整并删除关闭浏览器,那么该详细信息将输入数据库。 - chetan
好的,那么请相应地解决它,这样您就不需要在 onunload 上进行黑客攻击。如果您无法弄清如何正确解决它,请随时提出一个新问题,并清楚阐述功能要求 - BalusC

1
如果您正在使用jQuery,可以尝试这个。很简单:
<script>
    $(window).unload(function() {
        document.location.href='/test/dataentry';
    });
</script>

这与 window.onload = function() { ... } 有什么不同? - BalusC
你正在使用 onload。我指的是 unload。这将捕获卸载事件并将用户转发到 /test/dataentry。 - bsimic

0

这可以使用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>

1
这并不保证在所有浏览器中都能正常工作。它还取决于客户端和服务器之间的网络速度。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接