ajax JSP 文件路径问题

againlove 2008-06-24 09:40:55
初学Ajax技术,遇到了一点问题请高手指教:

我要实现这样的功能:从JSP中获取一个值,传给Servlet, Servlet处理之后,返回一个字符串给JSP。
postingXML.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sending an XML Request</title>
<script type="text/javascript" language="javascript">
var xmlHttp;

function createXMLHttpRequest(){

if(window.XMLHttpRequest){ //Mozilla

xmlHttp = new XMLHttpRequest();
}
else if(window.ActiveXObject){

try{

xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
try{

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){

alert("创建XMLHttpRequest对象失败");
}
}
}
}

function createXML() {

createXMLHttpRequest()

var xml = "<pets>";

var options = document.getElementById("petTypes").childNodes;

var option = null;

for(var i = 0; i < options.length; i++) {

option = options[i];
if(option.selected) {

xml = xml + "<type>" + option.value + "<\/type>";
}
}
xml = xml + "<\/pets>";

return xml;
}

function sendPetTypes() {

var xml = createXML();

var url = "servlet/PostingXMLExample?timeStamp=" + new Date().getTime();

xmlHttp.open("POST", url, true);

xmlHttp.onreadystatechange = processResponse;//指定响应函数

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

xmlHttp.send(xml);
}

function processResponse(){

if(xmlHttp.readyState == 4){

if(xmlHttp.Status == 200){
parseResults();
//document.all.name.value = xmlHttp.responseText;
}
else{

window.alert("你所请求的页面有异常");
alert(xmlHttp.status);
}
}
}

function parseResults(){

var responseDiv = document.getElementById("serverResponse");

if(responseDiv.hasChildNodes()) {

responseDiv.removeChild(responseDiv.childNodes[0]);
}

var responseText = document.createTextNode(xmlHttp.responseText);

responseDiv.appendChild(responseText);
}
</script>
</head>
<body>
<h1>
Select the types of pets in your home:
</h1>



<form action="#">

<select id="petTypes" size="6" multiple="true">

<option value="cats">
Cats
</option>

<option value="dogs">
Dogs
</option>

<option value="fish">
Fish
</option>

<option value="birds">
Birds
</option>

<option value="hamsters">
Hamsters
</option>

<option value="rabbits">
Rabbits
</option>

</select>

<br />
<br />

<input type="button" value="Submit Pets" onclick="sendPetTypes()" />


</form>

<h2>
Server Response:
</h2>



<div id="serverResponse"></div>
</body>
</html>

Servlet:
PostingXMLExample.java
package org.ajax.servlet;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

import org.w3c.dom.*;

public class PostingXMLExample extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String xml = readXMLFromRequestBody(request);
Document xmlDoc = null;

try {
xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().
parse(new ByteArrayInputStream(xml.getBytes()));
} catch (SAXException e) {

System.out.println("SAXException: " + e);
} catch (ParserConfigurationException e) {

System.out.println("ParserConfigurationException: " + e);
}

NodeList selectedPetTypes = xmlDoc.getElementsByTagName("type");

String type = null;
String responseText = "Selected Pets: ";
for(int i = 0; i < selectedPetTypes.getLength(); i++)
{
type = selectedPetTypes.item(i).getFirstChild().getNodeValue();
responseText = responseText + " " + type;
}
// System.out.println(type);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print(responseText);
}

private String readXMLFromRequestBody(HttpServletRequest request) {

StringBuffer xml = new StringBuffer();
String line = null;

try {
BufferedReader reader = request.getReader();
while((line = reader.readLine())!=null)
{
xml.append(line);
}
} catch (IOException e) {

System.out.println("Error reading XML: " + e.toString());
}
//System.out.println(xml.toString());
return xml.toString();
}


}

问题是这样的,
当我把postingXML.jsp文件放到项目的WebRoot根目录下时,也就是WebRoot、postingXML.jsp这样时,程序正常执行!
但是,我在WebRoot\ 下建一个文件夹(文件夹名为sendParam),将postingXML.jsp放到sendParam文件夹下,也就是WebRootsendParam\postingXML.jsp 时,运行报错,会弹出响应函数function processResponse()中的window.alert("你所请求的页面有异常");对话框,这是为什么啊?请高手帮忙!
...全文
96 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
neo_yoho 2008-06-24
  • 打赏
  • 举报
回复
../表示上一级目录
这里目录相对简单所以就用../了

但是当你不知道当前的JSP与SERVLET的是怎么相对的时候 你可以用
/servlet/PostingXMLExample……
因为单独一个/表示根目录
此时/servlet/PostingXMLExample就表示到根目录下去找servlet文件夹下的PostingXMLExample文件


我说不清楚~ 如果要深入了解 你可以底呕埃网上搜 “HTML相对路径”就可以了
再次对自己的表达能力汗一次
againlove 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 neo_yoho 的回复:]

var url = "../servlet/PostingXMLExample?timeStamp=" + new Date().getTime();
试试
应该是路径问题
[/Quote]
按这样好使了,但我还不是不明白,为什么要在前面加“../
而放在WebRoot\ 目录下就不需要加呢?还请指点一下!!
neo_yoho 2008-06-24
  • 打赏
  • 举报
回复

var url = "../servlet/PostingXMLExample?timeStamp=" + new Date().getTime();
试试
应该是路径问题

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧