작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

Similar documents
PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

chapter6.doc

gnu-lee-oop-kor-lec06-3-chap7

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

PowerPoint Presentation

Network Programming

Design Issues

JVM 메모리구조

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft PowerPoint - CSharp-10-예외처리

14-Servlet

PowerPoint Presentation

PowerPoint Presentation

설계란 무엇인가?

Microsoft PowerPoint - chap06-2pointer.ppt

제11장 프로세스와 쓰레드

Spring Data JPA Many To Many 양방향 관계 예제

PowerPoint Presentation

JUNIT 실습및발표

Microsoft PowerPoint - Chap12-OOP.ppt

제8장 자바 GUI 프로그래밍 II

Microsoft PowerPoint - Java7.pptx

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

Spring Boot/JDBC JdbcTemplate/CRUD 예제

JAVA PROGRAMMING 실습 02. 표준 입출력

쉽게 풀어쓴 C 프로그래밍

쉽게

Microsoft PowerPoint - 04-UDP Programming.ppt

rmi_박준용_final.PDF

<param-value> 파라미터의값 </param-value> </init-param> </servlet> <servlet-mapping> <url-pattern>/ 매핑문자열 </url-pattern> </servlet-mapping> - 위의예에서 ServletC

2장 변수와 프로시저 작성하기

PowerPoint Presentation

슬라이드 1

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

09-interface.key

PowerPoint 프레젠테이션

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

Microsoft PowerPoint 장강의노트.ppt

Microsoft PowerPoint - 11_DesignPatterns(2010).ppt [호환 모드]

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 2강

Microsoft PowerPoint - Lect04.pptx

쉽게 풀어쓴 C 프로그래밊

오버라이딩 (Overriding)

07 자바의 다양한 클래스.key

PowerPoint 프레젠테이션

<4D F736F F D20BEBEBCA520C4DAB5F920BFACBDC0202D20B8D6C6BC20BEB2B7B9B5E5BFCD20C0CCBAA5C6AE2E646F6378>

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

슬라이드 1

Interstage5 SOAP서비스 설정 가이드

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

어댑터뷰

C++ Programming

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

쉽게 풀어쓴 C 프로그래밍

Data Provisioning Services for mobile clients

설계란 무엇인가?

12. OAuth 2.0 으로사용자관리하기 12.1 들어가며 대부분의회사나조직은직원과고객데이터베이스를가지고있습니다. 쓰리래빗츠를도입하면 일부데이터베이스를이중으로관리해야하는불편함에직면합니다. 이문제를해결하기위해서 쓰리래빗츠는 OAuth 2.0 으로사용자를관리하는기능을제공

Microsoft PowerPoint - ch07 - 포인터 pm0415

쉽게 풀어쓴 C 프로그래밍

Chap12

04장

Microsoft PowerPoint - RMI.ppt

<4D F736F F D204A D61696C20C6D0C5B0C1F6B8A620C0CCBFEBC7D120B8DEC0CFC0C720C0FCBCDBB0FA20BCF6BDC52E646F63>

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 09. 예외처리

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

Microsoft PowerPoint - C++ 5 .pptx

2 단계 : 추상화 class 오리 { class 청둥오리 extends 오리 { class 물오리 extends 오리 { 청둥오리 mallardduck = new 청둥오리 (); 물오리 redheadduck = new 물오리 (); mallardduck.swim();

adfasdfasfdasfasfadf

Microsoft PowerPoint - 06-Chapter09-Event.ppt

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

신림프로그래머_클린코드.key

중간고사

17장 클래스와 메소드

뇌를 자극하는 JSP & Servlet 슬라이드

슬라이드 1

PowerPoint 프레젠테이션

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

PowerPoint 프레젠테이션

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - 14주차 강의자료

Transcription:

Session 을이용한현재로그인한사용자의 숫자구하기 작성자 : 김성박 ( 삼성 SDS 멀티캠퍼스전임강사 ) email : urstory@nownuri.net homepage : http://sunny.sarang.net - 본문서는http://sunny.sarang.net JAVA강좌란 혹은 http://www.javastudy.co.kr 의 칼럼 란에서만배포합니다. 문서는계속버전업될수있습니다. 필자의허락없이수정, 삭제, 재작성, 이동등을할수없습니다. - 잘못된부분을발견하거나, 추가할사항이있다면작성자에게메일보내주신다면감사하겠습니다. - 해당문서는 Java기본, jsp에대한기본지식이필요합니다. - 해당문서는 windows 2000환경, tomcat 3.x 에서 test 되었습니다. jsp 프로그래밍을하다보면현재로그인한사용자가몇명인지알고싶은경우가있습니 다. 혹은현재접속한사용자가몇명인지궁금할경우도있습니다. 이러한정보는 Session 을이용하여구할수가있습니다. 1. javax.servlet.http.httpsessionbindinglistener HttpSessionBindingLister 는세션이서버에서사라질때와세션이서버에서생성될때어 떤특별한작업을처리하고자할경우사용되는 interface 입니다. HttpSessionBindingLister를구현해준객체는 Session에값이지정될때와값이해제될때에특별한처리를할수있습니다. 이렇게세션에값이지정될때와해제될때의특별한처리를하기위하여는 HttpSessionBindingListener가가지고있는 2개의메소드를구현해줘야합니다. 각각의메서드는아래와같습니다. public void valuebound(httpsessionbindingevent event) valuebound 메서드는값이지정될때특별한처리를하는메서드입니다. public void valueunbound(httpsessionbindingevent event) 1

valueunbound 메서드는값이해제될때특별한처리를하는메서드입니다. 2. javax.servlet.http.httpsessionbindingevent HttpSessionBindingEvent class 는 HttpSessionEvent 를상속받으며현재웹어플리케이션 의 Session 객체를참조할수있도록하여주는 getsession() 메서드를가지고있습니다. 3. 싱글턴패턴의이용 : 접속한사용자의수를세기위하여는딱하나의객체가필요하다. 접속한사용자의숫자를관리해주는객체는딱하나가존재하여야합니다. 만약숫자를관리해주는객체가여러가지라면, 해당숫자를제대로관리해주지못할것입니다. 이렇게객체를메모리상에하나만유지시키면서관리해주고싶을경우에사용하는프로그래밍방법으로싱글톤패턴이란것이있습니다. 싱글톤패턴의한가지예로아래의소스를보도록합시다. public class UserList{ private static UserList userlist = null; private UserList() { public static UserList getinstance() { if (userlist == null) { userlist = new UserList(); return userlist; 위에서중요하게봐야할부분은진하게표시된부분입니다. 먼저맴버변수로자기자신즉 UserList를가리킬수있는 UserList의인스턴스변수 userlist가 private으로선언되어있음을알수있습니다. 여기까지는별로어려운부분이아니지만다음줄에있는생성자를보면생성자앞에 private 접근지정자가붙어있는것을볼수있습니다. private 접근지정자는같은 class에서만접근을허용하기위한것인데, 생성자앞에 private이붙어있다는것은어떤객체도 UserList의생성자를호출할수없다는이야기입니다. 즉, 상당히웃긴모양이되는것인데요 class를만들긴만들었지만, 사용할수없다는것입니다. 하지만 2

바로아래에있는 getinstance라는메서드를보면해결책을발견할수있습니다. getinstance 메서드를보면자기자신을객체로서리턴하는것을알수있습니다. 또한 getinstance 메서드는 static함메서드로객체를생성하지않고도직접이용할수있습니다. 즉 UserList 클래스에대한객체를생성하기위하여는생성자를직접호출하지못하고 getinstance메서드를호출해야만가능하다는것입니다. getinstance메서드의구현된내용을보면 userlist가널일경우에는자기자신의생성자를호출하여객체를리턴하고, 널이아닐경우에는현재맴버변수의값을리턴하는것을알수있습니다. 이때맴버변수의형식이중요한데맴버변수는 static한변수라는것입니다. 이 static 한변수는쓰레드상에서공유가되는변수값이라는것을알것입니다. 맴버변수 userlist는 static 변수이기때문에공유가됩니다. 즉, 생성자를호출할수없기때문에새로운객체가생성되지않고 getinstance메소드를통하여만 UserList의객체를구할수있는데이객체는딱하나의인스턴스로공유가된다는것이지요. 이렇게하나의객체만을이용하는방법을싱글턴패턴이라고합니다. 4. 실제 Class 의구현 HttpSessionBindingListener 를구현하고, 싱글턴패턴을적용하여 UserList class 를생성합 니다. 해당 class 를 jsp 에서인식할수있는 classpath 에서 d 옵션을주어컴파일합니다. javac d. UserList.java UserList.java 시작 -------------------------------------------------- package userlist; import javax.servlet.http.*; import java.util.*; // HttpSessionBindingLister를구현 public class UserList implements HttpSessionBindingListener { // 싱글턴패턴 private static UserList userlist = null; private Set users = new HashSet(); private UserList() { super(); 3

public static UserList getinstance() { if (userlist == null) { userlist = new UserList(); return userlist; // 값이지정될경우의처리 public void valuebound(httpsessionbindingevent sbe) { // 현재 session정보로부터 user에해당되는값을얻어와 // HashSet에저장 users.add(sbe.getsession().getattribute("user")); //Add the session session // 값이해제될경우의처리 public void valueunbound(httpsessionbindingevent sbe) { // 현재 session정보로부터 user에해당하는값을얻어와 // HashSet에서삭제 users.remove(sbe.getsession().getattribute("user"));//remove the // 실제로그인한사람의숫자를새는부분으로 HashSet의전체수를리턴 public synchronized int getusercount() { return users.size(); //Returns the no of live user sessions UserList.java 끝 ---------------------------------------------------- 5. jsp 에서의이용 전체로그인한사람의숫자를출력하는 usrlist.jsp 를작성합니다. userlist.jsp 를그냥실행 하였을경우에는 guest 사용자가로그인한것으로보며, get 방식이나 post 방식으로 id 값을 지정해줄경우에는해당 id 로로그인한것으로가정합니다. 만약 login form 등을통하여 4

id 와 password 를전달받는다면해당 id 와 password 에일치하는사람이있는지확인하고 있을경우에 session 에아래와같은소스처럼사용자를등록해주면될것입니다. userlist.jsp 시작 ---------------------------------------------------- <%@ page contenttype="text/html;charset=euc-kr"%> <% // 외부로부터 id 값을전달받는다. 만약에전달된값이없을경우 // guest 유저로생각한다. String user_name = request.getparameter("id"); if(user_name == null){ user_name = "guest"; // 전달받은사용자 id를세션에 user란이름으로등록한다. session.setattribute("user",user_name); // UserList객체의 getinstance메서드를호출하여 UserList객체를할당받는다. // 할당받은객체를 userlist라는이름으로세션에등록한다. // UserList객체는싱글턴패턴을적용하였기때문에다른 jsp에서도하나의객체로 // 공유하게된다. session.setattribute("userlist",userlist.userlist.getinstance()); // 세션에저장되어있는 UserList객체를반환받는다. userlist.userlist ul = (userlist.userlist)session.getattribute("userlist"); // 세션에등록된로그인한사용자의수를반환하여출력한다. out.println(" 접속사용자수 : " + ul.getusercount()); %> userlist.jsp 끝 ----------------------------------------------------- 5

그림 1 guest user 로접속하였을경우 그림 2 id 가 carami 인사용자로접속하였을경우 6. 마치며 이상으로 session을이용하여현재접속중인사용자에대한처리를하는것을보았습니다. 그렇다면현재홈페이지를이용하는모든사용자가몇명인지는어떻게구할수있을까요? 그것은여러분에게맡기도록하겠습니다. 답을구하신분이있으시다면 http://sunny.sarang.net Servlet/JSP tip 게시판에올려주신다면감사하겠습니다. 6