다음과 같이 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);
    }

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



신고

'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

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret