English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Servlet 클라이언트 HTTP 요청

브라우저가 웹 페이지를 요청할 때, 그는 웹 서버에게 특정 정보를 보내지만, 이 정보는 직접 읽을 수 없습니다.因为这些信息是作为 HTTP 요청의 헤더 부분으로 전송되기 때문입니다. 확인할 수 있습니다 HTTP 프로토콜 자세한 정보를 더 알아보세요。

아래는 브라우저에서 중요한 헤더 정보로, 웹 프로그래밍에서 자주 사용할 수 있습니다:

헤더 정보설명
Accept이 헤더 정보는 브라우저나 다른 클라이언트가 처리할 수 있는 MIME 타입을 지정합니다. 값 image/png 또는 image/jpeg 가 가장 일반적인 두 가지 가능한 값입니다.
Accept-Charset이 헤더 정보는 브라우저가 정보를 표시할 수 있는 문자셋을 지정합니다. 예를 들어, ISO-8859-1。
Accept-Encoding이 헤더 정보는 브라우저가 어떻게 처리할 수 있는编码 타입을 지정합니다. 값 gzip 또는 compress 가 가장 일반적인 두 가지 가능한 값입니다.
Accept-Language이 헤더 정보는 클라이언트가 선호하는 언어를 지정합니다. 이 경우, Servlet은 여러 언어의 결과를 생성합니다. 예를 들어, en, en-us, ru 등.
Authorization이 헤더 정보는 클라이언트가 비밀번호로 보호된 웹 페이지에 접근할 때 자신의 신원을 인식하기 위해 사용됩니다.
Connection이 헤더 정보는 클라이언트가 지속적인 HTTP 연결을 처리할 수 있는지 여부를 나타냅니다. 지속적인 연결은 클라이언트나 다른 브라우저가 단일 요청으로 여러 파일을 가져올 수 있게 합니다. 값 Keep-Alive 는 지속적인 연결이 사용되었다는 의미입니다.
Content-Length이 헤더 정보는 POST 요청에만 적용되며, POST 데이터의 크기를 바이트 단위로 지정합니다.
Cookie이 헤더 정보는 이전에 브라우저에 보낸 cookies를 서버로 반환합니다.
Host이 헤더 정보는 원래 URL의 호스트와 포트를 지정합니다.
If-Modified-Since이 헤더 정보는 지정된 날짜 이후에 페이지가 변경되었을 때, 클라이언트가 원하는 페이지를 나타냅니다. 새로운 결과가 사용할 수 없으면, 서버는 304 코드는 Not Modified 헤더 정보입니다.
If-Unmodified-Since이 헤더 정보는 If-Modified-Since의 반대로, 지정된 날짜 이전에 문서가 있을 때만 작업이 성공하도록 지정합니다.
Referer이 헤더 정보는 지정된 Web 페이지의 URL을 가리킵니다. 예를 들어, 웹 페이지 1، 웹 페이지로 이동하는 링크를 클릭할 때 2، 브라우저가 웹 페이지를 요청할 때 2 이 때, 웹 페이지 1 의 URL이 Referer 헤더 정보에 포함됩니다.
User-Agent이 헤더 정보는 요청을 보낸 브라우저나 다른 클라이언트를 인식하고, 다른 유형의 브라우저에 다른 내용을 반환할 수 있습니다.

HTTP 헤더를 읽는 메서드

Servlet 프로그램에서 HTTP 헤더를 읽는 데 사용할 수 있는 다음의 메서드가 있습니다. 이 메서드들은 HttpServletRequest 객체 사용 가능

순번메서드 & 설명
1Cookie[] getCookies()
클라이언트가 이 요청을 보낸 모든 Cookie 객체를 포함하는 배열을 반환합니다.
2Enumeration getAttributeNames()
요청에 제공된 사용 가능한 속성 이름을 포함하는 열거를 반환합니다.
3Enumeration getHeaderNames()
요청에 포함된 모든 헤더 이름을 포함하는 열거를 반환합니다.
4Enumeration getParameterNames()
요청에 포함된 매개변수 이름을 포함하는 String 객체의 열거를 반환합니다.
5HttpSession getSession()
현재 세션과 관련된 session 세션을 반환하거나, 요청에 세션이 없으면 하나를 생성합니다.
6HttpSession getSession(boolean create)
현재 세션과 관련된 HttpSession을 반환하거나, 현재 세션이 없고 생성이 참이면 새로운 session 세션을 반환합니다.
7Locale getLocale()
Accept을 기반으로 합니다.-Language 헤더, 클라이언트가 내용을 받을 때 선호하는 지역 설정을 반환합니다.
8Object getAttribute(String name)
이름이 주어진 속성의 값을 객체 형태로 반환합니다. 주어진 이름의 속성이 존재하지 않으면 null을 반환합니다.
9ServletInputStream getInputStream()
ServletInputStream을 사용하여 요청 본문을 이진 데이터 형태로 검색합니다.
10String getAuthType()
Servlet을 보호하는 인증 기법의 이름을 반환합니다. 예를 들어, "BASIC" 또는 "SSL", JSP가 보호되지 않으면 null을 반환합니다.
11String getCharacterEncoding()
요청 본문에서 사용하는 문자编码의 이름을 반환합니다.
12String getContentType()
요청 본문의 MIME 타입을 반환합니다. 타입을 알 수 없으면 null을 반환합니다.
13String getContextPath()
요청 상태의 요청 URI 부분을 반환합니다.
14String getHeader(String name)
지정된 요청 헤더의 값을 문자열 형태로 반환합니다.
15String getMethod()
요청의 HTTP 메서드 이름을 반환합니다. 예를 들어, GET, POST 또는 PUT.
16String getParameter(String name)
파라미터의 값이 문자열 형태로 반환되거나, 파라미터가 존재하지 않으면 null을 반환합니다.
17String getPathInfo()
요청이 보내질 때, 클라이언트가 보낸 URL과 관련된 추가적인 경로 정보를 반환합니다.
18String getProtocol()
요청 프로토콜의 이름과 버전을 반환합니다.
19String getQueryString()
경로 뒤에 포함된 요청 URL의 쿼리 문자열을 반환합니다.
20String getRemoteAddr()
요청을 보낸 클라이언트의 인터넷 프로토콜(IP) 주소를 반환합니다.
21String getRemoteHost()
요청을 보낸 클라이언트의 완전한 제한 이름을 반환합니다.
22String getRemoteUser()
사용자가 인증되었으면 요청을 보낸 로그인 사용자를 반환하거나, 인증되지 않았으면 null을 반환합니다.
23String getRequestURI()
협의서 이름에서 HTTP 요청의 첫 번째 행의 쿼리 문자열까지, 해당 요청의 URL의 일부를 반환합니다.
24String getRequestedSessionId()
返回由客户端指定的 session 会话 ID。
25String getServletPath()
返回调用 JSP 的请求的 URL 的一部分。
26String[] getParameterValues(String name)
返回一个字符串对象的数组,包含所有给定的请求参数的值,如果参数不存在则返回 null。
27boolean isSecure()
返回一个布尔值,指示请求是否使用安全通道,如 HTTPS。
28int getContentLength()
以字节为单位返回请求主体的长度,并提供输入流,或者如果长度未知则返回 -1。
29int getIntHeader(String name)
返回指定的请求头的值为一个 int 值。
30int getServerPort()
返回接收到这个请求的端口号。
31int getParameterMap()
将参数封装成 Map 类型。

HTTP Header 请求示例

下面的示例使用 HttpServletRequest 的 getHeaderNames() 方法读取 HTTP 头信息。该方法返回一个枚举,包含与当前的 HTTP 请求相关的头信息。

一旦我们有一个枚举,我们可以以标准方式循环枚举,使用 hasMoreElements() 方法来确定何时停止,使用 nextElement() 方法来获取每个参数的名称。

//导入必需的 java 库
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("}}/DisplayHeader")
//扩展 HttpServlet 类
public class DisplayHeader extends HttpServlet {
    // 处理 GET 方法请求的方法
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String title = "HTTP Header 请求示例 - 基础教程网示例";
        String docType =
            "<!DOCTYPE html> \n";
            out.println(docType +
            "<html>\n" +
            "<head><meta charset=\"utf-8\"><title>" + title + "</title></head>\n"+
            "<body bgcolor=\"#f0f0f0\">\n" +
            "<h1 align=\"center\">" + title + "</h1>\n" +
            "<table width=\"100%\" border=\"1\" align=\"center\">\n" +
            "<tr bgcolor=\"#949494">\n" +
            "<th>Header 名称</th><th>Header 值</th>\n"+
            "</tr>\n");
        Enumeration headerNames = request.getHeaderNames();
        while(headerNames.hasMoreElements()) {
            String paramName = (String)headerNames.nextElement();
            <tr><td> +  + "</td>\n
            String paramValue = request.getHeader(paramName);
            <td> + paramValue + "</td></tr>\n");
        }
        out.println("</table>\n</body></html>");
    }
    // POST 메서드 요청을 처리하는 메서드
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

이 테스트 예제는 TomcatTest 프로젝트 아래에 위치하고, 해당 web.xml 설정은 다음과 같습니다:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
  <servlet  
    <!-- 클래스 이름 -->  
    <servlet-name>DisplayHeader</servlet-name>  
    <!-- 의 패키지 -->  
    <servlet-class>com.w3codebox.test.DisplayHeader</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>DisplayHeader</servlet-name>  
    <!-- 방문한 웹사이트 -->  
    <url-pattern>/TomcatTest/DisplayHeader</url-pattern>  
  </servlet-mapping>  
</web-app>

지금, 위의 Servlet을 호출하여 다음을 방문하십시오: http://localhost:8080/TomcatTest/DisplayHeader 다음과 같은 결과가 발생할 것입니다: