인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

rainbow2774님의 프로필 이미지
rainbow2774

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

HttpServletRequest - 기본 사용법

/request-header 접속 에러

작성

·

642

0

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue Aug 16 15:21:21 KST 2022
There was an unexpected error (type=Not Found, status=404).
 
/request-header 접속하면 이렇게 에러가 뜨구요 파일은
 
package hello.servlet.basic.request;

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 java.io.IOException;

//http://localhost:8080/request-header?username=hello
@WebServlet(name = "requestHeaderServlet", urlPatterns = "/request-header")
public class RequestHeaderServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
printStartLine(request);
printHeaders(request);
printHeaderUtils(request);
printEtc(request);
response.getWriter().write("ok");
}

//start line 정보
private void printStartLine(HttpServletRequest request) {
System.out.println("--- REQUEST-LINE - start ---");
System.out.println("request.getMethod() = " + request.getMethod()); //GET
System.out.println("request.getProtocol() = " + request.getProtocol()); //HTTP/1.1
System.out.println("request.getScheme() = " + request.getScheme()); //http
// http://localhost:8080/request-header
System.out.println("request.getRequestURL() = " + request.getRequestURL());
// /request-header
System.out.println("request.getRequestURI() = " + request.getRequestURI());
//username=hi
System.out.println("request.getQueryString() = " +
request.getQueryString());
System.out.println("request.isSecure() = " + request.isSecure()); //https사용 유무
System.out.println("--- REQUEST-LINE - end ---");
System.out.println();
}

//Header 모든 정보
private void printHeaders(HttpServletRequest request) {
System.out.println("--- Headers - start ---");
/*
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
System.out.println(headerName + ": " + request.getHeader(headerName));
}
*/
request.getHeaderNames().asIterator()
.forEachRemaining(headerName -> System.out.println(headerName + ": " + request.getHeader(headerName)));
System.out.println("--- Headers - end ---");
System.out.println();
}

//Header 편리한 조회
private void printHeaderUtils(HttpServletRequest request) {
System.out.println("--- Header 편의 조회 start ---");
System.out.println("[Host 편의 조회]");
System.out.println("request.getServerName() = " +
request.getServerName()); //Host 헤더
System.out.println("request.getServerPort() = " +
request.getServerPort()); //Host 헤더
System.out.println();
System.out.println("[Accept-Language 편의 조회]");
request.getLocales().asIterator()
.forEachRemaining(locale -> System.out.println("locale = " +
locale));
System.out.println("request.getLocale() = " + request.getLocale());
System.out.println();
System.out.println("[cookie 편의 조회]");
// if (request.getCookies() != null) {
// for (Cookie cookie : request.getCookies()) {
// System.out.println(cookie.getName() + ": " + cookie.getValue());
// }
// }
System.out.println();
System.out.println("[Content 편의 조회]");
System.out.println("request.getContentType() = " +
request.getContentType());
System.out.println("request.getContentLength() = " +
request.getContentLength());
System.out.println("request.getCharacterEncoding() = " +
request.getCharacterEncoding());
System.out.println("--- Header 편의 조회 end ---");
System.out.println();
}

//기타 정보
private void printEtc(HttpServletRequest request) {
System.out.println("--- 기타 조회 start ---");
System.out.println("[Remote 정보]");
System.out.println("request.getRemoteHost() = " +
request.getRemoteHost()); //
System.out.println("request.getRemoteAddr() = " +
request.getRemoteAddr()); //
System.out.println("request.getRemotePort() = " +
request.getRemotePort()); //
System.out.println();
System.out.println("[Local 정보]");
System.out.println("request.getLocalName() = " +
request.getLocalName()); //
System.out.println("request.getLocalAddr() = " +
request.getLocalAddr()); //
System.out.println("request.getLocalPort() = " +
request.getLocalPort()); //
System.out.println("--- 기타 조회 end ---");
System.out.println();
}
}

RequestHeaderServlet.java 소스코드입니다.

실행했을때 화이트라벨 페이지가 뜨고 콘솔에 파일이 실행이 안되는것 같습니다.
콘솔 로그는

"C:\Program Files\Java\jdk-11.0.13\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.2\lib\idea_rt.jar=62836:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\rainb\IdeaProjects\servlet\out\production\classes;C:\Users\rainb\IdeaProjects\servlet\out\production\resources;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.projectlombok\lombok\1.18.24\13a394eed5c4f9efb2a6d956e2086f1d81e857d9\lombok-1.18.24.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-web\2.7.2\dd8a77a26900a86d9962598cbbd360f6b69bab5e\spring-boot-starter-web-2.7.2.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-json\2.7.2\d51c90fa1f01e7d411d15cb1c2c3eda2f92306c1\spring-boot-starter-json-2.7.2.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\2.7.2\12f0da08b8120adcd137073ad08767f2d60e6cc3\spring-boot-starter-2.7.2.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-tomcat\2.7.2\1b10b4411aae8809aad46d3693001917468138f5\spring-boot-starter-tomcat-2.7.2.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webmvc\5.3.22\519d86b7ac9b8b6bb54739eb4eb73dc13a263b28\spring-webmvc-5.3.22.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework\spring-web\5.3.22\fdab9b8d8df2e6a8fb90f2481c361bcf2c129567\spring-web-5.3.22.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jsr310\2.13.3\ad2f4c61aeb9e2a8bb5e4a3ed782cfddec52d972\jackson-datatype-jsr310-2.13.3.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-parameter-names\2.13.3\f71c4ecc1a403787c963f68bc619b78ce1d2687b\jackson-module-parameter-names-2.13.3.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jdk8\2.13.3\d4884595d5aab5babdb00ddbd693b8fd36b5ec3c\jackson-datatype-jdk8-2.13.3.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.13.3\56deb9ea2c93a7a556b3afbedd616d342963464e\jackson-databind-2.13.3.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\2.7.2\f358e3f8ce01d3a26605fa23f9d3fd408726b033\spring-boot-autoconfigure-2.7.2.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\2.7.2\a471deae9d806afa28ab888f75d46cff6e2f118c\spring-boot-2.7.2.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\2.7.2\a88c44d4ec24ca37f51192c2aad3a1ca53f937f5\spring-boot-starter-logging-2.7.2.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\jakarta.annotation\jakarta.annotation-api\1.3.5\59eb84ee0d616332ff44aba065f3888cf002cd2d\jakarta.annotation-api-1.3.5.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\5.3.22\661fc01832716c7eedebf995c6841b2f7117c63d\spring-core-5.3.22.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\1.30\8fde7fe2586328ac3c68db92045e1c8759125000\snakeyaml-1.30.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-websocket\9.0.65\bd70dfeb39cc83c6934be24fa377b21e541dbe76\tomcat-embed-websocket-9.0.65.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-core\9.0.65\a24c5f379b2ec343a167a83332b75c37f26b2ae7\tomcat-embed-core-9.0.65.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-el\9.0.65\d278157387e59a5f9b48091dcada22b7c74aed00\tomcat-embed-el-9.0.65.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\5.3.22\fdd59bb4795c7a399e95ec4a5c8b91103e3189fd\spring-context-5.3.22.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\5.3.22\c056f9e9994b18c95deead695f9471952d1f21d1\spring-expression-5.3.22.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\5.3.22\2f9f00efbff8432f145ccffeb93e6a1819bac362\spring-aop-5.3.22.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\5.3.22\866c2022b5fef05b1702f4a07cfa5598660ce08a\spring-beans-5.3.22.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.13.3\7198b3aac15285a49e218e08441c5f70af00fc51\jackson-annotations-2.13.3.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.13.3\a27014716e4421684416e5fa83d896ddb87002da\jackson-core-2.13.3.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.2.11\4741689214e9d1e8408b206506cbe76d1c6a7d60\logback-classic-1.2.11.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-to-slf4j\2.17.2\17dd0fae2747d9a28c67bc9534108823d2376b46\log4j-to-slf4j-2.17.2.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\1.7.36\ed46d81cef9c412a88caef405b58f93a678ff2ca\jul-to-slf4j-1.7.36.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\5.3.22\811ace5e5eb379654ed96fd7844809db51af74a5\spring-jcl-5.3.22.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.2.11\a01230df5ca5c34540cdaa3ad5efb012f1f1f792\logback-core-1.2.11.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\1.7.36\6c62681a2f655b49963a5983b8b0950a6120ae14\slf4j-api-1.7.36.jar;C:\Users\rainb\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.17.2\f42d6afa111b4dec5d2aea0fe2197240749a4ea6\log4j-api-2.17.2.jar hello.servlet.ServletApplication

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.7.2)

2022-08-16 15:21:15.998  INFO 23148 --- [           main] hello.servlet.ServletApplication         : Starting ServletApplication using Java 11.0.13 on DESKTOP-27BHO27 with PID 23148 (C:\Users\rainb\IdeaProjects\servlet\out\production\classes started by Arhan in C:\Users\rainb\IdeaProjects\servlet)
2022-08-16 15:21:16.001  INFO 23148 --- [           main] hello.servlet.ServletApplication         : No active profile set, falling back to 1 default profile: "default"
2022-08-16 15:21:16.722  INFO 23148 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-08-16 15:21:16.730  INFO 23148 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-08-16 15:21:16.730  INFO 23148 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.65]
2022-08-16 15:21:16.815  INFO 23148 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-08-16 15:21:16.815  INFO 23148 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 774 ms
2022-08-16 15:21:16.974  INFO 23148 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: ServletContext resource [/index.html]
2022-08-16 15:21:17.069  INFO 23148 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2022-08-16 15:21:17.078  INFO 23148 --- [           main] hello.servlet.ServletApplication         : Started ServletApplication in 1.412 seconds (JVM running for 2.044)
2022-08-16 15:21:21.059 DEBUG 23148 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer      : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [0]
2022-08-16 15:21:21.059 DEBUG 23148 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer      : Received [GET /request-header HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: "Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,de;q=0.6

]
2022-08-16 15:21:21.088  INFO 23148 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-08-16 15:21:21.088  INFO 23148 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2022-08-16 15:21:21.089  INFO 23148 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
2022-08-16 15:21:21.144 DEBUG 23148 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer      : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [729]
2022-08-16 15:21:21.144 DEBUG 23148 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer      : Received []
2022-08-16 15:21:21.144 DEBUG 23148 --- [nio-8080-exec-1] o.apache.coyote.http11.Http11Processor   : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@62f359c1:org.apache.tomcat.util.net.NioChannel@49526da8:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8080 remote=/0:0:0:0:0:0:0:1:62848]], Status in: [OPEN_READ], State out: [OPEN]

답변 2

1

안녕하세요. rainbow2774님, 공식 서포터즈 OMG입니다.

콘솔 출력 내용과 코드 상에서 오류가 보이지는 않는 것 같아요.

크롬을 열고 ctrl + shift + n 을 입력하여 시크릿창에서 확인해보시겠어요?(애플리케이션 실행 중이어야함)

 

동일하게 404에러가 발생하면, 제공해드리는 완성된 프로젝트 코드로 확인해보시겠어요?


감사합니다.

0

rainbow2774님의 프로필 이미지
rainbow2774
질문자

완성된 프로젝트 코드로하면은 정상적으로 들어가지고 콘솔에 출력도 잘됩니다! 왜 이러는지 잘 모르겠네요.. 그냥 일단 넘어가도 될까요? 

네 ,이후 강의와 이어져서 영향을 미칠것같지는 않아서 선택하시면 될것같아요^^

rainbow2774님의 프로필 이미지
rainbow2774

작성한 질문수

질문하기