Как вызвать сервлет из javascript

#java #javascript #jsp #servlets

#java #javascript #jsp #сервлеты

Вопрос:

Конфигурация сервлета в 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 не может вызвать мой сервлет.

Есть ли какая-либо ошибка? как вызвать сервлет?

Комментарии:

1. вы пытались загрузить сервлет, введя URL-адрес в адресную строку браузера?

2. Я предположу, что двойная кавычка в конце URL-адреса — это просто небрежная опечатка. Пожалуйста, исправьте это в своем вопросе, если это правда.

3. да, я вызываю во время отправки формы и работаю идеально. Теперь я хочу вызвать это событие onunload в javascript

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

Комментарии:

1. Я хочу, чтобы, если пользователь заполнит неполное удаление и закроет браузер, тогда эта подробная информация войдет в базу данных.

2. Хорошо, тогда решите это соответствующим образом, чтобы вам не нужно было взламывать onunload . Если вы не можете понять, как решить это должным образом, не стесняйтесь задать новый вопрос с четко сформулированными функциональными требованиями .

Ответ №2:

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

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

Комментарии:

1. Как именно это имеет значение в отличие от window.onload = function() { ... } ?

2. вы используете 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 amp;amp; xmlhttp.status == 200) {
                document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", "/testmail/dataentry", true);
        xmlhttp.send();
    }
</script>
  

Комментарии:

1. Не гарантируется , что это сработает во всех браузерах. Это также зависит от скорости сети между клиентом и сервером.