Как позвонить сервлету из JavaScript - PullRequest
3 голосов
/ 02 июня 2011

Конфигурация сервлета в web.xml

<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 не может вызвать мой сервлет.

Есть ли ошибки?как позвонить сервлету?

Ответы [ 3 ]

14 голосов
/ 02 июня 2011

Исходный вопрос:

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() предполагает, что вы вызываете функцию во время onunload или onbeforeunload. Если это правда, то вы должны искать другое решение. Запрос не гарантирует когда-либо достигать сервера. Это зависит, среди прочего, от используемого браузера. Как ее решить правильно, зависит от единственного функционального требования, которое не ясно из вопроса.

1 голос
/ 03 июня 2011

Вы можете попробовать это, если вы используете jQuery.Все просто:

<script>
    $(window).unload(function() {
        document.location.href='/test/dataentry';
    });
</script>
0 голосов
/ 04 июня 2011

Это можно сделать с помощью 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...