public void setServletResponse(HttpServletResponse response) { // TODO Auto-generated method stub this.response = response; } @Override public void setServletRequest(HttpServletRequest request) { // TODO Auto-generated method stub this.request = request; } @Override public void setSession(Map<String, Object> session) { this.session = (SessionMap<String, Object>) session; } public void render(String mesg){ try { response.setContentType("text/html;charset=UTF-8"); response.getWriter().print(mesg); response.getWriter().flush(); response.getWriter().close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void renderJsonpString(String mesg){ Map obj = new HashMap(); obj.put("info", mesg); String callbackFunctionName = request.getParameter("callback"); try { response.setContentType("text/html;charset=UTF-8"); response.getWriter().print(callbackFunctionName+"("+gson.toJson(obj)+")"); response.getWriter().flush(); response.getWriter().close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
时间: 2024-01-06 21:06:28 浏览: 154
这是一个 Java 类中的一些方法和属性。它实现了三个接口:ServletResponseAware、ServletRequestAware和SessionAware,并且包含了两个自定义的方法:render和renderJsonpString。
在这个类中,setServletResponse、setServletRequest和setSession方法被重写,这些方法会在 Struts2 框架中调用,用于获取相应的 HTTP 请求和响应对象以及会话信息。
render方法将一个字符串作为参数,并将其写入响应对象中,这个方法可以用来向客户端返回 HTML 或文本数据。
renderJsonpString方法也是将一个字符串作为参数,但它首先将这个字符串放入一个 Map 对象中,并将这个 Map 对象转换成 JSON 格式的字符串。然后,它会从 HTTP 请求参数中获取一个名为 "callback" 的值,这个值代表了一个回调函数的名称。最后,它将 JSON 格式的字符串和回调函数的名称拼接起来,并将结果写入响应对象中,返回给客户端。这个方法通常用于实现跨域请求。
相关问题
org.apache.catalina.core.StandardWrapperValve.invoke 在路径为/baoye的上下文中,Servlet[default]的Servlet.service()引发了具有根本原因的异常java.lang.IllegalStateException: 响应提交后无法调用sendError()
这个异常是因为在 Servlet 的 service 方法中调用了 `sendError()` 方法,但是在响应提交后无法再次修改 response 的状态,因此抛出了 `IllegalStateException` 异常。
解决这个问题的方法是在响应提交之前调用 `sendError()` 方法,或者使用 `sendRedirect()` 方法进行重定向。具体的实现方式可以参考我的上一个回答。
另外需要注意的是,在 Struts2 中,也可以通过在 Action 类中实现 `ServletResponseAware` 接口来获取 response 对象,然后进行操作。例如:
```java
public class MyAction extends ActionSupport implements ServletResponseAware {
private HttpServletResponse response;
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
public String execute() {
// 在提交前进行操作
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Something went wrong");
return SUCCESS;
}
}
```
需要注意的是,实现 `ServletResponseAware` 接口可以获取 response 对象,但是需要在 Struts2 的配置文件中配置,否则无法生效。具体的配置方式可以参考 Struts2 的官方文档。
阅读全文