1. 웹 엔진 프로퍼티

웹 엔진에서 제공하는 모든 프로퍼티는 JVM 시스템 프로퍼티뿐만 아니라 가상 호스트별, 웹 애플리케이션별로 적용할 수 있다. 이를 적용하는 방법은 JEUS Web Engine 안내서의 가상 호스트 설정, jeus-web-dd.xml 설정을 참고한다.

JVM 시스템 프로퍼티나 웹 엔진 레벨에서 설정하기 보다는 되도록 가상 호스트 또는 웹 애플리케이션 레벨에서 설정하는 것을 권장한다.

1.1. 웹 엔진 레벨 프로퍼티

domain.xml의 웹 엔진 레벨로 설정할 수 있는 프로퍼티이다. 가상 호스트, jeus-web-dd.xml에 설정해도 무시한다.

  • jeus.servlet.prevent-forcibly-threadlocal-memoryleak

    설명

    웹 애플리케이션에서 ThreadLocal 변수를 사용한 후 이를 정확하게 해제하지 않을 경우 발생하는 메모리 누수를 웹 엔진에서 해당 웹 애플리케이션이 리로드되거나 redeploy, undeploy될 때 강제적으로 ThreadLocal 변수를 초기화한다. 그러나 이 옵션을 사용할 경우 다른 웹 애플리케이션에서 설정한 ThreadLocal 변수도 초기화하므로 주의한다.

    기본값

    false

  • jeus.servlet.webadmin.suspendCmd.tmout

    설명

    WebtoB에 suspend 신호를 보낸 후 모든 WebtoB request processor들이 다시 WebtoB로부터 suspend 신호를 받고 suspend wait을 하게 될 때까지 기다리는 최대 시간이다.

    기본값

    120000L

  • jeus.servlet.request.enableDns

    설명

    ServletReqeust.getRemoteHost()를 호출할 때 DNS를 통해서 호스트명을 얻어올지 여부를 설정한다. 웹 엔진이 있는 서버의 DNS 접근 여부를 설정하는 것이므로 웹 엔진 레벨 프로퍼티로 제공한다.

    기본값

    true

  • jeus.servlet.request.url.relativePathInURL

    설명

    URL에 상대 경로('.' 혹은 '..')가 포함됐을 때 URL 계산 방식을 정의한다

    • not_allowed : URL에 상대 경로가 포함되는 것을 허용하지 않으며 403 Forbidden 에러로 응답

    • replace : 상대 경로를 절대 경로로 계산 후 처리

    • keep : 상대 경로를 계산하지 않고 그대로 처리

    기본값

    replace

  • jeus.servlet.loader.jspcount

    설명

    웹 엔진에서 동시에 로딩할 수 있는 있는 JSP 개수이다.

    기본값

    0

  • jeus.servlet.useCaseInsensitiveFileSystem

    설명

    Linux OS + Windows file server처럼 대소문자 구분 OS에 대소문자 비구분 파일 서버를 사용하는 조합의 경우 요청 주소의 대소문자 구분을 하지 않게되어 원하는 동작을 하지 않을 수 있다. 이 프로퍼티를 사용하면 이런 조합에서도 대소문자를 구분하여 처리하며, 추가적으로 Windows에서만 동작하는 다음 프로퍼티도 사용할 수 있게 된다.

    • jeus.servlet.resource.ignore-filename-case

    • jeus.servlet.jsp.ignore-filename-case

    기본값

    false

  • jeus.websocket.client.requestBufferSize

    설명

    WebSocketContainer.connectToServer() 호출 시 웹 소켓 헤더들을 포함한 요청을 담을 버퍼 크기를 설정한다.

    기본값

    8*1024 (단위: byte)

1.2. JVM 시스템 프로퍼티

다음은 JVM 시스템 프로퍼티만으로 설정해야 하는 옵션이다.

  • org.glassfish.web.rfc2109_cookie_names_enforced

    설명

    Cookie 이름에 RFC2109에서 허용하지 않는 문자가 들어간 경우 IllegalArgumentException이 발생한다. javax.servlet.http.Cookie에 정의된 내용인데 JEUS 6까지는 API 구현에서 제대로 처리하지 않았다.

    기본값

    true

1.3. 가상 호스트 레벨 프로퍼티

domain.xml 웹 엔진 설정에서 가상 호스트에 설정할 수 있는 프로퍼티이다. jeus-web-dd.xml에 설정해도 무시한다.

현재 이 레벨의 프로퍼티는 존재하지 않는다.

1.4. 웹 애플리케이션 레벨 프로퍼티

jeus-web-dd.xml에 설정해서 각 웹 애플리케이션별로 적용할 수 있는 프로퍼티이다. 이 프로퍼티는 웹 엔진 또는 가상 호스트 레벨 프로퍼티로 사용 가능하다.

  • jeus.application.login.key

    설명

    JEUS Login Manager를 사용하는 경우 로그인으로 사용할 Attribute Key를 설정한다.

    기본값

    JEUS_LOGIN_KEY

1.4.1. 공통 또는 Servlet 엔진 관련 프로퍼티

Servlet 또는 JSP 엔진에 적용되는 프로퍼티들이다.

  • jeus.servlet.response.cookie.version0Style

    설명

    version0 스타일의 쿠키 헤더 사용 여부를 설정한다.

    기본값

    false

  • jeus.servlet.welcomefile.sendRedirect

    설명

    HttpServletResponse.sendRedirect()를 통해서 welcome 파일 전송 여부를 설정한다.

    • true : HttpServletResponse.sendRedirect()를 사용한다.

    • false : RequestDispatcher.foward()를 사용한다.

    기본값

    false

  • jeus.servlet.filter.applyOnWelcomeFileRequest

    설명

    Context root 요청에 대한 welcome 파일 처리할 때 filter 적용 여부를 설정한다.

    기본값

    true

  • jeus.servlet.response.header.serverInfo

    설명

    헤더에 JEUS 버전 정보 포함 여부를 설정한다.

    기본값

    false

  • jeus.servlet.keep-original-request-on-forward

    설명

    Tomcat과 동일하게 Original Request에 설정된 Request URI 등과 같은 path 정보를 변경하지 않는다.

    기본값

    false

  • jeus.servlet.keep-original-query-string-on-forward

    설명

    Forward될 때 original query string을 Request 객체에 그대로 둘지 아니면 forward할 때 넘겨준 query string으로 overwrite할지 여부를 설정한다.

    기본값

    false

  • jeus.servlet.keep-original-query-string-on-include

    설명

    include될 때 original query string을 Request 객체에 그대로 둘지 아니면 include할 때 넘겨준 query string으로 overwrite할지 여부를 설정한다.

    기본값

    false

  • jeus.servlet.out.ensureContentOrder

    설명

    response.getOutputStream(), response.getWriter(), JspWriter(jsp out)을 섞어서 사용할 때의 출력 순서를 유지할지 여부를 설정한다. 기본적으로는 세 가지 방법을 섞어서 사용하면 안 되고 하나로 통일해서 써야 한다.

    기본값

    false

  • jeus.servlet.classloader.allowServletAPI

    설명

    애플리케이션의 클래스 중에서 서블릿 API 관련 클래스를 로딩할지 여부를 설정한다.

    기본값

    false

  • jeus.servlet.response.useRequestHttpVersion

    설명

    HTTP 응답 헤더의 HTTP 버전을 HTTP 클라이언트 버전으로 설정한다. 기존에 제공하던 jeus.servlet.response.force-response-10은 이 설정으로 변경해야 한다.

    기본값

    false

  • jeus.servlet.context.attribute.serialize

    설명

    Context Auto reload할 때 ServletContext attribute를 serialize하여 유지할지 여부를 설정한다.

    기본값

    false

  • jeus.servlet.resource.ignore-filename-case

    설명

    ResourceServlet에서 리소스 파일 이름의 대소문자 구별 여부를 설정한다.

    Windows OS 혹은 jeus.servlet.useCaseInsensitiveFileSystem이 true인 경우 유효하다.

    기본값

    false

  • jeus.servlet.response.header.encoding

    설명

    응답 헤더에 사용할 캐릭터 인코딩을 설정한다.

    기본값

    null

  • jeus.servlet.scan-servlet-container-initializers

    설명

    Servlet 3.0부터 추가된 ServletContainerInitializer 메커니즘 사용 여부를 결정한다.

    Servlet 표준을 준수하기 위하여 기본적으로 scan 작업을 수행하지만 이로 인해서 디플로이 시간이 늘어날 수 있다.

    기본값

    true

  • jeus.servlet.sortWebinfLibraries

    설명

    WEB-INF/lib에 포함된 jar 파일들을 로딩할 때 정렬을 하는 옵션이다.

    • name_asc : 파일 이름으로 오름차순 정렬

    • name_dsc : 파일 이름으로 내림차순 정렬

    • time_asc : 파일의 LMF로 오름차순 정렬

    • time_dsc : 파일의 LMF로 내림차순 정렬

    기본값

    null

  • jeus.servlet.useMetadataCompleteDeploy

    설명

    Java EE 5부터는 웹 애플리케이션 디플로이 시점에 반드시 Java EE 표준에서 정의한 어노테이션들이 정의된 클래스를 찾도록 되어 있다. WEB-INF/classes의 클래스 파일들 뿐만 아니라 WEB-INF/lib에 포함된 것들도 찾아야 하기 때문에 디플로이 시간이 오래 걸릴 수 있다.

    찾는 동작을 하지 않기 위해서는 web.xml의 metadata-complete 설정을 true로 지정해야 한다. 애플리케이션에 포함된 web.xml을 수정하지 않고 jeus-web-dd.xml을 추가해서 metadata-complete 설정을 true로 할 수 있다.

    기본값

    false

  • jeus.servlet.jsp.allowOnlyStandardizedMethod

    설명

    JSP 또는 리소스 요청에 대해서 GET, HEAD, POST, OPTIONS, PUT, DELETE, TRACE, CONNECT의 8개의 HTTP method만 허용한다.

    기본값

    false

1.4.2. JSP 엔진 관련 프로퍼티

JSP 엔진에서만 사용하는 프로퍼티들이다.

  • jeus.servlet.jsp.reload

    설명

    JSP 리로딩 지원 여부를 설정한다.

    기본값

    true

  • jeus.servlet.jsp.precompile

    설명

    JSP precompile 지원 여부를 설정한다. (precompile 요청 파라미터에 따라 JSP를 호출할 때 compile만 하는 기능)

    기본값

    true

  • jeus.servlet.jsp.print.null.as.emptystring

    설명

    JSP에서 null로 출력할 때 공백 문자의 사용 여부를 설정한다.

    기본값

    false

  • jeus.servlet.jsp.jspwriter.null

    설명

    JSP에서 null로 출력할 때 대체할 문자열을 설정한다.

    기본값

    "null"

  • jeus.servlet.jsp.compile.retrycount

    설명

    JSP에서 생성된 서블릿을 로딩할 수 없을 때 재컴파일을 시도하는 횟수를 설정한다.

    기본값

    2

  • jeus.servlet.jsp.compile.delay

    설명

    FTP 업로드할 때 JSP 지연 컴파일 시간을 설정한다.

    기본값

    0L (단위: ms)

  • jeus.servlet.jsp.helpReloadNativeLibrariesByCallingSystemGC

    설명

    JSP를 reload할 때 JSP class loader가 사용한 Native Library가 제대로 cleanup되지 않는 JVM 문제를 해결하기 위한 방편이다.

    JSP class loader가 GC(Garbage Collection)될 때 Native Library가 정리되기 때문에 JEUS에서는 System.gc()를 호출해 줄 수 있을 뿐이며, 100% GC된다는 보장이 없다. 따라서 해당 JSP 내에서 System.loadLibrary() 등을 사용하는 경우 reload가 실패할 수 있다.

    기본값

    false

    System.gc()와 System.runFinalization()을 호출하므로 시스템 성능을 저하시킬 수 있다. 따라서 Native Library를 사용하는 JSP를 실제 서비스 운영 중에 수정하지 않기를 권장한다. 가장 좋은 방법은 Native Library를 사용하는 웹 애플리케이션을 별도로 작성해서 그쪽으로 dispatch를 하는 방법이 있다. 그 웹 애플리케이션은 Context Auto Reload나 redeploy하지 않아야 한다.

  • jeus.servlet.jsp.ignore-filename-case

    설명

    JSP 파일 이름의 대소문자 구별 여부를 설정한다. Windows OS 혹은 jeus.servlet.useCaseInsensitiveFileSystem이 true인 경우 유효하다.

    기본값

    false

  • jeus.servlet.jsp.assure-utf8-file-encoding-detection

    설명

    Jasper에서 JSP 파일 Encoding이 UTF-8이라고 확신할 수 없더라도 이를 UTF-8으로 취급한다.

    기본값

    false

    included JSP 파일에도 pageEncoding tag를 기술해야 한다.

  • jeus.servlet.jsp.compile-java-source-concurrently

    설명

    다수의 JSP 파일들에 대한 컴파일을 동시에 진행할 것인지에 대한 여부를 설정한다.

    기본값

    false

    사용하는 JSP 컴파일러에 동시성 이슈가 없음이 보장될 때만 사용해야 한다.

  • jeus.servlet.jsp.compileConcurrencyLevel

    설명

    다수의 JSP 파일에 대한 컴파일을 동시에 진행할 때 사용할 스레드 개수를 설정한다. jeus.servlet.jsp.compile-java-source-concurrently가 true인 경우 유효하다.

    기본값

    1

1.4.3. 호환성 제공 프로퍼티

JEUS는 기본적으로 Servlet 및 JSP 표준을 준수해야 한다. 하지만 표준 해석 오류, 요구 사항에 대한 구현 누락 등과 같은 개발자의 실수 또는 불분명한 설명, 표준 기술 문서와 API 문서 간의 설명 불일치 등으로 인한 표준 문서의 오류로 인해 API 동작이 달라질 수 있다.

  • jeus.servlet.jsp.modern

    설명

    false로 설정하는 경우 JEUS 4 호환 JSP 엔진을 사용한다. 이 경우 JSP 1.2 버전만 지원된다. 해당 JSP 엔진은 deprecated되었으므로 더이상 사용하지 않기를 권장하며 본 호환성 프로퍼티도 차기 버전 또는 차기 Fix에서 삭제될 예정이다.

    기본값

    true

  • jeus.servlet.request.url.allowNonStandardPercentCharacterUsage

    설명

    URL에 단독으로 '%' 문자 사용을 허용한다. 하지만 이는 RFC 2396, 2.4.3. Excluded US-ASCII Characters에 따르면 '%' 문자는 URL escape를 위한 예약어이며, 결코 단독 문자로 사용할 수 없고 정해진 형식으로만 사용 가능하다. 따라서 클라이언트에서 이를 '%25’로 escape해서 보내야 한다.

    기본값

    false

  • jeus.servlet.request.6CompatibleSetCharacterEncoding

    설명

    ServletRequest.setCharacterEncoding()으로 세팅한 인코딩은 반드시 Request Body에만 적용해야 한다. 그러나 JEUS 6에서 이를 준수하지 않은 버그가 발견되어, Query String, Cookie와 같이 Request Header를 읽을 때도 사용한다. JEUS 6의 잘못된 동작에 기반하여 작성한 애플리케이션을 수정없이 지원해야 하는 경우 이 옵션을 사용해야 한다.

    기본값

    false

  • jeus.servlet.response.defaultContentType

    설명

    Content-Type 응답 헤더에 설정할 기본 값이다. 이 값이 null이 아닐 경우 아래와 같은 상황에서 응답 헤더를 설정한다.

    ServletResponse.setCharacterEncoding()이나 ServletResponse.setLocale() 호출할 때, Servlet이 명시적으로 ServletResponse.setContentType()을 호출하지 않았다면 이 프로퍼티 값을 Content-Type 헤더로 설정한다. 하지만 이러한 동작은 Content-Type 응답 헤더에 관한 Servlet 표준에 맞지 않는 것이다.

    기본값

    null

    서블릿이 명시적으로 ServletResponse.setContentType()을 호출하지 않았다면 응답 헤더에 Content-Type Header를 넣으면 안 된다고 서블릿 표준에서 규정하고 있다. 또한 ServletResponse.getContentType()를 호출할 때에는 null을 리턴하도록 하고 있다. 이는 Servlet 2.3에서도 명시된 내용으로 JEUS에서 오래 전부터 지키지 않고 있던 사항이다.

    따라서 JEUS 7 Fix#1부터는 이를 준수하기 위해 기본값을 null로 변경하였다. 만약 여기에 의존해서 애플리케이션이 동작하고 있었다면 이 프로퍼티 값을 적절한 값으로 설정하기 바란다.

  • jeus.servlet.response.applyContentLanguageProperlyWithSetLocaleAPI

    설명

    ServletResponse.getWriter() 호출 이후에 ServletResponse.setLocale()을 호출했을 때, Content-Language 응답 헤더는 반드시 설정되어야 한다. 물론 Character Encoding은 바뀌지 않는다. 만약 원하지 않게 Content-Language 응답 헤더가 설정되는 경우에는 이값을 false로 지정한다.

    기본값

    true

  • jeus.servlet.response.6CompatibleForcedEncoding

    설명

    xml 설정으로 적용하는 <response-encoding><forced>의 적용 우선 순위를 원래의 의미에 맞지 않게 구현된 JEUS 6 방식으로 동작하게 한다. 원래 forced 옵션은 우선 순위가 가장 높다. 애플리케이션 API를 통해서 세팅하거나 JSP 파일의 page 태그 contentType에 설정된 HTTP 응답 인코딩에 우선한다.

    기본값

    false

  • jeus.servlet.response.6CompatibleSetCharacterEncoding

    설명

    ServletResponse.setCharacterEncoding()으로 세팅한 인코딩은 forced 보다 우선 순위가 낮아야 한다. 그러나 JEUS 6 이전까지는 이를 준수하지 않은 버그가 발견되어, 항상 forced 설정을 무시하는 문제가 있다. 만약 이러한 동작에 의존해서 구현된 애플리케이션이 있고 이 동작을 유지하고자 한다면 이 옵션을 true로 설정한다.

    Request 쪽과 이름이 유사하므로 서로 헷갈리지 않도록 한다.

    기본값

    false

  • jeus.servlet.response.allowBothWriterAndOutputStream

    설명

    HttpServletResponse.getWriter()와 HttpServletResponse.getOutputStream은 동시에 사용할 수 있도록 하는 옵션이다. 스펙에는 reset() 호출시에만 서로 다른 메소드를 사용할 수 있도록 허용하고 있지만, 해당 옵션으로 동시에 사용할 수 있도록 한다.

    기본값

    false

  • jeus.servlet.session.invalidateBySetMaxInactiveIntervalZero

    설명

    HttpSession.setMaxInactiveInterval(int timeout)의 경우 Spec에 의해 0 이하의 값은 제거되지 않아야 하는 세션을 의미한다.

    그러나 이전 스펙에서 모호하게 타임아웃만큼 유지되는 시간으로 설명이 되어 "0"을 invalidate로 사용하는 유저들이 있었다.

    이러한 의미로 사용했던 유저들의 호환성을 위해 설정을 제공한다.

    기본값

    false

  • jeus.servlet.engine.disableRequestFinishCheck

    설명

    Request 객체는 서블릿의 service 메소드 내부 혹은 필터의 doFilter 메소드 안에서만 유효하며 이미 처리가 끝난 Request 객체를 사용하려고 하면 IllegalStateException을 발생시키도록 스펙에 정의 되어 있다. 그러나 JEUS 7 이전까지는 이를 확인하지 않고 있어서 처리가 끝난 Request 객체를 사용하는 애플리케이션이 정상적으로 동작하였다.

    이러한 애플리케이션을 사용하는 유저들의 호환성을 위해 설정을 제공한다.

    기본값

    false

  • jeus.servlet.ignoreWebComponentFailureWhenDeploying

    설명

    디플로이 과정에서 load-on-startup으로 등록된 서블릿의 init(), Filter.init(), ServletContextListener에서 Exception이 발생하더라도 디플로이가 실패하지 않는다.

    기본값

    false