如何从javascript调用servlet

如何从javascript调用servlet,java,javascript,jsp,servlets,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<

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>

这是对我的J2EE组件的描述
这是我的J2EE组件的显示名称
数据输入器
com.ctn.origin.connection.DataEntry
数据输入器
/数据输入
Javascript:

<script type="text/javascript">
    function unloadEvt() {

        document.location.href='/test/dataentry';

    }
</script>

函数unloadEvt(){
document.location.href='/test/dataentry';
}
但是使用这个javascript不能调用我的servlet


有什么错误吗?如何调用servlet?

来自您最初的问题:

URL中的前导斜杠
/
将带您到域根目录

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

然后您的
位置
URL将指向

但实际上你需要

因此,请相应地修复URL

document.location.href = 'dataentry';
// Or
document.location.href = '/contextname/dataentry';
// Or
document.location.href = '${pageContext.request.contextPath}/dataentry';


除此之外,函数名
unloadEvt()
表明您正在
onunload
onbeforeuload
期间调用该函数。如果这是真的,那么您应该寻找另一种解决方案。请求不保证能到达服务器。这取决于所使用的浏览器。如何正确地解决它取决于问题中不清楚的唯一功能需求。

如果您使用jQuery,您可以尝试此方法。很简单:

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

$(窗口)。卸载(函数(){
document.location.href='/test/dataentry';
});

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

函数loadXMLDoc(){
var-xmlhttp;
if(window.XMLHttpRequest){//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}else{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
document.getElementById(“myDiv”).innerHTML=xmlhttp.responseText;
}
}
open(“GET”,“/testmail/dataentry”,true);
xmlhttp.send();
}

您是否尝试通过在浏览器的地址栏中键入url来加载servlet?我假设url末尾的双引号只是一个粗心的输入错误。如果是,请在您的问题中进行修正。是的,我会在提交表格和工作绩效时致电。现在我想把它称为Javascript的onunload事件,我想如果用户填写不完整的删除并关闭浏览器,那么很多细节就会进入数据库。好的,然后相应地解决它,这样您就不需要破解
onunload
。如果你不能正确地解决这个问题,可以自由地提出一个新的问题,明确阐述功能需求。与
window.onload=function(){…}
相比,这到底有什么区别?你使用的是onload。我指的是卸货。这将捕获卸载事件并将用户转发到/test/dataentry。这并不保证在所有浏览器中都能工作。它还取决于客户端和服务器之间的网络速度。
<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>