본문 바로가기
Exception (예외)/프론트

JSP 500번 에러

by Hwanii_ 2023. 6. 27.
728x90

 

1. JSP 500번대 에러 발생.

 

 

2. 32번째 라인에서 에러 발생.

 

 

 

3. java.lang.NumberFormatException : Cannot parse null string

 

FormatException 은 형식 오류를 의미 하고,

 

앞에 Number가 붙었으니, 숫자 형식 오류를 의미 한다.

 

null을 숫자로 parsing 하지 못한다는 오류 이다.

 

아래를 보자.

 

 

request 할거야, num1을,

그리고, parsing 할거야, Integer 타입으로,

그 값을 int num1에 대입 할거야.

 

라는 의미인데,

 

num1의 값이 null 이기 때문에 발생한 에러 이다.

 

num2 역시 값이 null 이다.

 

그러면, num1과 num2의 값은 어떻게 부여할 수 있을까 ?

 

 

위의 이미지를 보면, form 태그가 있고,

전송방식은 post로 처리한다는 속성과 속성값이 존재 한다.

 

그 내부에 input이라는 태그에, type 속성의 값은 number 이고,

name은 num1 이다.

 

num2도 동일한 구조 이다.

 

input 태그의 type 속성의 속성값으로 submit이 있는데,

 

이 submit 버튼을 눌렀을 때, 

사용자가 입력한 모든 값들이 전송된다.

 

이렇게 num1 과 num2 에 값을 부여하는 방식의 흐름인데,

 

해당 값을 부여하기도 전에, num1 과 num2로 parsing을 하려고 해서

생긴 에러 이다.

 

 

4. 해결 방안.

 

 

위의 이미지와 같이, if 문으로 감싸서 문제를 해결 할 수 있다.

 

if (request.getMethod().equals("POST") { } 를 확인 할 수 있다.

 

요청이 들어왔는데, 그 요청 방식이 POST 인것을 의미하는 코드 이다.

 

 

 

웹페이지가 처음 열릴 때 기본 요청 방식은 GET 방식이기 때문에,

if문이 참이 아니라, 로직을 건너뛰게 된다.

 

그리고, form 태그로 오게되고, 해당 태그에서 전송방식은 post 방식이기 때문에,

form 태그가 끝나면,

값이 밀어 넣어지고, if문도 참이된다.

 

(위의 개념이 맞지 않으면 수정 하겠다..)

 

 

 

5. 마무리 하며.

 

사용자가 어떤 홈페이지로 이동하기 위해서,

URL을 브라우저 주소창에 작성하고 엔터를 누르면 원하는 페이지로 이동한다.

 

사용자는 단순히 URL을 입력하였을 뿐이지만,

서버 내부에서는 클라이언트 요청에 응답 (웹페이지로 표현) 하기 위해서 처리를 해주어야 한다.

 

클라이언트가 서버로 요청을 보내는 방법 HTTP Method에는,

GET과 POST 방식이 있다.

 

 GET 

어떤 정보를 가져와서 조회하기 위해 사용되는 방식.

 

[GET 방식의 특징]

  • URL에 변수(데이터)를 포함시켜 요청 ▶ 즐겨찾기 추가 가능.
  • 데이터를 Header(헤더)에 포함하여 전송.
  • URL에 데이터가 노출되어 보안에 취약.
  • 길이 제한이 있음.
  • 캐시될 수 있음.

 

▶ 캐시(Cache) :

자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소.

 

[GET 방식의 사용]

 

www.hwanii96.tistory.com/login?id=hwanii&pw=1234

와 같은 페이지가 있다고 가정해보자.

 

여기서 GET 방식은 ?

마크를 통해 URL의 끝을 알리고,

id라는 키 (key)에 대해서 hwanii라는 값 (value)을,

pw라는 키 (key)에 대해서는 1234라는 값 (value)을,

전송하는 것을 볼 수 있다. 

 

여러개의 key와 value를 보내는 경우에 &를 사용하여,

이어주는 GET 방식은 최소한의 보안유지도 하지 않기 때문에,

실제 웹사이트에서 ID와 PW 같은 중요한 정보를,

GET 방식으로 사용하게 되면 개인정보가 노출되는 문제가 발생한다.

 

GET 방식을 사용하여 데이터를 노출시키는 경우는,

개인정보가 포함하지 않는 상황에서 캐싱을 하여,

속도를 높이거나 즐겨찾기 기능을 사용하기 위함이다. 

 

▶ (Caching)캐싱 :

한번 접근 후, 또 요청할 경우 빠르게 접근하기 위해 레지스터에 데이터를 저장시켜 놓는 것.

 

 

 

 POST 

데이터를 서버로 제출하여 추가 또는 수정하기 위해서 사용하는 방식.

 

[POST 방식의 특징]

  • URL에 변수(데이터)를 노출하지 않고 요청 ▶ 즐겨찾기 추가 불가.
  • 데이터를 Body(바디)에 포함하여 전송.
  • URL에 데이터가 노출되지 않아 기본 보안은 되어있음.
  • 길이 제한이 없음.
  • 캐시되지 않음.

GET 방식의 경우 URL에 데이터를 붙여서 전송하는 반면에,

POST 방식은 BODY에 데이터를 넣어서 전송한다.

 

따라서 헤더필드 중 Body의 데이터를 설명하는 Content-Type 이라는 헤더 필드가 들어가고

어떠한 데이터 타입인지를 명시해주어야 한다.

 

데이터를 Body에 포함시키는 이점 때문에 메시지 길이의 제한은 없지만,

최대 요청을 받는 시간인 Time Out이 존재하므로,

클라이언트에서 페이지를 요청하고 기다리는 시간이 존재한다.

 

실제로 POST 방식은 URL에 데이터가 노출되지 않으므로,

즐겨찾기나 캐싱이 불가능하지만,

쿼리스트링 (문자열) 데이터 뿐만 아니라,

라디오 버튼, 텍스트 박스와 같은 객체들의 값도 전송이 가능하다.

 

반응형

'Exception (예외) > 프론트' 카테고리의 다른 글

NullPointerException (예외)  (0) 2023.07.29
Exception (예외)  (0) 2023.07.16