如何在apache中获取请求体和响应体struts2? - post 使用 $.ajax
How to get the request body and response body in apache struts2? - post using $.ajax
我正在使用 ajax 调用网络服务并使用 struts 获取请求参数。这一切工作正常,但我试图根据 json 获得响应,或者我只需要来自服务器的 return 中的成功或失败标志。
这是我的代码..
Ajax 部分
index.jsp
function funcName(str, str1){
$.ajax({
url : "${pageContext.request.contextPath}/webservicename",
type : "post",
data : {
'key' : str,
'Status' : str1
},
success : getResponse,
error : function(xhr) {
alert("An error occured: " + xhr.status + " " + xhr.statusText);
}
});
}
function getResponse(xhr){
$("#responseBody").html(xhr);
}
服务 webservicename 映射到 struts.xml 中的一个动作到 java class 命名的 DataAction
DataAction.java
public class DataAction implements ServletRequestAware{
HttpServletRequest httpServletRequest = null;
@Override
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
httpServletRequest = arg0;
}
public String execute() {
String key = httpServletRequest.getParameter("key");
String status = httpServletRequest.getParameter("status");
System.out.println(key +" "+ status);
return "success";
}
}
直到这里它工作正常,我修改了 DataAction class 并尝试使用 Print writer 向响应写入一些内容,但它显示以下错误
java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
修改后的代码
public class DataAction implements ServletRequestAware, ServletResponseAware{
HttpServletRequest httpServletRequest = null;
HttpServletResponse httpServletResponse = null;
@Override
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
httpServletRequest = arg0;
}
@Override
public void setServletResponse(HttpServletResponse arg0) {
// TODO Auto-generated method stub
httpServletResponse = arg0;
}
public String execute() {
try {
PrintWriter writer = httpServletResponse.getWriter();
writer.println("hello server");
writer.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String key = httpServletRequest.getParameter("key");
String status = httpServletRequest.getParameter("status");
System.out.println(key +" "+ status);
return "success";
}
}
如何获取响应体和请求体?
由于您写入 http servlet 响应,响应已经提交,因此您不能使用任何调度程序结果,例如 "success"
。
但是您可以 return 结果 NONE
来阻止结果在操作后执行,这可能是唯一的选择。
请注意,如果您在堆栈上有任何其他拦截器,例如工作流拦截器,那么它可能 return INPUT
结果,这也是一个调度程序结果,应该被排除。
我正在使用 ajax 调用网络服务并使用 struts 获取请求参数。这一切工作正常,但我试图根据 json 获得响应,或者我只需要来自服务器的 return 中的成功或失败标志。 这是我的代码.. Ajax 部分 index.jsp
function funcName(str, str1){
$.ajax({
url : "${pageContext.request.contextPath}/webservicename",
type : "post",
data : {
'key' : str,
'Status' : str1
},
success : getResponse,
error : function(xhr) {
alert("An error occured: " + xhr.status + " " + xhr.statusText);
}
});
}
function getResponse(xhr){
$("#responseBody").html(xhr);
}
服务 webservicename 映射到 struts.xml 中的一个动作到 java class 命名的 DataAction DataAction.java
public class DataAction implements ServletRequestAware{
HttpServletRequest httpServletRequest = null;
@Override
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
httpServletRequest = arg0;
}
public String execute() {
String key = httpServletRequest.getParameter("key");
String status = httpServletRequest.getParameter("status");
System.out.println(key +" "+ status);
return "success";
}
}
直到这里它工作正常,我修改了 DataAction class 并尝试使用 Print writer 向响应写入一些内容,但它显示以下错误
java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
修改后的代码
public class DataAction implements ServletRequestAware, ServletResponseAware{
HttpServletRequest httpServletRequest = null;
HttpServletResponse httpServletResponse = null;
@Override
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
httpServletRequest = arg0;
}
@Override
public void setServletResponse(HttpServletResponse arg0) {
// TODO Auto-generated method stub
httpServletResponse = arg0;
}
public String execute() {
try {
PrintWriter writer = httpServletResponse.getWriter();
writer.println("hello server");
writer.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String key = httpServletRequest.getParameter("key");
String status = httpServletRequest.getParameter("status");
System.out.println(key +" "+ status);
return "success";
}
}
如何获取响应体和请求体?
由于您写入 http servlet 响应,响应已经提交,因此您不能使用任何调度程序结果,例如 "success"
。
但是您可以 return 结果 NONE
来阻止结果在操作后执行,这可能是唯一的选择。
请注意,如果您在堆栈上有任何其他拦截器,例如工作流拦截器,那么它可能 return INPUT
结果,这也是一个调度程序结果,应该被排除。