headers.java
package pkg;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Headers
*/
@WebServlet("/Headers")
public class Headers extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter print = response.getWriter();
// HttpリクエストのHostヘッダを取得(Hostヘッダがない場合はnull)
String hostHdr = request.getHeader("Host");
// HostヘッダをHostとPortに分割
String[] aryHostValue = (hostHdr == null) ? null : hostHdr.split(":");
// Host値を取得(Hostヘッダがない場合はnull)
String host = (hostHdr == null) ? null : aryHostValue[0];
// port値を取得
String port;
if(aryHostValue.length > 1) {
port = aryHostValue[1];
} else if (request.isSecure()) {
// ポート番号省略かつhttps接続
port = "443";
} else {
// ポート番号省略かつhttp接続
port = "80";
}
if(host == null) {
// ★Hostヘッダがない場合は 400(BatReqest)
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
} else if(port.equals("443")) {
// ★portが443番の場合は処理Aを実行
} else if(port.equals("80")) {
// ★portが80番の場合は処理Bを実行
} else {
// ★portが上記以外は処理Cを実行
}
response.setStatus(HttpServletResponse.SC_OK);
// 取得したHostヘッダの値を表示
if(host == null) {
print.append("Host header is not set.");
} else {
print.append("Host: ").append(host).append("</br>");
print.append("Port: ").append(port).append("</br>");
}
}
}