'변수'에 해당하는 글 2건

다음과 같이 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
보통 MySQL에서 변수를 쓰려면 다음과 같이 하면 된다.

SET @yesterday := DATE_ADD(DATE(CURDATE()), INTERVAL -1 DAY);


또한 쿼리 내에서 직접 변수에 값을 담으려면 다음과 같이 하면 된다.

SELECT column
INTO @columnVar ...


이런식으로 쿼리만을 모아서 프로그램 짜듯이 procedure하게 짜나간 후 sql파일로 저장해서 사용한다.

여지껏 이렇게 만들어서 사용하고 있는데...
문제가 하나 생겼다
SELECT해온 컬럼값이 없을 경우 에러를 내 뱉으면서 다음 내용으로 넘어가질 않는 것이다.

MYSQL 문법을 뒤져서 겨우 겨우 찾아냈다.

SELECT @columnVar := column ...


이런식으로 하면 에러가 안나면서 변수에 값을 담을 수 있다.
신고

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

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 지난번 스쿨에 올려주셨을 때, 저 문법이 가능한 버젼을 여쭤봤는데, 혹시 알고계시다면, 간단히 커멘트 부탁드립니다.
    mysql 메뉴얼이 좀 복잡하잖아여. ㅋㅋ
    번거롭더라도 스쿨에도 꼭 달아주시면 같이 도움이 될 것 같구요.
    가능하시다면, preparedstatment 와의 연계도 언급하셨는데, 마찬가지로 버젼정보를 부탁드릴께요.

    제가 너무 이기적인 거 같아서 죄송합니다. ^^;;
    꾸벅~!
    • 버전은 정확히 모르겠구요.
      4.1 버전에서 현재 사용중입니다.
      그리고 preparedstatment라는 것은 db 단에서 어떻게 처리되는지는 모르겠고 php api 중에 mysqli 과련 함수들이 있습니다.
      그것을 사용하면 전처리 작동을 하기 때문에 같은 쿼리에 대해서는 속도가 증가하는 것으로 알고 있습니다.
secret