如何从javascript调用servlet

时间:2011-06-02 17:50:57

标签: java javascript jsp servlets

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?

3 个答案:

答案 0 :(得分:14)

从原来的问题:

document.location.href="/dataentry";

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

因此,如果包含该脚本的JSP页面正在

上运行
  

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

然后您的location网址将指向

  

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期间调用该函数。如果这是真的,那么你应该寻找另一种解决方案。该请求无法保证可以到达服务器。这取决于所使用的浏览器。如何正确地解决它取决于唯一的功能要求,这个问题不明确。

答案 1 :(得分:1)

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

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

答案 2 :(得分: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>