如何在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 结果,这也是一个调度程序结果,应该被排除。