1. 程式人生 > >關於Servlet建立成功卻無法在JavaScript中引用的問題

關於Servlet建立成功卻無法在JavaScript中引用的問題

上課剛學了Ajax,想利用Js和Servlet通訊,獲取資訊更新表格內容,程式碼如下:

jsp程式碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>獲取多人資訊的表格</title>
    <script type="text/javascript" src="Javascript/getPersonByJson.js"></script>
    <script type="text/javascript" src="Javascript/jquery-1.10.2.js"></script>
	

  </head>
  
  <body>
   
    	<input type="button" value="點選獲取多人資訊" onclick="getPerson();">
    	<div id="showinfor">
    		<table id="p_table" border="3px" width="100%">
    			<tbody>
    			<tr>
    				<th>姓名</th>
    				<th>性別</th>
    				<th>電話</th>
    				<th>地址</th>
    				</tr>
    			</tbody>
    		</table>
       </div>
  </body>
</html>
 

Js程式碼如下:

var xmlHttp;
function getPerson(){
	createXhr();
	//open(method, url, asynch)
	//傳送資料用post
	xmlHttp.open("get","PersonServletJson",true);
	xmlHttp.onreadystatechange = function(){
		//4表示已完成
		if(xmlHttp.readyState==4){
			if(xmlHttp.status==200){
				var e_table=document.getElementById("p_table");
				//解析返回的Json格式資料
				var jsonObject=eval("("+xmlHttp.responseText+")");
				for(var i=0;i<jsonObject.length;i++){
					var name=jsonObject[i].name;
					var sex=jsonObject[i].sex;
					var phone=jsonObject[i].phone;
					var address=jsonObject[i].address;
					
					//更新表格內容
					var e_tr=e_table.insertRow(i+1);
					var t_td1=e_tr.insertCell(0);
					t_td1.innerHTML=name;
					var t_td2=e_tr.insertCell(1);
					t_td2.innerHTML=sex;
					var t_td3=e_tr.insertCell(2);
					t_td3.innerHTML=phone;
					var t_td4=e_tr.insertCell(3);
					t_td4.innerHTML=address;
					
					
				}
				
			}
			
		}
		
		
	};
	xmlHttp.send(null);
	
}
	//建立XMLHttpRequest
	function createXhr(){
		if(window.XMLHttpRequest){
			xmlHttp = new XMLHttpRequest();
			
		}else{
			if(window.ActiveXObject){
				var activeName = ["micrsoft.xmlhttp","msxml2.xmlhttp"];
				for(var i=0;i<activeName.length;i++){
					try{
						xmlHttp = new ActiveXObject(activeName[i]);
						break;
						
					}catch(e){
						alert("xmlhttp"+e);
						
					}
					
				}
			}
			
			
		}
		
	}
	
	

Servlet程式碼如下:

package com.inspur;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class PersonServlet
 */
@WebServlet("/PersonServlet")
public class PersonServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see Httpersonervlet#Httpersonervlet()
     */
    public PersonServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Httpersonervlet#doGet(HttpersonervletRequest request, HttpersonervletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		Person[] person = new Person[5];
		person[0] = new Person("zhangsan1","male","333","changqing");
		person[1] = new Person("zhangsan1","male","333","changqing");
		person[2] = new Person("zhangsan1","male","333","changqing");
		person[3] = new Person("zhangsan1","male","333","changqing");
		person[4] = new Person("zhangsan1","male","333","changqing");
		StringBuffer resultStr = new StringBuffer();
		resultStr.append("[");
		//按照Json格式編輯返回的資訊,用\轉義字元
		for(int i=0;i<person.length;i++){
			if(i==person.length-1){
				resultStr.append("{\"name\":\""+person[i].getName()
						+"\",\"sex\":\""+person[i].getSex()+"\",\"phone\":\""
						+person[i].getPhone()+"\",\"address\":\""
						+person[i].getAddress()+"\"}");
				
			}else{
				resultStr.append("{\"name\":\""+person[i].getName()
						+"\",\"sex\":\""+person[i].getSex()+"\",\"phone\":\""
						+person[i].getPhone()+"\",\"address\":\""
						+person[i].getAddress()+"\"},");
			}
		}
		resultStr.append("]");
		PrintWriter out = response.getWriter();
		out.print(resultStr);
		out.flush();
		out.close();
	}

	/**
	 * @see Httpersonervlet#doPost(HttpersonervletRequest request, HttpersonervletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

可是當點選按鈕後發現,xmlHttp.status為404。找不到Servlet,百度了好久也沒找到答案,最後發現是xmlHttp.open()方法裡的url引數錯誤,如果WebRoot->WEB-INF->web.xml中對應的Servlet為:

  <servlet-mapping>
    <servlet-name>PersonServlet</servlet-name>
    <url-pattern>/servlet/PersonServlet</url-pattern>
  </servlet-mapping>	

則url應該為servlet/PersonServlet,更改url後就可以成功執行