ohamma
81
2021-09-19 00:12:41
3
194

jsp 세션을 사용하니까 계속 서블릿이 발생해요


관리자랑 일반회원을 구분하고 싶어서  sql에서 

ALTER TABLE member ADD user_level number 이 필드를 만들고 

관리자는 1 일반회원은 0으로 해서 만들었어요.

처음에는 작동을 잘 했는데 갑자기 서블릿 오류라면서 링크로 들어가지지 않는데 왜 이런걸까요...?

int user_level = (Integer)session.getAttribute("user_level");

if(imsiUrl.equals("list.do")) {

System.out.println("멤버리스트");

if(user_level != 1) {

response.setContentType("text/html; charset=utf-8");

PrintWriter out = response.getWriter();

out.println("<script>");

out.println("alert('관리자만 이용할 수 있습니다.');");

out.println("location.href = ' " + path + " ';");

out.println("</script>");

out.flush();

out.close();

} else {

관리자면 관리페이지로 이동

                } 

이렇게 있는데 계속 이 int user_level = (Integer)session.getAttribute("user_level"); 세션에서

오류가 나요. 이 부분 지우고 하면 또 잘 되는데...왜 이런걸까요...?

오류창에는 SEVERE: 경로가 [/jsp_project]인 컨텍스트의 서블릿 [project.controller.MemberController]을(를) 위한 Servlet.service() 호출이 예외를 발생시켰습니다. 이렇게 뜹니다


0
  • 답변 3

  • Dierslair
    5k
    2021-09-19 07:39:25
    int user_level = (Integer)session.getAttribute("user_level");

    세션에 user_level이 있는지 확인 후, Integer -> int 언박싱 진행하셔야 합니다. user_level이 없는 상태면 NPE 발생합니다.

    int userLevel = 0;
    Integer ul = (Integer) session.getAttribute("user_level");
    if (ul != null) {
        userLevel = ul; // unboxing
    }


  • ohamma
    81
    2021-09-19 11:56:21

    Dierslair 그냥 세션만 설정해놔서 그랬던 거 였군요. 로그인을 안해서 유저레벨이 없는 상태랑 로그인을 해서 유저레벨이 있는 상태를 구분해야했었는데...감사합니다

  • 오후
    3k
    2021-09-19 13:09:15

    int : null 비허용 

    Integer  : null 허용

  • 로그인을 하시면 답변을 등록할 수 있습니다.