日期:2014-05-17  浏览次数:20752 次

关于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