小编Mat*_*ski的帖子

如何在Spring MVC中代理HTTP请求?

我有一个建立在Spring MVC之上的应用程序.

我想编写处理请求的简单代理,如下所示:

  1. 将相同的HTTP请求发送到某个特定的服务器
  2. 捕获来自此特定服务器的HTTP响应
  3. 向请求客户端返回相同的答案

这是我到目前为止所得到的:

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)

spring-mvc httpresponse http-proxy chunked-encoding

14
推荐指数
1
解决办法
7682
查看次数

长轮询时,10秒后Tomcat 7服务器错误

我正在尝试在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)

java spring-mvc long-polling tomcat7 internal-server-error

2
推荐指数
1
解决办法
2767
查看次数