2016-07-19 4 views
-2

Java Web Application을 개발 중이며 공유 변수에 문제가 있습니다. 내가 아는 한, 두 가지 방법이 있습니다. (1) 정적 변수를 사용하여 각 클래스는 setter 및 getter를 사용하여 (2)의 주어진 var에 액세스 할 수 있습니다.Java EE의 클래스 간 변수 교환

각 방법마다 문제가 있습니다. 첫 번째 세션에서는 모든 사용자 (다른 세션 ID가 있더라도)가 동일한 값을 공유합니다. 그리고 두 번째 것은 getters를 통한 접근으로 프로그램이 생성자를 사용하게하고이 경우 이전에 현재 사용자에 대해 얻은 값을 잃어 버리게됩니다.

그래서, 어느 누구나 주어진 sessionId에 대해서만 정보를 공유하는 방법을 설명 할 수 있습니까?

더 명시하려면

내 응용 프로그램의 뷰 측면에서 모델을 분리해서하려고 노력했다. 따라서 패키지 Model에는 모든 데이터베이스 액세스 또는 웹 서비스 요청이 포함되며보기 패키지에는 모든 서블릿 페이지와 프로그램과의 사용자 상호 작용이 포함됩니다. 사용자가 옵션을 선택하면이 정보는 public static var에 저장되고 다른 클래스는 액세스 할 수 있습니다. 그러나 두 사용자가 두 가지 옵션을 선택할 때 충돌이 발생합니다. 변수가 정적이기 때문에 ... 클래스간에 공유 할 수 있고 해당 사용자에 대해서만 값을 유지할 수있는 변수가 필요합니다.

+0

우리는 당신을 돕기 위해 더 많은 세부 사항이 필요합니다. 어떤 종류의 변수? 사용자별로 비공개입니까? 전체 애플리케이션에 대해 글로벌인가? 아마도 게시물을 수정하고 자세한 내용을 제공하십시오. – stdunbar

답변

1

정적 변수를 사용하여 변경 가능 상태를 저장하는 첫 번째 옵션은 Java EE 웹 응용 프로그램에서 작동하지 않습니다. 같은 서버에있는 다른 사용자가 동일한 값을 볼 수 있습니다. 또한 응용 프로그램의 여러 인스턴스가 배포 된 경우 한 서버의 정적 변수에 다른 서버에 포함 된 정적 변수와 다른 값이 포함될 수 있으므로 여러 개의 상자가 있고 각각 웹 응용 프로그램의 인스턴스가있는 경우 로드 밸런서가 라운드 로빈 요청을 전송하면 사용자는 다른 요청에 대해 다른 상태를 볼 수 있습니다. 따라서 해당 옵션을 제외 할 수 있습니다.

두 번째 옵션 인 "(2) setter 및 getter를 사용하여"는 전혀 명확하지 않습니다.

한 사용자 만 볼 수있는 상태를 유지하려면 HttpSession에 넣을 수 있습니다. HttpSession에 저장된 것은 현재 로그인 한 사용자에 따라 다릅니다. 이것은 세션의 내용이 세션 시간 초과로 사라질 때만 임시 저장 지점입니다. HttpSession에 너무 많은 것을 넣는 것은 문제가 될 수 있습니다. 그것은 많은 메모리를 차지할 수 있으며 노드가 노드간에 정보를 복사하여 모든 서버의 세션 내용을 최신 상태로 유지하려고하므로 클러스터 된 응용 프로그램의 속도가 느려질 수 있습니다. (부하가 분산되어있는 결과로 사용자를 특정 서버에 고정시키는 방법)

사용자 별 정보를 데이터베이스에 보관하는 것이 좋습니다. 데이터가 한 곳에서 응용 프로그램의 모든 인스턴스에서 사용할 수있는 방식으로 데이터베이스에서 가져온 다른 데이터처럼 캐시 할 수 있으며 응용 프로그램은 적절한 사용자 만 볼 수 있도록 할 수 있습니다. 또한 세션 시간이 초과되면 데이터가 사라지지 않고 지속됩니다.

+0

대단히 고마워, 나는 httpSession을 몰랐다. 사실, 우리는 각 사용자에 따라 필요한 모든 데이터를 저장할 수있다. – pseudo2188

1

HttpSession을 사용합니다. 속성을 설정하고 가져올 수 있습니다.