2013-06-10 1 views
0

변수가 사용자 정의 함수 내에서 선언 된 변수은 jsp threadsafe입니까?jsp에서 메소드의 지역 변수의 스레드 안전성

예를 들어, 아래 코드에서 변수 'i'는 안전합니까?

<%! public int increment() 
{ 

      int i=0; 
      return ++i ; 
} 
+0

http://blogs.msdn.com/b/ericlippert/archive/2009/10/19/what-is-this-thing-you-call-thread-safe.aspx – SLaks

+0

정말 자바 코드를 넣지 마십시오. jsp에서. 기본적으로'<%!'를 완전히 피하십시오. –

답변

1

변수가 jsp threadsafe의 사용자 정의 함수에서 선언 되었습니까?

예, 현재 스레드에서만 액세스 할 수 있으므로 스레드로부터 안전합니다. 메서드가 여러 스레드에서 호출되면 각 스레드는이 메서드에 자신의 로컬 변수를 사용합니다.

또한 설명 :

모든 JSP (이 비록 응용 프로그램 서버에 따라 다름) 서블릿으로 컴파일 및 여러 가지 방법에 걸쳐 HTML/CSS/JS의 글을 배포합니다. 스크립틀릿에서 선언 된 변수는 내부 메소드가 될 것입니다 (크로스 JSP로 작동하는 필드를 선언 할 수있는 것과 같지 않음). 이러한 모든 메소드는 스레드로부터 안전합니다. 더 많은 정보 : What is the difference between JSF, Servlet and JSP?

이제 서블릿은 안전합니까? 그것은 그것들을 어떻게 구현하는지에 달려 있습니다. 더 많은 정보 : How do servlets work? Instantiation, sessions, shared variables and multithreading. Threadsafety 블록에서 볼 수 있듯이 JSP를 컴파일하여 생성 된 서블릿의 경우 스크립틀릿에 선언 된 모든 변수가 필드로 선언되는 대신 생성 된 서블릿의 일부 메서드 내에 있기 때문에 항상 스레드로부터 안전합니다 수업의

는 마지막으로, 당신 하지 사용 스크립틀릿의 사용 이후 매우을 권장하지 않습니다해야합니다. 여기에 대한 자세한 설명은 How to avoid Java code in JSP files?입니다. 아직 스크립틀릿을 사용하는 레거시 시스템을 유지 관리해야한다면 운 좋게도 천천히 스크립틀릿 사용을 중단하고 ELJSTL으로 이동할 것을 권장 할 수 있습니다.

0

귀하의 질문에 의미가 없습니다.

로컬 변수에 여러 스레드가 액세스 할 수 없으므로 스레드 안전성 문제가 적용되지 않습니다.

로컬 변수로 참조되는 인스턴스은 여러 스레드에서 볼 수도 있고 그렇지 않을 수도 있으며, 설계 및 사용 방법에 따라 스레드로부터 안전 할 수도 있고 그렇지 않을 수도 있습니다.

+0

그래서이 요청에 대한 여러 요청이 올 때 각 요청에는 함수 내에서 선언 된 변수의 자체 복사본이 있어야한다는 점을 이해합니다. – user2471158

+0

답장을 보내 주신 모든 분들께 감사드립니다. 스크립틀릿 사용은 피해야한다는 것을 읽었지만 JSP로 시작했습니다. – user2471158

0

코드는 JSP에서 생성 된 서블릿의 메소드를 정의합니다. 어떤 메소드가 실행될 때 그 로컬 변수는 자체 스택 프레임으로 생성됩니다. 메서드 호출을 실행하는 스레드 만 스레드에 액세스 할 수 있으므로 스레드 안전 문제가 없습니다.