JAVA 500에러
오늘은 이런 에러를 만났습니다.
"HTTP 상태 500 – 내부 서버 오류"
서버 스크립트에서 오류가 난 경우 발생한다고 합니다.
(확인해보니 오류가 날 만한 코드를 적어놨었습니다)
그래서 이번엔 제가 만났던 500에러의 상황을 소개시켜드리겠습니다.
(코드는 백문이불여일타의 책 내용 중 일부입니다.)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="get" action="ParamServlet">
아이디 : <input type="text" name="id"><br>
나 이 : <input type="text" name="age"><br>
<input type="submit" value="전송">
</form>
</body>
</html>
package unit05;
import java.io.IOException;
import java.io.PrintWriter;
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("/ParamServlet")
public class ParamServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String id = request.getParameter("id");
// 여기가 포인트입니다!(1)
String age = request.getParameter("age");
// 여기가 포인트입니다!(2)
int age = Integer.parseInt(request.getParameter("age"));
out.print("<html><head><title></title></head>");
out.print("<body>");
out.print("당신이 입력한 정보입니다.<br>");
out.print("아이디 : ");
out.print(id);
out.print("나이 : ");
out.print(age);
out.print("<br><a href='javascript:history.go(-1)'>돌아가기</a>");
out.print("</body>");
out.print("</html>");
}
}
코드를 아래처럼 작성하면 적어도 다음 화면은 보여집니다.
1. String age = request.getParameter("age");
위처럼 말이죠.
그런데 age값을 int로 받았을 땐
2. int age = Integer.parseInt(request.getParameter("age"));
둘의 차이는 하나는 String이고, 하나는 String을 int형으로 바꿔줬다는 것 밖에는 없습니다.
그런데 왜 String으로 받을 땐 잘 나오고, int로 받을 땐 안나오는 걸까요?
이걸 생각해봅시다.
jsp파일에서 servlet으로 아무것도 입력하지 않고 넘겼다면 값이 없겠죠?
그럼 servlet에서 데이터를 받을 때 뭐라고 출력해줄까요?
당연히 null이겠죠.
그래서 처음에 String으로 받았을 땐 null null로 잘 나왔습니다.
근데 다음에 String을 parse했었죠. int로요.
그럼 int age = Integer.parseInt(request.getParameter("age")); 해당 코드에서 하려고 했던 일은
null값을 숫자로 바꾸겠다는 의미가 되는거죠.
안되는 게 너무 당연한 일이었습니다.
Author And Source
이 문제에 관하여(JAVA 500에러), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@riedel/자바-Servlet저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)