我的程序总是调用默认的servlet

时间:2013-01-22 18:26:26

标签: ajax servlets javascript-events

我在调用servlet时遇到问题,所以我需要帮助。 这是我的web.xml

<servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/test/*</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>ajaxServlet</servlet-name>
        <servlet-class>org.finki.exercise.servlet.AjaxServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ajaxServlet</servlet-name>
        <url-pattern>/ajaxServlet/*</url-pattern>
    </servlet-mapping></servlet>

我有一个用于测试目的的jsp页面,我正在尝试从ajax调用servlet

<a href="#" onclick="loadXMLDoc('eva')">proba</a>

ajax fun

function loadXMLDoc(value1)
            {
                var xmlhttp;

                var url="ajaxServlet";
                if (window.XMLHttpRequest)
                {
                    xmlhttp=new XMLHttpRequest();
                }
                else
                {
                    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                xmlhttp.onreadystatechange=function()
                {
                    if (xmlhttp.readyState==4 && xmlhttp.status==200)
                    {

                        document.getElementById("mid_title").innerHTML=xmlhttp.responseText;
                    }
                }

                xmlhttp.open("GET", url+"?url="+value1, true);
                xmlhttp.send();
            }

function loadXMLDoc调用调度程序servlet http://localhost:8097/mavenproject1/test/ajaxServlet
 如何调用ajaxServlet - http://localhost:8097ajaxServlet ???

谢谢!

2 个答案:

答案 0 :(得分:4)

ajaxServlet没有前导/,因此它被解释为相对路径。因此,如果您从ajaxServlethttp://localhost:8097/mavenproject1/test/foo发送请求,请求将发送至http://localhost:8097/mavenproject1/test/ajaxServlet

因此,您需要添加一个前导/。但这还不够,因为您还需要添加应用程序的上下文路径(/mavenproject1)。在JSP页面中,您可以自动执行以下操作(假设您导入了JSTL标记库):

var url= "<c:url value = "ajaxServlet" />";

答案 1 :(得分:0)

这是因为你使用了一个相对链接,从单词ajaxServlet开始。尝试改为

var url = "../ajaxServlet";

或者假设您有JSTL可用,

var url = "${pageContext.request.contextPath}/ajaxServlet";