隨筆 - 42  文章 - 71  trackbacks - 0
          <2010年6月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          常用鏈接

          留言簿

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          最近項(xiàng)目組做了一個(gè)Blog系統(tǒng)(我沒有參與),玩Blog的人都知道,訪問某個(gè)Blog的時(shí)候,通常的格式是http://host:port/blogxxx,這個(gè)blogxxx的路徑在應(yīng)用部署目錄下實(shí)際上是不存在的,只是使用了Filter攔截解釋才得以返回正確的結(jié)果。

          這個(gè)Blog應(yīng)用在開發(fā)環(huán)境是WebSphere Application Server 6.1.0.0版本的,一切運(yùn)行正常。到了生產(chǎn)環(huán)境部署的時(shí)候是用的WebSphere Application Server 6.1.0.25版本的,訪問Blog的時(shí)候就會(huì)出現(xiàn)404的錯(cuò)誤。

          一開始以為是應(yīng)用的問題,仔細(xì)檢查了應(yīng)用之后,感覺問題不在于應(yīng)用。打開了WAS的Trace看了一下,感覺有點(diǎn)差別:

           

          請(qǐng)求的Blog地址為: http://xxxx.com/Blog/BillyTest

          在WAS 6.1.0.0的Trace(真實(shí)IP地址替換為0.0.0.0):

          [10-6-25 3:26:45:236 CST] 00000035 WebContainer  3   Looking for vhost with key –> 0.0.0.0:9080/Blog/BillyTest/
          [10-6-25 3:26:45:236 CST] 00000035 VirtualHostCo 3   map vHost [0.0.0.0:9080] relativePath [/Blog/BillyTest/]
          [10-6-25 3:26:45:236 CST] 00000035 WebContainer  3   request processor handling request --> com.ibm.ws.wswebcontainer.webapp.WebGroup@15de15de
          [10-6-25 3:26:45:236 CST] 00000035 WebGroup      3   WebGroup found --> /Blog
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getEncodedRequestURI
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getEncodedRequestURI uri --> /Blog/BillyTest/
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getRequestURI uri --> /Blog/BillyTest/
          [10-6-25 3:26:45:236 CST] 00000035 WebApp        3   URI --> /Blog/BillyTest/ handled by WebApp --> XXXXX_BLOG_EAR
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getWebAppDispatcherContext
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getWebAppDispatcherContext
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getWebAppDispatcherContext
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   resetPathElements
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletRes 3   Setting the default response encoding
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getWebAppDispatcherContext
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletRes 3   _locale: zh_CN
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletRes 3   _encoding: ISO-8859-1
          [10-6-25 3:26:45:236 CST] 00000035 WebApp        3   RequestProcessor handling request is class com.ibm.ws.wswebcontainer.extension.DefaultExtensionProcessor
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getWebAppDispatcherContext
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getAttribute name --> javax.servlet.include.request_uri
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getWebAppDispatcherContext
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getServletPath --> path
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getWebAppDispatcherContext
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getPathInfo path --> /BillyTest/
          [10-6-25 3:26:45:236 CST] 00000035 DefaultExtens 3   handleRequest: servletPath [] pathInfo [/BillyTest/]
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getWebAppDispatcherContext
          [10-6-25 3:26:45:236 CST] 00000035 WebAppFilterM >  doFilter Entry
          [10-6-25 3:26:45:236 CST] 00000035 SRTServletReq 3   getAttribute name --> com.ibm.servlet.engine.webapp.dispatch_nested
          [10-6-25 3:26:45:236 CST] 00000035 WebAppFilterM 3   requestURI [/BillyTest/] isInternal [false]
          [10-6-25 3:26:45:236 CST] 00000035 LRUCache      >  get Entry
                                           /BillyTest/
          [10-6-25 3:26:45:236 CST] 00000035 LRUCache      <  get Exit
          [10-6-25 3:26:45:236 CST] 00000035 WebAppFilterC >  _doFilter Entry

           

          可以看到,在最后幾行,請(qǐng)求的URL進(jìn)入了Filter Chain進(jìn)行處理了,后續(xù)Filter的處理已經(jīng)省略。

           

           

          在WAS 6.1.0.25上的Trace(真實(shí)IP地址已經(jīng)替換為0.0.0.0)

          [10-6-25 3:02:06:515 GMT+08:00] 00000112 WebContainer  3   Looking for vhost with key –> 0.0.0.0:80/Blog/BillyTest
          [10-6-25 3:02:06:515 GMT+08:00] 00000112 VirtualHostCo 3   map vHost [0.0.0.0:80] relativePath [/Blog/BillyTest]
          [10-6-25 3:02:06:515 GMT+08:00] 00000112 WebContainer  3   request processor handling request --> com.ibm.ws.wswebcontainer.webapp.WebGroup@52245224
          [10-6-25 3:02:06:515 GMT+08:00] 00000112 WebGroup      3   WebGroup found --> /Blog
          [10-6-25 3:02:06:515 GMT+08:00] 00000112 SRTServletReq >  getRequestURI [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771] Entry
          [10-6-25 3:02:06:515 GMT+08:00] 00000112 SRTServletReq >  getEncodedRequestURI [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771] Entry
          [10-6-25 3:02:06:515 GMT+08:00] 00000112 SRTServletReq <  getEncodedRequestURI uri --> /Blog/BillyTest Exit
          [10-6-25 3:02:06:515 GMT+08:00] 00000112 SRTServletReq <  getRequestURI uri --> /Blog/BillyTest Exit
          [10-6-25 3:02:06:515 GMT+08:00] 00000112 WebApp        3   (WEB) URI --> /Blog/BillyTest handled by WebApp --> TJMCC_EIPIV_YYT_BLOG_EAR
          [10-6-25 3:02:06:515 GMT+08:00] 00000112 SRTServletReq 3   getWebAppDispatcherContext [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771]
          [10-6-25 3:02:06:516 GMT+08:00] 00000112 SRTServletReq 3   getWebAppDispatcherContext [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771]
          [10-6-25 3:02:06:516 GMT+08:00] 00000112 SRTServletReq 3   getWebAppDispatcherContext [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771]
          [10-6-25 3:02:06:516 GMT+08:00] 00000112 SRTServletReq 3   resetPathElements [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771]
          [10-6-25 3:02:06:516 GMT+08:00] 00000112 SRTServletRes 3   Setting the default response encoding
          [10-6-25 3:02:06:516 GMT+08:00] 00000112 SRTServletReq 3   getWebAppDispatcherContext [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771]
          [10-6-25 3:02:06:516 GMT+08:00] 00000112 SRTServletRes 3   _locale: zh_CN
          [10-6-25 3:02:06:516 GMT+08:00] 00000112 SRTServletRes 3   _encoding: ISO-8859-1
          [10-6-25 3:02:06:516 GMT+08:00] 00000112 WebApp        3   RequestProcessor handling request is class com.ibm.ws.wswebcontainer.extension.DefaultExtensionProcessor
          [10-6-25 3:02:06:516 GMT+08:00] 00000112 SRTServletReq 3   getWebAppDispatcherContext [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771]
          [10-6-25 3:02:06:516 GMT+08:00] 00000112 SRTServletReq >  getRequestURI [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771] Entry
          [10-6-25 3:02:06:516 GMT+08:00] 00000112 SRTServletReq >  getEncodedRequestURI [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771] Entry
          [10-6-25 3:02:06:516 GMT+08:00] 00000112 SRTServletReq <  getEncodedRequestURI uri --> /Blog/BillyTest Exit
          [10-6-25 3:02:06:516 GMT+08:00] 00000112 SRTServletReq <  getRequestURI uri --> /Blog/BillyTest Exit
          [10-6-25 3:02:06:517 GMT+08:00] 00000112 DefaultExtens >  handleRequest : request--->/Blog/BillyTest<--- Entry
          [10-6-25 3:02:06:517 GMT+08:00] 00000112 SRTServletReq 3   getAttribute name --> javax.servlet.include.request_uri [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771]
          [10-6-25 3:02:06:517 GMT+08:00] 00000112 SRTServletReq 3   getWebAppDispatcherContext [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771]
          [10-6-25 3:02:06:517 GMT+08:00] 00000112 SRTServletReq 3   getServletPath --> path
          [10-6-25 3:02:06:517 GMT+08:00] 00000112 SRTServletReq >  getPathInfo [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771] Entry
          [10-6-25 3:02:06:517 GMT+08:00] 00000112 SRTServletReq 3   getWebAppDispatcherContext [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771]
          [10-6-25 3:02:06:517 GMT+08:00] 00000112 SRTServletReq <  getPathInfo path --> [/BillyTest] Exit
          [10-6-25 3:02:06:517 GMT+08:00] 00000112 DefaultExtens 3   handleRequest: servletPath [] pathInfo [/BillyTest]
          [10-6-25 3:02:06:517 GMT+08:00] 00000112 DefaultExtens 3   handleRequest stripping leading slashes pathInfo ---> BillyTest
          [10-6-25 3:02:06:517 GMT+08:00] 00000112 DefaultExtens 3   file does not exist :/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/wasc3Cell01/TJMCC_EIPIV_YYT_BLOG_EAR.ear/TJMCC_EIPIV_YYT_Blog.war/BillyTest
          [10-6-25 3:02:06:517 GMT+08:00] 00000112 DefaultExtens 3   isDirectoryTraverse returningfalse , matchstring :/BillyTest
          [10-6-25 3:02:06:517 GMT+08:00] 00000112 DefaultExtens 3   FileNotFoundException caught
          [10-6-25 3:02:06:517 GMT+08:00] 00000112 SRTServletReq 3   setAttribute name --> com.ibm.ws.webcontainer.filter.filenotfound value --> com.ibm.websphere.servlet.error.ServletErrorReport: SRVE0190E: 找不到文件:/BillyTest [com.ibm.ws.webcontainer.srt.SRTServletRequest@7710771]

          從最后一行可以看出,Web容器在Filter作用之前去Web應(yīng)用所在目錄下查找/BillyTest目錄,結(jié)果發(fā)現(xiàn)沒有找到,所以就直接返回了404的響應(yīng)給瀏覽器。

           

          從上面的Trace對(duì)比,懷疑問題出在WAS下版本的行為變化上,查閱一下IBM的文檔,找到如下一個(gè)解釋:

          在WebSphere 6的某些版本中,Web容器在查找用戶請(qǐng)求的資源之前,不會(huì)調(diào)用用戶自行設(shè)定的Filter。所以在上面的例子中,由于所請(qǐng)求的/BillyTest資源并不是實(shí)際存在的,所以未經(jīng)過應(yīng)用Filter處理就拋出了FileNotFoundException。要想改變服務(wù)器的這種行為,需要為Web容器設(shè)置自定義參數(shù):com.ibm.ws.webcontainer.invokeFiltersCompatibility,將其設(shè)置為”true”

           

          登錄WAS Admin,服務(wù)器>應(yīng)用服務(wù)器>your_server_name>Web容器設(shè)置>Web容器>定制屬性,點(diǎn)擊“新建”,加入一個(gè)自定義屬性:

          名稱:com.ibm.ws.webcontainer.invokeFiltersCompatibility

          值:true

           

          2010-06-28_195740

           

          配置之后,重新啟動(dòng)則應(yīng)用運(yùn)行正常。

           

          經(jīng)過這次的問題處理,感覺測(cè)試環(huán)境和生產(chǎn)環(huán)境應(yīng)該盡可能的使用同樣版本的平臺(tái)和產(chǎn)品,否則會(huì)在上線的時(shí)候給你帶來意外的驚喜。

           

          關(guān)于這個(gè)問題原文地址在:

          http://www-01.ibm.com/support/docview.wss?rs=180&uid=swg1PK31377

           

           

          Technorati 標(biāo)簽: ,,,,
          posted on 2010-06-28 19:58 YODA 閱讀(4711) 評(píng)論(3)  編輯  收藏

          FeedBack:
          # re: WebSphere 6.1.0.25 的 404錯(cuò)誤 2010-06-29 09:26 隔葉黃鶯
          收藏下,以后可能用得著。  回復(fù)  更多評(píng)論
            
          # re: WebSphere 6.1.0.25 的 404錯(cuò)誤[未登錄] 2010-06-29 10:03 YODA
          @隔葉黃鶯
          謝謝兄臺(tái)支持
            回復(fù)  更多評(píng)論
            
          # re: WebSphere 6.1.0.25 的 404錯(cuò)誤[未登錄] 2010-07-01 09:30 IVY
          多虧有你了,不然還不知道要折騰多久@YODA
            回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 赞皇县| 古蔺县| 军事| 山阳县| 社旗县| 曲沃县| 仪陇县| 虞城县| 九龙县| 偏关县| 资阳市| 宕昌县| 临猗县| 抚州市| 新邵县| 五华县| 仲巴县| 榕江县| 温泉县| 会东县| 永州市| 华安县| 锡林浩特市| 德昌县| 海伦市| 星座| 德江县| 逊克县| 卢龙县| 灵宝市| 呼和浩特市| 镇平县| 山丹县| 鹤峰县| 闻喜县| 五莲县| 太保市| 西乌珠穆沁旗| 津市市| 北碚区| 鄯善县|