小弟初学struts2,新建一个叫ZS的工程,在用jquery进行ajax操作时碰见一个问题,struts配置时候,如果package的namespace为空时,url不需要加上工程名就能访问action,但是namespace不为空时url必须加上工程名(ZS)才能访问到action,这是为什么,怎么才能在namespace不为空时不加工程名也能访问到action(即url="test/selectDemo.action";)。
代码贴下面了:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
<A href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"></A>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
struts.xml
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml"></include>
<package name="demohello" namespace="/test"
extends="struts-default">
<action name="selectDemo" class="com.demo.DemoAction"
method="selectDemo">
</action>
</package>
</struts>
demo.js
function test(){ 
var url="/ZS/test/selectDemo.action";
   $.ajax({ 
    url:url,          
    type: 'POST',     
    dataType: 'xml',  
data: {name:"admin"},           
timeout: 1000,          
error: function(){
alert('Error loading XML document'); 
}, 
  success: function(xml){
alert(xml.xml);
 }
}); } 
Action.javapackage com.demo;import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;public class DemoAction extends ActionSupport {
public String selectDemo() throws IOException {
//HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/xml;charset=utf-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
System.out.println("000000001");
StringBuilder sb = new StringBuilder();
sb.append("<?xml version='1.0' encoding='UTF-8'?><provinces>");
for (int i = 0; i < 10; i++) {
sb.append("<province>");
sb.append("<provinceid>name_" + i + "</provinceid>");
sb.append("<provinceName>" + i + "</provinceName>");
sb.append("</province>");
}
sb.append("</provinces>");
out.print(sb.toString());
out.flush();
out.close();
return null;
}
}