Java/Servlet & JSP

스크립틀릿에서 변수 선언하기

체리필터 2009. 2. 4. 17:03
728x90
반응형
다음과 같이 jsp를 작성해서 방문자의 숫자를 세어 보는 코드를 만들 생각을 할 수 있다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<% int count = 0; %>
The page count is  now:
<%= ++count %>
</body>
</html>

이렇게 하게 되면 화면에 "The page count is  now:1" 이라는 메시지가 찍힐 것이다.
하짐나 브라우져를 리프레쉬 하게 되면 count가 2가 되는 것이 아니라 여전히 1이 된다.
왜냐면 위에서 선언한 count란 변수는 지역 변수로 작용하기 때문이다.

즉 jsp는 서블릿으로 변하면서 그 모든 코드가 _jspService 메소드 안에 작성 되는데 count란 변수 역시 _jspService 메소드 안에서 정의 된다는 뜻이다.
jsp 코드가 서블릿으로 변환 되게 된다면 아래와 같은 코드를 가지게 될 것이다.

    public void _jspService(HttpServletRequest request, HttpServletResponse response)
                    throws IOException, ServletException {
        PrintWriter out = response.getWriter();
        response.setContentType("text/html");
        int count = 0;
        out.println(++count);
    }

변환된 서블릿이 실행 될 때마다 _jspService 메소드는 실행 될 것이며 그때마다 count 변수는 0으로 셋팅 될 것이다.
따라서 누적된 방문자 수를 가지기 위해서는 매번 실행 되지 않는 곳에 count 변수를 위치하게 하면 될 것이다.
즉 _jspService 메소드 위로 count 변수를 빼면 된다.
이럴 경우에는 jsp 선언문을 사용해서 count가 지역 변수가 아닌 인스턴스 변수가 되도록 만들면 된다.

<%! int count = 1; %>

위에서 볼 수 있듯이 앞에 "!"(느낌표) 하나를 붙여주면 된다.
이렇게 되면 서블릿에서는 다음과 같은 방법으로 코딩한 것과 같은 효과를 주게 된다.

    int count = 0;
    public void _jspService(HttpServletRequest request, HttpServletResponse response)
                    throws IOException, ServletException {
        PrintWriter out = response.getWriter();
        response.setContentType("text/html");
        out.println(++count);
    }

"!"는 변수 뿐 아니라 메소드에도 사용할 수 있다.



728x90
반응형

'Java > Servlet & JSP' 카테고리의 다른 글

표준 액션을 사용한 JSP  (0) 2009.02.11
JSP 초기화 하기  (0) 2009.02.10
스크립틀릿에서 변수 선언하기  (0) 2009.02.04
간단한 Jsp 시작하기  (0) 2009.02.04
리스너 예제  (2) 2009.02.03
HttpSessionBindingListener와 HttpSessionAttributeListener  (0) 2009.02.02