小弟初学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;
}
}
代码贴下面了: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;
}
}
解决方案 »
- 请教一个sql问题
- Error allocating a servlet instance应该怎么解决?
- 请您看看,一种可以动态分配实例的控件,你需要它怎么做它就怎么做
- 求助!!axis 四种实现方式。。document,wrapped方式怎么实现?
- 100分求解~~~当请求超时时页面的跳转设置
- hinbernate 的多表查询问题
- 用struts 做下拉框的连动怎样做
- 请教windows xp下面apache server和tomcat的整合~~~
- 刚装完的jBuilder8不能输入五笔,用拼音输入汉字又行,你们见过这种情况吗?
- MyEclipse与Tomcat配置问题
- 网上订票系统需要哪些知识
- 上传图片
或者把项目部署到webapp/Root目录下边