透過 Servlet 實作 HTTP 代理,核心邏輯:接收請求參數 URL,解碼後建立 java.net.URL 連線,以 BufferedReader 讀取遠端回應逐行輸出至客戶端。適合學習 Servlet I/O 與網路程式基礎。
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Proxy extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String query = null;
response.setContentType("text/html");
PrintWriter out = response.getWriter();
query = request.getParameter("URL");
if (query == null) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing URL parameter");
return;
}
try {
query = URLDecoder.decode(query);
} catch (Exception exception) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "URL decode error " + exception);
return;
}
try {
URL url = new URL(query);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = in.readLine()) != null)
out.println(line);
out.flush();
} catch (IOException exception) {
response.sendError(HttpServletResponse.SC_NOT_FOUND, "Exception: " + exception);
}
}
}
https://host/Proxy?URL=encoded_target_urlURLDecoder.decode 還原目標 URL。InputStreamReader + BufferedReader 逐行讀寫,簡單但非高效(生產環境建議用 NIO/非同步)。此範例展示 Servlet 作為網路中介的基本形態,是理解代理模式、Servlet 串流處理與異常捕獲的優良入門教材。