#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, содержащая скрипт, запущена на
тогда ваш location
URL будет указывать на
Но вам на самом деле нужно
Итак, исправьте 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. Не гарантируется , что это сработает во всех браузерах. Это также зависит от скорости сети между клиентом и сервером.