/**
* 不带消息体的响应方法
*
* @param code 响应码
* @param request TODO
* @param response
* @throws IOException 当响应输出异常时抛出
*/
public static void response(int code, HttpServletRequest request, HttpServletResponse response)
throws IOException
{
// 必选
response.setHeader(APIVERSION_KEY, apiVersion);
response.setHeader(TIMESTAMP_KEY, sf.format(new Date()));
response.setHeader(RESULT_CODE_KEY, String.valueOf(code));
// add by c59623 为了便于记录系统错误话单,需要在request设置错误码,以便在过滤器能识辨
request.setAttribute(RESULT_CODE_KEY, String.valueOf(code));
}
/**
* 处理带消息内容处理。包括设置返回参数返回消息内容
*
* @param xml 响应消息内容
* @param request http请求
* @param response http响应
* @throws IOException 当响应输出异常时抛出
*
*/
public static void response(String xml, HttpServletRequest request, HttpServletResponse response)
throws IOException
{
String code = (String)request.getAttribute("resultCode");
if (null == code || "".equals(code))
{
code = String.valueOf(TerminalCodes.SUCCESS);
}
int resultCode = StringTools.toInt(code, TerminalCodes.SUCCESS);
// 默认返回
response(resultCode, request, response);
/*
* 以下为消息体返回处理
*/
ByteArrayOutputStream baseOut = new ByteArrayOutputStream(512);
// 默认输出到ByteArrayOutputStream中
OutputStream out = baseOut;
String acceptEncoding = StrUtil.trim(request.getHeader(ACCEPT_ENCODING_KEY));
if (GZIP.equalsIgnoreCase(acceptEncoding))
{
// 内容压缩类型
response.setHeader(CONTENT_ENCODING_KEY, acceptEncoding);
// 支持gzip压缩时压缩流也输出到ByteArrayOutputStream中
out = new GZIPOutputStream(baseOut);
}
byte[] xmlHead = XMLHEAD.getBytes(UTF8);
byte[] start = START.getBytes(UTF8);
byte[] xmlBytes = xml.getBytes(UTF8);
byte[] end = END.getBytes(UTF8);
int origSize = xmlHead.length + start.length + xmlBytes.length + end.length;
out.write(xmlHead);
out.write(start);
out.write(xmlBytes);
out.write(end);
// 关闭流,确保所有输出都结束
out.close();
// 必选:消息内容长度
response.setHeader(CONTENT_LENGTH_KEY, String.valueOf(baseOut.size()));
response.setHeader(ORIG_CONTENT_LENGTH_KEY, String.valueOf(origSize));
// 可选
response.setCharacterEncoding(UTF8);
response.setHeader(CONTENT_TYPE_KEY, "application/xml");
// 返回消息内容
baseOut.writeTo(response.getOutputStream());
}
分享到:
相关推荐
JavaWeb开发技术-HTTP响应消息HTTP响应头 JavaWeb开发技术中,HTTP响应消息头是服务器向客户端发送的响应消息的重要组成部分。HTTP响应消息头是指在响应状态行之后的多行文本,它们是由头字段名称和值构成的,每个...
3. **OnGetMinMaxInfo()**:响应WM_GETMINMAXINFO消息,允许设置窗口的最大和最小尺寸。 4. **OnNcCreate()**:响应WM_NCCREATE消息,表明窗口的非客户区即将创建。 5. **OnNcCalcSize()**:响应WM_NCCALCSIZE消息...
例如,可以设置消息过滤器来优先处理高优先级的消息,或者在后台线程中处理耗时的操作,避免阻塞消息循环。 总结来说,Windows的消息响应机制是构建用户界面和处理用户交互的基础。通过Visual Studio 2005这样的...
本主题将深入探讨HTTP通信中的消息头与响应头,以及如何通过它们来控制浏览器行为。我们将以一个简单的示例项目"HttpTest"为背景,分析相关知识点。 一、HTTP消息头与响应头 1. HTTP消息结构:HTTP请求由三部分...
本文将深入探讨MFC消息响应机制,以及如何通过纯代码设计对话框。 首先,我们来看MFC中的消息响应。在Windows应用程序中,用户与界面的交互都以消息的形式进行,如鼠标点击、键盘输入等。MFC通过消息映射机制...
这些类提供了丰富的成员函数,可以直接调用来设置控件属性、响应用户输入等。 6. **示例代码**: - 在给定的压缩包文件中,testDlg可能是对话框类的一个实例,可能包含了一些子控件。要使这些子控件响应键盘消息,...
在实现鼠标消息的响应时,我们需要使用LoadCursor函数来加载不同的光标,并使用SetCursor函数来设置当前的光标。同时,我们也可以使用GetCursor函数来获取当前的光标。 在MFC中,还有许多其他的消息可以被处理,...
接着`PreSubclassWindow()`子类化对话框,然后`OnCreate()`、`OnSize()`、`OnMove()`、`OnSetFont()`和`OnInitDialog()`分别处理创建、大小变化、移动、字体设置和初始化对话框控件的消息。 MFC的消息响应顺序是...
本文将详细介绍如何在带有复选框的 `CTreeCtrl` 中响应复选消息,并实现当用户点击某个节点时自动设置其父节点和子节点的复选状态。 #### 1. 消息记录 为了响应复选框的点击事件,我们需要关注以下消息: - **TVN...
消息模式的Actor实现是响应式架构中的一个重要组件,而Akka框架则是Scala语言中实现这一模式的首选工具。 Akka是由Lightbend公司开发的一个开源框架,专门用于构建高度并发、分布式和容错的系统。它基于Actor模型,...
6. **OnSetFont()**:此函数响应`WM_SETFONT`消息,用于设置对话框的字体。 7. **OnInitDialog()**:该函数响应`WM_INITDIALOG`消息,在对话框初始化时调用。可以在这里进行一些初始设置,比如设置控件文本等。 ...
本示例主要探讨的是如何动态创建按钮以及设置消息快捷键的响应机制。 首先,我们需要了解MFC中的CWnd类。CWnd是所有窗口类的基础,包括按钮、编辑框等控件。在MFC中,动态创建一个按钮通常涉及到以下几个步骤: 1....
本文将深入探讨如何在MFC应用程序中实现这一功能,并且响应来自网页的消息。 首先,我们需要了解MFC中的WebBrowser控件。WebBrowser控件是MFC对Internet Explorer浏览器引擎的封装,它允许我们在MFC应用中内嵌网页...
在博客链接中提到的文章(可能已经过期,无法直接访问),开发者可能详细解释了如何设置代理(delegates)、使用协议(protocols)来传递消息,或者如何使用Block和Closure来处理事件。这些技术都是iOS开发中常用的...
另外,为了使List Control能够接收到键盘消息,我们需要在窗口类的注册过程中设置窗口样式,例如在CMyDialog派生类的 OnInitDialog 函数里添加以下代码: ```cpp // 设置List Control接收键盘消息的样式 ...
2. **响应消息事件**: - MFC通过消息映射机制处理控件的消息。在对话框类的`.h`文件中,添加消息映射项以声明按钮的消息处理函数。例如,对于`BN_CLICKED`消息,可以添加以下映射: ```cpp BEGIN_MESSAGE_MAP...
接下来,要让窗口能够响应消息,我们需要注册窗口过程函数,这通常在程序启动时完成。在易语言中,我们使用“设置窗口过程”命令,传入窗口句柄和处理消息的子程序名。这个子程序会接收到操作系统发送的各种窗口消息...
本教程将详细讲解如何在VC++对话框程序中实现键盘消息响应和快捷键功能。 首先,了解Windows消息机制是关键。在Windows系统中,所有用户界面事件(包括键盘输入)都被封装成消息,然后通过消息队列传递给相应窗口的...
这样,MFC可以快速找到并调用相应函数,而不需要每个消息都设置为虚拟函数,提高了效率。 3. **CObject类**:所有MFC类的基类,提供了一些基础功能,如对象的序列化、动态类型信息、调试支持等。通过继承`CObject`...
上述`sendRequest`方法封装了基本的HTTP GET请求,可以根据实际需求进行扩展,如处理POST请求、设置请求参数、处理响应状态码等。对于POST请求,可以通过`connection.setDoOutput(true)`开启输出流,并使用`...