关于AJAX的一个小例子,页面接收不到回传的值 续
上次发了一个关于回传值问题的问题贴,很快得到了圆满解答,感谢某牛人。
不过由此我发现整个我有一个问题其实一直没弄明白,希望大家给我讲解一下,具体部分代码如下
(1)首先是WebRoot下的index.jsp页面的AJAX部分:
<script>
function createXMLHttp(){
var request;
var browser=navigator.appName;
if(browser=="Microsoft Internet Explorer"){
request=new ActiveXObject("Microsoft.XMLHttp");
return request;
}else{
request=new XMLHttpRequest();
return request;
}
}
var xhr=createXMLHttp();
function HelloSunYang(){
var url="servlet/Hello.do?name=" + document.forms[0].name.value;
//tiaozhuan
alert(url);
xhr.open("GET",url,true);
xhr.onreadystatechange=getHello ;
xhr.send();
}
function getHello(){
//panduan XMLHttpRequest zhuangtai
if(xhr.readyState==4){
//shezhibianliang helloStr dezhi
var helloStr=xhr.responseText;
alert(helloStr);
document.getElementById("hello").innerHTML=helloStr;
}
}
</script>
(2)然后是配置文件WebRoot\WEB-INF下的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>helloAJAX </servlet-name>
<servlet-class>sunyang.Hello </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloAJAX </servlet-name>
<url-pattern>/servlet/Hello.do </url-pattern>
</servlet-mapping>
(3)然后是src\sunyang下的sverlet文件:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException,
IOException {
String name=request.getParameter("name");
String result="Hello"+name;
request.setAttribute("name", result);
RequestDispatcher rd=request.getRequestDispatcher("hello.jsp");
rd.forward(request, response);
}
关于这3部分的
var url="servlet/Hello.do?name=" + document.forms[0].name.value;
<url-pattern>/servlet/Hello.do </url-pattern>
RequestDispatcher rd=request.getRequestDispatcher("/hello.jsp");
如果改写成
var url="Hello.do?name=" + document.forms[0].name.value;
<url-pattern>/Hello.do </url-pattern>
RequestDispatcher rd=request.getRequestDispatcher("hello.jsp");
也可以照样执行
但是如果改写成
var url="servlet/Hello.do?name=" + document.forms[0].name.value;
<url-pattern>/servlet/Hello.do </url-pattern>
RequestDispatcher rd=request.getRequestDispatcher("hello.jsp");
就会报错,请问各位牛人这是什么原因呢?希望能详细的给我讲解一下servlet的路径方面的知识,越详细越好啊~~
------解决方案--------------------
但是如果改写成
var url="servlet/Hello.do?name=" + document.forms[0].name.value;
<url-pattern>/servlet/Hello.do </url-pattern>
RequestDispatcher rd=request.getRequestDispatcher("hello.jsp");
这样请求,request.getRequestDispatcher("hello.jsp"); 相对路径
相对/servlet/Hello.do 就成了/servlet/hello.jsp了
相对/Hello.do 就成了/hello.jsp
如果request.getRequestDispatcher("/hello.jsp");
就是应该的跟路径/hello.jsp