java 服务器 转发,将HttpServletRequest转发到其他服务器

I got a HttpServletRequest request in my Spring Servlet which I would like to forward AS-IS (i.e. GET or POST content) to a different server.

What would be the best way to do it using Spring Framework?

Do I need to grab all the information and build a new HTTPUrlConnection? Or there is an easier way?

解决方案

Unfortunately there is no easy way to do this. Basically you'll have to reconstruct the request, including:

correct HTTP method

request parameters

requests headers (HTTPUrlConnection doesn't allow to set arbitrary user agent, "Java/1.*" is always appended, you'll need HttpClient)

body

That's a lot of work, not to mention it won't scale since each such proxy call will occupy one thread on your machine.

My advice: use raw sockets or netty and intercept HTTP protocol on the lowest level, just replacing some values (like Host header) on the fly. Can you provide more context, why so you need this?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将文件上传到服务器的指定目录下,可以使用 Java Servlet 的文件上传功能。下面是一个示例代码: ```java import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; @WebServlet("/UploadServlet") public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * 上传数据及保存文件 */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); // 获取上传的文件集合 List<Part> parts = (List<Part>) request.getParts(); // 上传的目标文件夹路径 String uploadDir = "C:/upload/"; // 如果目标文件夹不存在,则创建 File fileSaveDir = new File(uploadDir); if (!fileSaveDir.exists()) { fileSaveDir.mkdir(); } // 遍历上传的文件集合 for (Part part : parts) { // 获取上传文件的名称 String fileName = extractFileName(part); // 如果上传文件的名称不为空,则保存文件 if (fileName != null && !fileName.equals("")) { // 保存上传的文件 part.write(uploadDir + fileName); out.println(fileName + "上传成功!<br>"); } } } /** * 从上传的文件头中提取上传的文件名 */ private String extractFileName(Part part) { String contentDisp = part.getHeader("content-disposition"); String[] items = contentDisp.split(";"); for (String str : items) { if (str.trim().startsWith("filename")) { return str.substring(str.indexOf("=") + 2, str.length() - 1); } } return null; } } ``` 上面的代码中,我们首先获取上传的文件集合,然后遍历文件集合,逐个保存文件到指定目录下。在保存文件之前,我们需要判断上传的目标文件夹是否存在,如果目标文件夹不存在,则创建。最后,我们通过 HTTP 响应向客户端返回上传结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值