我有一个建立在Spring MVC之上的应用程序.
我想编写处理请求的简单代理,如下所示:
这是我到目前为止所得到的:
public void proxyRequest(HttpServletRequest request, HttpServletResponse response) {
try {
HttpUriRequest proxiedRequest = createHttpUriRequest(request);
HttpResponse proxiedResponse = httpClient.execute(proxiedRequest);
writeToResponse(proxiedResponse, response);
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void writeToResponse(HttpResponse proxiedResponse, HttpServletResponse response){
for(Header header : proxiedResponse.getAllHeaders()){
response.addHeader(header.getName(), header.getValue());
}
OutputStream os = null;
InputStream is = null;
try {
is = proxiedResponse.getEntity().getContent();
os = response.getOutputStream();
IOUtils.copy(is, os);
} catch (IOException …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Java Web应用程序中实现长轮询.该应用程序是使用Spring MVC 3.2编写的,我使用了DeferredResult对象(它代表了Servlet 3.0异步响应功能).
问题是当使用DeferredResult时,每次发送请求10秒后我都会收到内部服务器错误(代码500).预期结果是30秒后的文本数据.我的应用程序日志中没有任何内容,Tomcat日志中没有任何内容,但在FireFox网络监视器中,我看到此错误.
另一方面,当我发送同步请求并在服务器中保持30秒时,它成功完成.
谁能帮我这个?
本文末尾有一个测试应用程序下载链接.这是一个maven应用程序.
这是我的应用代码:
ResponseController.java
@Controller
@RequestMapping("responses")
public class ResponseController {
@Autowired
private ResponseService messagesService;
@RequestMapping(value="/async", method=RequestMethod.GET)
@ResponseBody
public DeferredResult<String> getAsyncUpdate() {
return messagesService.getAsyncUpdate();
}
@RequestMapping(value="/sync", method=RequestMethod.GET)
@ResponseBody
public String getSyncUpdate() {
return messagesService.getSyncUpdate();
}
}
Run Code Online (Sandbox Code Playgroud)
ResponseService.java
@Service
public class ResponseService {
private DeferredResult<String> deferredResult;
public DeferredResult<String> getAsyncUpdate(){
deferredResult = new DeferredResult<String>();
return deferredResult;
}
public String getSyncUpdate(){
long startTime = System.currentTimeMillis();
while( System.currentTimeMillis() - startTime <30000){
}
return "RESULT";
}
@Scheduled(fixedDelay=500)
public void …Run Code Online (Sandbox Code Playgroud)