J2EE WebFilter 필터에서 정적 메소드를 사용하는 것이 안전합니까?

J2ee 웹 필터 내에서 정적 메서드를 사용하는 것이 안전한지 (교착 상태에 대한 가능성 없음) 아니면 인스턴스 메서드를 사용해야합니까? 다음과 같은 doFilter 메서드가 있습니다.

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
     HttpServletRequest httpServletRequest = (HttpServletRequest) request;
     HttpServletResponse httpServletResponse = (HttpServletResponse) response;
     String contextPath = httpServletRequest.getContextPath();
     if ((httpServletRequest.getRequestedSessionId() != null &&
             !httpServletRequest.isRequestedSessionIdValid()) || (loginBean == null || loginBean.getUserId() == -1)) {
         httpServletResponse.sendRedirect(contextPath + Navigation.getLoginURL());


     } else {
         chain.doFilter(request, response);
     }
 }

어디

Navigation.getLoginURL ()

정적 메서드입니다. 이로 인해 교착 상태가 발생할 수 있습니까?

네이선 휴즈

이것이 정적 메서드라는 점은 Filter 인스턴스의 상태에 대한 종속성이 없다는 것입니다. 로그인 URL은 애플리케이션 전체에서 동일합니다. 보호 할 상태가 없기 때문에 아무것도 잠글 이유가 없습니다.

(System.out.println과 같은) 잠그는 것에 대한 정적 메서드를 호출한다고해서 코드가 교착 상태가되는 것은 아닙니다. API 서블릿 및 필터를 구현하는 Java EE 코드는 높은 수준의 동시성을 지원해야하므로 많은 잠금을 수행하지 않아야합니다.

구현 자의 관점에서 이것을 보면 무엇을 안전하게 호출 할 수 있는지 결정하는 데 도움이 될 것입니다. Java Concurrency in Practice, 섹션 4.5.1 (모호한 문서 해석)에서이 인용문을 참조하십시오.

당신은 추측해야 할 것입니다. 추측의 질을 향상시키는 한 가지 방법은 단순히 사용하는 사람이 아니라이를 구현할 사람 (예 : 컨테이너 또는 데이터베이스 공급 업체)의 관점에서 사양을 해석하는 것입니다. 서블릿은 항상 컨테이너 관리 스레드에서 호출되며 이러한 스레드가 둘 이상 있으면 컨테이너가이를 알고 있다고 가정하는 것이 안전합니다. 서블릿 컨테이너는 HttpSession 또는 ServletContext와 같은 여러 서블릿에 서비스를 제공하는 특정 개체를 사용할 수 있도록합니다. 따라서 서블릿 컨테이너는 여러 스레드를 생성하고 ServletContext에 액세스 할 것으로 합리적으로 예상 할 수있는 Servlet.service와 같은 메서드를 호출했기 때문에 이러한 객체에 동시에 액세스 할 것으로 예상해야합니다.

이러한 객체가 유용 할 단일 스레드 컨텍스트를 상상할 수 없기 때문에 사양에서 명시 적으로이를 요구하지 않더라도 스레드로부터 안전하다고 가정해야합니다. 또한 클라이언트 측 잠금이 필요한 경우 클라이언트 코드가 동기화해야하는 잠금은 무엇입니까? 문서는 말하지 않으며 추측하는 것은 어리석은 것 같습니다. 이“합리적인 가정”은 ServletContext 또는 HttpSession에 액세스하고 클라이언트 측 동기화를 사용하지 않는 방법을 보여주는 공식 자습서 및 사양의 예제에 의해 더욱 강화됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

J2EE 앱에서했던 것처럼 http 필터를 정의 할 수있는 방법이 있습니까?

분류에서Dev

IBM Websphere Portal과 동일한 서버에 J2EE (EAR)를 배치하는 것이 기술적으로 가능합니까?

분류에서Dev

GET 메소드를 사용하여 데이터베이스에서 정보를 삭제하는 것이 안전합니까?

분류에서Dev

J2EE 에이전트 용 OpenAM 사용자 정의 영역

분류에서Dev

ajax get 메소드를 사용하여 사이트에 대한 정보를로드하는 것이 안전합니까?

분류에서Dev

정적 필드를 사용하는 정적 메서드가 정적 필드를 동시에 사용하는 것을 어떻게 방지합니까?

분류에서Dev

정적 개체 주소에 의존하는 것이 안전합니까?

분류에서Dev

한 DAO에서 또 다른 DAO 호출을하는 것이 J2EE 디자인 패턴에 비 윤리적입니까?

분류에서Dev

J2EE 애플리케이션에서 WorkManagr API를 사용할 수 있습니까?

분류에서Dev

사용자 지정 게시물 유형에 다른 필드를 추가하는 것이 안전합니까?

분류에서Dev

문자열 리터럴에서 생성 된 정적 string_view를 반환하는 것이 안전합니까?

분류에서Dev

var / mail에서 사용하지 않는 계정의 폴더를 삭제하는 것이 안전합니까?

분류에서Dev

Paypal의 "지금 구매 버튼"양식에서 userId에 대한 사용자 정의 필드를 사용하는 것이 안전합니까?

분류에서Dev

argv 포인터를 전역 적으로 사용하는 것이 안전합니까?

분류에서Dev

인스턴스 메서드 스레드에서 정적 메서드를 호출하는 것이 안전합니까?

분류에서Dev

다중 스레드 응용 프로그램에서 정적 변수를 사용하는 것이 안전합니까?

분류에서Dev

정적 변수를 수정하는 것이 스레드로부터 안전합니까?

분류에서Dev

mvc에서 정적 잠금 변수를 사용하는 것이 안전합니다.

분류에서Dev

Python 스레드에서 Intvar / DoubleVar를 사용하는 것이 안전합니까?

분류에서Dev

정적 메서드를 통해 asp.net 세션에 목록을 저장하고 업데이트하는 것이 안전합니까?

분류에서Dev

J2EE 애플리케이션에서 FILTER를 건너 뛰는 HttpURLConnection

분류에서Dev

epel과 rpmforge를 동시에 사용하는 것이 안정적입니까?

분류에서Dev

Ubuntu 16에서 독점 마이크로 코드 업데이터를 사용하는 것이 '안전'합니까?

분류에서Dev

SATA-USB 커넥터를 사용하고 추가 드라이브로 PC에 영구적으로 연결하는 것이 안전합니까?

분류에서Dev

Tomcat을 다운시키는 OpenAM J2EE 에이전트 설치

분류에서Dev

Tomcat을 다운시키는 OpenAM J2EE 에이전트 설치

분류에서Dev

paintComponent에서 for 루프를 사용하는 것이 안전합니까?

분류에서Dev

vps에서 bitnami를 사용하는 것이 얼마나 안전합니까?

분류에서Dev

i3에 18.04 mini.iso 최소 설치를 사용하는 것이 안전하고 안전합니까?

Related 관련 기사

  1. 1

    J2EE 앱에서했던 것처럼 http 필터를 정의 할 수있는 방법이 있습니까?

  2. 2

    IBM Websphere Portal과 동일한 서버에 J2EE (EAR)를 배치하는 것이 기술적으로 가능합니까?

  3. 3

    GET 메소드를 사용하여 데이터베이스에서 정보를 삭제하는 것이 안전합니까?

  4. 4

    J2EE 에이전트 용 OpenAM 사용자 정의 영역

  5. 5

    ajax get 메소드를 사용하여 사이트에 대한 정보를로드하는 것이 안전합니까?

  6. 6

    정적 필드를 사용하는 정적 메서드가 정적 필드를 동시에 사용하는 것을 어떻게 방지합니까?

  7. 7

    정적 개체 주소에 의존하는 것이 안전합니까?

  8. 8

    한 DAO에서 또 다른 DAO 호출을하는 것이 J2EE 디자인 패턴에 비 윤리적입니까?

  9. 9

    J2EE 애플리케이션에서 WorkManagr API를 사용할 수 있습니까?

  10. 10

    사용자 지정 게시물 유형에 다른 필드를 추가하는 것이 안전합니까?

  11. 11

    문자열 리터럴에서 생성 된 정적 string_view를 반환하는 것이 안전합니까?

  12. 12

    var / mail에서 사용하지 않는 계정의 폴더를 삭제하는 것이 안전합니까?

  13. 13

    Paypal의 "지금 구매 버튼"양식에서 userId에 대한 사용자 정의 필드를 사용하는 것이 안전합니까?

  14. 14

    argv 포인터를 전역 적으로 사용하는 것이 안전합니까?

  15. 15

    인스턴스 메서드 스레드에서 정적 메서드를 호출하는 것이 안전합니까?

  16. 16

    다중 스레드 응용 프로그램에서 정적 변수를 사용하는 것이 안전합니까?

  17. 17

    정적 변수를 수정하는 것이 스레드로부터 안전합니까?

  18. 18

    mvc에서 정적 잠금 변수를 사용하는 것이 안전합니다.

  19. 19

    Python 스레드에서 Intvar / DoubleVar를 사용하는 것이 안전합니까?

  20. 20

    정적 메서드를 통해 asp.net 세션에 목록을 저장하고 업데이트하는 것이 안전합니까?

  21. 21

    J2EE 애플리케이션에서 FILTER를 건너 뛰는 HttpURLConnection

  22. 22

    epel과 rpmforge를 동시에 사용하는 것이 안정적입니까?

  23. 23

    Ubuntu 16에서 독점 마이크로 코드 업데이터를 사용하는 것이 '안전'합니까?

  24. 24

    SATA-USB 커넥터를 사용하고 추가 드라이브로 PC에 영구적으로 연결하는 것이 안전합니까?

  25. 25

    Tomcat을 다운시키는 OpenAM J2EE 에이전트 설치

  26. 26

    Tomcat을 다운시키는 OpenAM J2EE 에이전트 설치

  27. 27

    paintComponent에서 for 루프를 사용하는 것이 안전합니까?

  28. 28

    vps에서 bitnami를 사용하는 것이 얼마나 안전합니까?

  29. 29

    i3에 18.04 mini.iso 최소 설치를 사용하는 것이 안전하고 안전합니까?

뜨겁다태그

보관