지난주 만난 황당 사례입니다.

Webtob와 JEUS를 사용하는 사이트에 WebSquare를 설치하는데 xml, js, gif, jpg와 같은 기본적인 리소스를 전혀 못가져오는 문제가 발생했습니다. (HTTP 404오류 발생)

여러가지 테스트를 하다가 발견한 사실은 http.m파일에 mime type을 설정하면 해당 파일은 가져오고 있었습니다.

설정파일은 대략 아래와 같은 형태였습니다.



*DOMAIN
jeuservice

*NODE
testsvr WEBTOBDIR="C:/jeus32/WebtoB",
SHMKEY = 54000,
DOCROOT="C:/jeus32/webhome/servlet_home/webapps",
PORT = "8081",
LOGGING = "log1",
ERRORLOG = "log2",
JSVPORT = 9900,
IndexName="index.html,index.htm",
Options = "+Index",
        DirIndex = "Index",
HTH = 1

*SVRGROUP
htmlg NODENAME = testsvr, SvrType = HTML
#cgig NODENAME = testsvr, SVRTYPE = CGI
#ssig NODENAME = testsvr, SVRTYPE = SSI
jsvg NODENAME = testsvr, SVRTYPE = JSV

*SERVER
html SVGNAME = htmlg, MinProc = 1, MaxProc = 2
#cgi SVGNAME = cgig, MinProc = 1, MaxProc = 2
#ssi SVGNAME = ssig, MinProc = 1, MaxProc =2
MyGroup SVGNAME = jsvg, MinProc = 25, MaxProc = 25

*URI
uri Uri = "/",Svrtype = JSV

*ALIAS


*DIRINDEX
Index Options = "FANCY"

*LOGGING
log1 Format = "DEFAULT", FileName = "C:/jeus32/WebtoB/log/access.log", Option = "sync"
log2 Format = "ERROR", FileName = "C:/jeus32/WebtoB/log/error.log", Option = "sync"

*EXT
htm MimeType = "text/html", SvrType = HTML
xml MimeType = "text/xml", SvrType = HTML
xsl MimeType = "text/xml", SvrType = HTML



어떤 부분이 문제였을까요???


일부러 그렇게 설정하진 않았겠죠?

Posted by thinknote
기본적으로 ServeltInputStream은 request.getParamter과 비슷한 기능을 하는API (getParameterNames(), getParameterValues(), getParameterMap() )를 호출하면 null을 반환합니다.

getParameter와 비슷한 API를 호출하지 않은 경우에도 이러한 현상이 발생하는 경우가 있는데, 경험에 의하면 Jeniffer와 같은 APM솔루션에서 HTTP Stream을 검사하는 경우 발생하고 있습니다. (T모사에서 발생하였음.)

제니퍼 홈페이지에도 비슷한 내용이 있고요. http://www.jennifersoft.com/apm-jennifer-support-qa/forum/page/9/show/ko/3389/show.html

해결 하는 방법은

1. 제니퍼의 해당 옵션을 끈다.
2. x-www-form-urlencoded 방식으로 encoding하지 않는다.
3. WAS에서 getParameter을 읽은 후에도 ServetInputStream을 읽을 수 있게 해주는 옵션을 활성화 시킨다. (모든 WAS에서 제공하지는 않을 것 같지만, WebSphere에는 있다고 합니다. 하지만  성능 저하는 있겠죠..)
4. ServeltInputStream을 사용하지 않는다. Encoding문제를 해결하기 위해서 stream을 직접 읽었다면. Base64와 같은 다른 인코딩 방법을 쓰는 것도 좋은 해결책 입니다.





Posted by thinknote
LinkedHashMap을 사용하면 됩니다.

아래는 인터넷에서 찾은 예제 입니다. (http://www.java-examples.com/iterate-through-values-java-linkedhashmap-example )


import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Iterator;
 
public class IterateValuesOfLinkedHashMapExample {
 
  public static void main(String[] args) {
 
    //create LinkedHashMap object
    LinkedHashMap lHashMap = new LinkedHashMap();
 
    //add key value pairs to LinkedHashMap
    lHashMap.put("1","One");
    lHashMap.put("2","Two");
    lHashMap.put("3","Three");
 
    /*
      get Collection of values contained in LinkedHashMap using
      Collection values() method of LinkedHashMap class
    */
    Collection c = lHashMap.values();
 
    //obtain an Iterator for Collection
    Iterator itr = c.iterator();
 
    //iterate through LinkedHashMap values iterator
    while(itr.hasNext())
      System.out.println(itr.next());
  }
}

Posted by thinknote