개주 훈련일지/🔥 히노카미 코구라(오류 수정)

오류내역) HTTP 상태 500 – 내부 서버 오류

lshfood2 2025. 11. 14. 14:35

[에러 발생 상황]

500에러, 즉 5로 시작하는 오류는
서버측 오류로, 개발자가 잘못한 것이다.

 > 즉 코드가 이상한 것!!

500 에러가 발생하여 화면이 출력되지 않는다.

 


콘솔 화면을 보면 아래와 같이

NullPointerException이 발생했다!!!

java.lang.NullPointerException 발생

 

CalcBean 클래스의 10행에서 오류가 났음을 확인할 수 있는데.

어떤 주어가 Null이 발생했는지 코드를 함께 확인해보자.

 

▼ 기존 jsp코드 (오류 발생)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean class="test.CalcBean" id="cb" />
<jsp:setProperty property="*" name="cb"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 실습 02</title>
</head>
<body>
<%
//CalcBean cb = new CalcBean();
//이렇게 생성해주는 태그가 있는데
//이를 jsp 맥션 태그라고 부른다.
	cb.calc();
%>
	<h1>계산기</h1>
	<hr>
	<form method="POST">
		<input type="text" name="num1">
		<select name="op">
			<option>+</option>
			<option>-</option>			
		</select>	
		<input type="text" name="num2">
		<input type="submit" name="계산하기">
	</form>
	<br>
	<h3>계산결과 : <jsp:getProperty property="result" name="cb"/></h3>
	<h3>계산결과 : <%=cb.getResult() %></h3>
</body>
</html>

오류가 발생한 jsp 코드를 보면 body문 시작 부분에서

cb.calc()를 호출하고 있는데 해당 메서드에 들어갈 인자는

사실 <form method = "POST"> 를 통해 발생하는 결과물이다.

그래서 결과물이 발생하기 전(=null)에 calc를 호출하게 되는데

 

▼ 기존 class코드 (오류 발생)

public class CalcBean {
	private int num1;
	private int num2;
	private String op;
	private int result;
	
	public void calc() {			
		if(op.equals("+")){
			result = num1 + num2;		
		} else{
			result = num1 - num2;
		}			
	}

모두 null인 상태로 calc 메서드를 진행하게 되고

첫 번째 if문 op.equals가 null인 상태로 진행되어

오류가 발생되는 것을 확인할 수 있었다.


이를 해결하기 위해서 메서드 안에 널이라면

계산 결과가 0인 상태라는 코드가 필요하다.

 

if(op==null) {
result = 0;
return;}

 

이와 같은 제어문 코드를 상단에

추가해주면 오류가 해결된다.

 

▼ 오류 해결 부분

public class CalcBean {
	private int num1;
	private int num2;
	private String op;
	private int result;
	
	public void calc() {
		if(op==null) {
			result = 0;
			return;
		}
		
		if(op.equals("+")){
			result = num1 + num2;		
		}
		else{
			result = num1 - num2;
		}			
	}

코드 수정 후 정상적으로 출력되는 웹 화면을 확인할 수 있다.