servlet过滤器

servletè¿æ»¤å¨

1. Servletè¿æ»¤å¨åºç¡
Servletè¿æ»¤å¨æ¯Servletçä¸ç§ç¹æ®ç¨æ³ï¼ä¸»è¦ç¨æ¥å®æä¸äºéç¨çæä½ãæ¯å¦ç¼ç çè¿æ»¤ï¼å¤æ­ç¨æ·çç»éç¶æç­ç­ãServletè¿æ»¤å¨çéç¨åºåï¼
Aï¼è®¤è¯è¿æ»¤
Bï¼ç»å½å审核è¿æ»¤
Cï¼å¾å转æ¢è¿æ»¤
Dï¼æ°æ®å缩è¿æ»¤
Eï¼å å¯è¿æ»¤
Fï¼ä»¤çè¿æ»¤
Gï¼èµæºè®¿é®è§¦åäºä»¶è¿æ»¤
Servletè¿æ»¤å¨æ¥å£çææï¼
ææçServletè¿æ»¤å¨ç±»é½å¿é¡»å®ç°javax.servlet.Filteræ¥å£ãè¿ä¸ªæ¥å£å«æ3个è¿æ»¤å¨ç±»å¿é¡»å®ç°çæ¹æ³ï¼
æ¹æ³ 说æ
init(FilterConfig cfg) è¿æ¯Servletè¿æ»¤å¨çåå§åæ¹æ³ï¼æ§è´¨ç­åä¸servletçinitæ¹æ³ã
doFilter(ServletRequest,ServletResponse,FilterChain) å®æå®éçè¿æ»¤æä½ï¼å½è¯·æ±è®¿é®è¿æ»¤å¨å³èçURLæ¶ï¼Servlet容å¨å°åè°ç¨è¿æ»¤å¨çdoFilteræ¹æ³ãFilterChainåæ°ç¨äºè®¿é®åç»­è¿æ»¤å¨
destroy() Servlet容å¨å¨éæ¯è¿æ»¤å¨å®ä¾åè°ç¨è¯¥æ¹æ³ï¼è¿ä¸ªæ¹æ³ä¸­å¯ä»¥éæ¾Servletè¿æ»¤å¨å ç¨çèµæºãæ§è´¨ç­åä¸servletçdestory()æ¹æ³ã
Servletè¿æ»¤å¨çå建步骤ï¼
Aï¼å®ç°javax.servlet.Filteræ¥å£çservletç±»
Bï¼å®ç°initæ¹æ³ï¼è¯»åè¿æ»¤å¨çåå§åå½æ°
Cï¼å®ç°doFilteræ¹æ³ï¼å®æ对请æ±æè¿æ»¤çååº
Dï¼è°ç¨FilterChainæ¥å£å¯¹è±¡çdoFilteræ¹æ³ï¼ååç»­çè¿æ»¤å¨ä¼ é请æ±æååº
F.å¨web.xml中éç½®Filter
2.使ç¨è¿æ»¤å¨å¤ç中æé®é¢
   å½ç¨ç¨æ·ç»é页é¢è¾å¥å¸å·æ¶ï¼å¦æè¾å¥æ¯ä¸­æï¼åå°servletå次è¾åºè¿ä¸ªå容æ¶ï¼å¯è½å°±ä¼æ¯ä¹±ç ï¼è¿æ¯å ä¸ºserlvet中é»è®¤æ¯ä»¥ISO-8859-1æ ¼å¼ç¼ç çï¼å¦æåå°æå¤ä¸ªServlet,å¤ä¸ªåæ°ï¼è¿æ ·å°±ä¸åéï¼è¿ä¸ªé®é¢ï¼æ们å¯ä»¥éè¿ä¸ä¸ªè¿æ»¤å¨ç»ä¸è§£å³ï¼ä½¿åå°çè¾åºè¾åºé½æ¯æ中æï¼å°ISO-8859-1转ç ä¸ºGBKçé£æ®µä»£ç ï¼
3.使ç¨è¿æ»¤å¨è®¤è¯ç¨æ·ï¼
æ¯ä¸ªè¿æ»¤å¨ä¹å¯ä»¥éç½®åå§ååæ°ï¼å¯ä»¥å°ä¸éè¦è¿æ»¤çå°åéç½®å°è¿ä¸ªFilterçéç½®åæ°ä¸­ï¼è¿æ»¤æ¶ï¼å¦æ请æ±å°åå¨éç½®åæ°ä¸­ï¼åæ¾è¡ï¼è¿æ · å°±é¿åäºå¨ç¨åºä¸­ç¡¬ç¼ç ãæ¯ä¸ªFilter中åå§åæ¶ï¼é½å¯ä»¥å¾å°é置对象ï¼å¨Filter中éç½®äºä¸ªä¸éè¦è¿æ»¤çå°åï¼ä¸ä¸ªæ¯ç»é页é¢ï¼ä¸ä¸ªæ¯æ§è¡ç»é 认è¯çservletï¼
4.Servletçå¬å¨
类似ä¸Swingçé¢åºç¨å¼åï¼Servletä¹å¯ä»¥å建çå¬å¨ï¼ä»¥å¯¹Servlet容å¨ï¼æServlet中以象çäºä»¶ååºååºãServletçå¬å¨ä¸»è¦æ以ä¸å ç§ï¼
ServletRequestListener ,ServletRequestAttributeListenerï¼
HttpSessionActivationListener ,HttpSessionBindingListener ,
HttpSessionAttributeListener,HttpSessionListener,
ServletContextListenerç­ç­ã
è¿äºçå¬å¨ä¸»è¦ç¨æ¥çå¬session,request,applicationè¿ä¸ä¸ªå¯¹è±¡éå­åæ°æ®çååã
----------------------------------------------------------------------------------------------------------------

servlet API中æéè¦çä¸ä¸ªåè½å°±æ¯è½å¤ä¸ºservletåJSP页é¢å®ä¹è¿æ»¤å¨ãè¿æ»¤å¨æä¾äºæäºæ©ææå¡å¨ææ¯æçéæ å“servleté¾æ¥”çä¸ç§åè½å¼ºå¤§ä¸æ åçæ¿ä»£åã
                                                                                                
     è¿æ»¤å¨æ¯ä¸ä¸ªç¨åºï¼å®åäºä¸ä¹ç¸å³çservletæJSP页é¢è¿è¡å¨æå¡å¨ä¸ãè¿æ»¤å¨å¯éå å°ä¸ä¸ªæå¤ä¸ªservletæJSP页é¢ä¸ï¼å¹¶ä¸å¯ä»¥æ£æ¥è¿å¥è¿äºèµæºç请æ±ä¿¡æ¯ãå¨è¿ä¹åï¼è¿æ»¤å¨å¯ä»¥ä½å¦ä¸çéæ©ï¼

1. 以常è§çæ¹å¼è°ç¨èµæºï¼å³ï¼è°ç¨servletæJSP页é¢ï¼ã

2.å©ç¨ä¿®æ¹è¿ç请æ±ä¿¡æ¯è°ç¨èµæºã

3. è°ç¨èµæºï¼ä½å¨åéååºå°å®¢æ·æºå对å¶è¿è¡ä¿®æ¹

4. é»æ­¢è¯¥èµæºè°ç¨ï¼ä»£ä¹ä»¥è½¬å°å¶ä»çèµæºï¼è¿åä¸ä¸ªç¹å®çç¶æ代ç æçææ¿æ¢è¾åºã

è¿æ»¤å¨æä¾äºå ä¸ªéè¦å¥½å¤ ï¼


        é¦åï¼å®ä»¥ä¸ç§æ¨¡ååçæå¯éç¨çæ¹å¼å°è£å¬å±çè¡ä¸ºãä½ æ30个ä¸åçserlvetæJSP页é¢ï¼éè¦å缩å®ä»¬çå容以åå°ä¸è½½æ¶é´åï¼æ²¡é®é¢ï¼æé ä¸ä¸ªå缩è¿æ»¤å¨ï¼ç¶åå°å®åºç¨å°30个èµæºä¸å³å¯ã

å¶æ¬¡ï¼å©ç¨å®è½å¤å°é«çº§è®¿é®å³ç­ä¸è¡¨ç°ä»£ç ç¸å离ãè¿å¯¹äºJSPç¹å«æä»·å¼ï¼å¶ä¸­ä¸è¬å¸æå°å ä¹æ´ä¸ªé¡µé¢é中å¨è¡¨ç°ä¸ï¼èä¸æ¯é中å¨ä¸å¡é»è¾ä¸ãä¾å¦ï¼å¸ æé»å¡æ¥èªæäºç«ç¹ç访é®èä¸ç¨ä¿®æ¹å页é¢ï¼è¿äºé¡µé¢åå°è®¿é®éå¶ï¼åï¼æ²¡é®é¢ï¼å»ºç«ä¸ä¸ªè®¿é®éå¶è¿æ»¤å¨å¹¶æå®åºç¨å°æ³è¦éå¶è®¿é®ç页é¢ä¸å³å¯ã

     æåï¼è¿æ»¤å¨ä½¿ä½ è½å¤å¯¹è®¸å¤ä¸åçèµæºè¿è¡æ¹éæ§çæ´æ¹ãä½ æ许å¤ç°å­èµæºï¼è¿äºèµæºé¤äºå¬å¸åè¦æ´æ¹å¤å¶ä»çä¿æä¸åï¼è½åå°ä¹ï¼æ²¡é®é¢ï¼æé ä¸ä¸ªä¸²æ¿æ¢è¿æ»¤å¨ï¼åªè¦åé就使ç¨å®ã

     ä½è¦æ³¨æï¼è¿æ»¤å¨åªå¨ä¸servletè§è2.3çå¼å®¹çæå¡å¨ä¸æä½ç¨ãå¦æä½ çWebåºç¨éè¦æ¯ææ§çæå¡å¨ï¼å°±ä¸è½ä½¿ç¨è¿æ»¤å¨ã

1ï¼   建ç«åºæ¬è¿æ»¤å¨

建ç«ä¸ä¸ªè¿æ»¤å¨æ¶åä¸åäºä¸ªæ­¥éª¤ï¼
1ï¼å»ºç«ä¸ä¸ªå®ç°Filteræ¥å£çç±»ãè¿ä¸ªç±»éè¦ä¸ä¸ªæ¹æ³ï¼åå«æ¯ï¼doFilterãinitådestroyã
       doFilteræ¹æ³åå«ä¸»è¦çè¿æ»¤ä»£ç ï¼è§ç¬¬2æ­¥ï¼ï¼initæ¹æ³å»ºç«è®¾ç½®æä½ï¼èdestroyæ¹æ³è¿è¡æ¸æ¥ã

2ï¼å¨doFilteræ¹æ³ä¸­æ¾å¥è¿æ»¤è¡ä¸ºãdoFilteræ¹æ³ç第ä¸ä¸ªåæ°ä¸ºServletRequest对象ã此对象ç»è¿æ»¤å¨æä¾äºå¯¹è¿å¥çä¿¡æ¯ ï¼åæ¬è¡¨åæ°æ®ãcookieåHTTP请æ±å¤´ï¼çå®å¨è®¿é®ã第äºä¸ªåæ°ä¸ºServletResponseï¼é常å¨ç®åçè¿æ»¤å¨ä¸­å¿½ç¥æ­¤åæ°ãæåä¸ä¸ªå æ°ä¸ºFilterChainï¼å¦ä¸ä¸æ­¥æè¿°ï¼æ­¤åæ°ç¨æ¥è°ç¨servletæJSP页ã

3ï¼è°ç¨FilterChain对象çdoFilteræ¹æ³ãFilteræ¥å£çdoFilteræ¹æ³åä¸ä¸ªFilterChain对象ä½ä¸ºå®çä¸ä¸ªå æ°ãå¨è°ç¨æ­¤å¯¹è±¡çdoFilteræ¹æ³æ¶ï¼æ¿æ´»ä¸ä¸ä¸ªç¸å³çè¿æ»¤å¨ãå¦æ没æå¦ä¸ä¸ªè¿æ»¤å¨ä¸servletæJSP页é¢å³èï¼åservletæJSP 页é¢è¢«æ¿æ´»ã

4ï¼å¯¹ç¸åºçservletåJSP页é¢æ³¨åè¿æ»¤å¨ãå¨é¨ç½²æ述符æ件ï¼web.xmlï¼ä¸­ä½¿ç¨filteråfilter-mappingåç´ ã

5ï¼ç¦ç¨æ¿æ´»å¨servletãé²æ­¢ç¨æ·å©ç¨ç¼ºçservlet URLç»è¿è¿æ»¤å¨è®¾ç½®ã

1.1   建ç«ä¸ä¸ªå®ç°Filteræ¥å£çç±»
      ææè¿æ»¤å¨é½å¿é¡»å®ç°javax.servlet.Filterãè¿ä¸ªæ¥å£åå«ä¸ä¸ªæ¹æ³ï¼åå«ä¸ºdoFilterãinitådestroyã

public void doFilter(ServletRequset request,
                     ServletResponse response,
                     FilterChain chain)
     thows ServletException, IOException

æ¯å½è°ç¨ä¸ä¸ªè¿æ»¤å¨ï¼å³ï¼æ¯æ¬¡è¯·æ±ä¸æ­¤è¿æ»¤å¨ç¸å³çservletæJSP页é¢ï¼æ¶ï¼å°±æ§è¡å¶doFilteræ¹æ³ãæ­£æ¯è¿ä¸ªæ¹æ³åå«äºå¤§é¨åè¿æ»¤é»è¾ã 第ä¸ä¸ªåæ°ä¸ºä¸ä¼ å¥è¯·æ±æå³çServletRequestã对äºç®åçè¿æ»¤å¨ï¼å¤§å¤æ°è¿æ»¤é»è¾æ¯åºäºè¿ä¸ªå¯¹è±¡çãå¦æå¤çHTTP请æ±ï¼å¹¶ä¸éè¦è®¿é®è¯¸ å¦getHeaderægetCookiesç­å¨ServletRequest中æ æ³å¾å°çæ¹æ³ï¼å°±è¦æ此对象æé æ HttpServletRequestã

第äºä¸ªåæ°ä¸ºServletResponseãé¤äºå¨ä¸¤ä¸ªæå½¢ä¸è¦ä½¿ç¨å®ä»¥å¤ï¼é常忽ç¥è¿ä¸ªåæ°ãé¦åï¼å¦æå¸æå®å¨é»å¡å¯¹ç¸å³servletæJSP页 é¢ç访é®ãå¯è°ç¨response.getWriter并ç´æ¥åéä¸ä¸ªååºå°å®¢æ·æºãå¶æ¬¡ï¼å¦æå¸æä¿®æ¹ç¸å³çservletæJSP页é¢çè¾åºï¼å¯æå åºåå«å¨ä¸ä¸ªæ¶éææåéå°å®çè¾åºç对象中ãç¶åï¼å¨è°ç¨serlvetæJSP页é¢åï¼è¿æ»¤å¨å¯æ£æ¥è¾åºï¼å¦æåé就修æ¹å®ï¼ä¹ååéå°å®¢æ·æºã

DoFilterçæåä¸ä¸ªåæ°ä¸ºFilterChain对象ã对此对象è°ç¨doFilter以æ¿æ´»ä¸servletæJSP页é¢ç¸å³çä¸ä¸ä¸ªè¿æ»¤å¨ãå¦æ没æå¦ä¸ä¸ªç¸å³çè¿æ»¤å¨ï¼å对doFilterçè°ç¨æ¿æ´»servletæJSPæ¬èº«ã

public void init(FilterConfig config)   thows ServletException

initæ¹æ³åªå¨æ­¤è¿æ»¤å¨ç¬¬ä¸æ¬¡åå§åæ¶æ§è¡ï¼ä¸æ¯æ¯æ¬¡è°ç¨è¿æ»¤å¨é½æ§è¡å®ã对äºç®åçè¿æ»¤å¨ï¼å¯æä¾æ­¤æ¹æ³çä¸ä¸ªç©ºä½ï¼ä½æ两个åå éè¦ä½¿ç¨initã é¦åï¼FilterConfig对象æä¾å¯¹servletç¯å¢åweb.xmlæ件中ææ´¾çè¿æ»¤å¨åç访é®ãå æ­¤ï¼æ®éçåæ³æ¯å©ç¨initå° FilterConfig对象å­æ¾å¨ä¸ä¸ªå­æ®µä¸­ï¼ä»¥ä¾¿doFilteræ¹æ³è½å¤è®¿é®servletç¯å¢æè¿æ»¤å¨å.å¶æ¬¡ï¼FilterConfigå¯¹è±¡å· æä¸ä¸ªgetInitParameteræ¹æ³ï¼å®è½å¤è®¿é®é¨ç½²æ述符æ件ï¼web.xmlï¼ä¸­åéçè¿æ»¤å¨åå§ååæ°ã

public void destroy( )
     大å¤æ°è¿æ»¤å¨ç®åå°ä¸ºæ­¤æ¹æ³æä¾ä¸ä¸ªç©ºä½ï¼ä¸è¿ï¼å¯å©ç¨å®æ¥å®æ诸å¦å³é­è¿æ»¤å¨ä½¿ç¨çæ件ææ°æ®åºè¿æ¥æ± ç­æ¸é¤ä»»å¡ã

1.2   å°è¿æ»¤è¡ä¸ºæ¾å¥doFilteræ¹æ³
     doFilteræ¹æ³ä¸ºå¤§å¤æ°è¿æ»¤å¨å°å³é®é¨åãæ¯å½è°ç¨ä¸ä¸ªè¿æ»¤å¨æ¶ï¼é½è¦æ§è¡doFilterã对äºå¤§å¤æ°è¿æ»¤å¨æ¥è¯´ï¼doFilteræ§è¡çæ­¥éª¤æ¯ åºäºä¼ å¥çä¿¡æ¯çãå æ­¤ï¼å¯è½è¦å©ç¨ä½ä¸ºdoFilterç第ä¸ä¸ªåæ°æä¾çServletRequestãè¿ä¸ªå¯¹è±¡å¸¸å¸¸æé ä¸º HttpServletRequestç±»åï¼ä»¥æä¾å¯¹è¯¥ç±»çæ´ç¹æ®æ¹æ³ç访é®ã

1.3   è°ç¨FilterChain对象çdoFilteræ¹æ³
     Filteræ¥å£çdoFilteræ¹æ³ä»¥ä¸ä¸ªFilterChain对象ä½ä¸ºå®ç第ä¸ä¸ªåæ°ãå¨è°ç¨è¯¥å¯¹è±¡çdoFilteræ¹æ³æ¶ï¼æ¿æ´»ä¸ä¸ä¸ªç¸å³ç è¿æ»¤å¨ãè¿ä¸ªè¿ç¨ä¸è¬æç»­å°é¾ä¸­æåä¸ä¸ªè¿æ»¤å¨ä¸ºæ­¢ãå¨æåä¸ä¸ªè¿æ»¤å¨è°ç¨å¶FilterChain对象çdoFilteræ¹æ³æ¶ï¼æ¿æ´»servletæ 页é¢èªèº«ã
ä½æ¯ï¼é¾ä¸­çä»»æè¿æ»¤å¨é½å¯ä»¥éè¿ä¸è°ç¨å¶FilterChainçdoFilteræ¹æ³ä¸­æ­è¿ä¸ªè¿ç¨ãå¨è¿æ ·çæåµä¸ï¼ä¸åè°ç¨JSP页é¢çserlvetï¼å¹¶ä¸ä¸­æ­æ­¤è°ç¨è¿ç¨çè¿æ»¤å¨è´è´£å°è¾åºæä¾ç»å®¢æ·æºã

1.4   对éå½çservletåJSP页é¢æ³¨åè¿æ»¤å¨
     é¨ç½²æ述符æ件ç2.3çæ¬å¼å¥äºä¸¤ä¸ªç¨äºè¿æ»¤å¨çåç´ ï¼åå«æ¯ï¼filteråfilter-mappingãfilteråç´ åç³»ç»æ³¨åä¸ä¸ªè¿æ»¤å¯¹è±¡ï¼filter-mappingåç´ æå®è¯¥è¿æ»¤å¯¹è±¡æåºç¨çURLã

1.filteråç´ 
filteråç´ ä½äºé¨ç½²æ述符æ件ï¼web.xmlï¼çåé¨ï¼ææfilter-mappingãservletæservlet-mappingåç´ ä¹åãfilteråç´ å·æå¦ä¸å­ä¸ªå¯è½çå­åç´ ï¼

1ã icon   è¿æ¯ä¸ä¸ªå¯éçåç´ ï¼å®å£°æIDEè½å¤ä½¿ç¨çä¸ä¸ªå¾è±¡æ件ã
2ãfilter-name   è¿æ¯ä¸ä¸ªå¿éçåç´ ï¼å®ç»è¿æ»¤å¨åéä¸ä¸ªéå®çåå­ã
3ãdisplay-name   è¿æ¯ä¸ä¸ªå¯éçåç´ ï¼å®ç»åºIDE使ç¨çç­å称ã
4ã description   è¿ä¹æ¯ä¸ä¸ªå¯éçåç´ ï¼å®ç»åºIDEçä¿¡æ¯ï¼æä¾ææ¬ææ¡£ã
5ã filter-class   è¿æ¯ä¸ä¸ªå¿éçåç´ ï¼å®æå®è¿æ»¤å¨å®ç°ç±»çå®å¨éå®åã
6ã init-param   è¿æ¯ä¸ä¸ªå¯éçåç´ ï¼å®å®ä¹å¯å©ç¨FilterConfigçgetInitParameteræ¹æ³è¯»åçåå§ååæ°ãå个è¿æ»¤å¨åç´ å¯åå«å¤ä¸ªinit-paramåç´ ã

请注æï¼è¿æ»¤æ¯å¨serlvetè§è2.3ç中å次å¼å¥çãå æ­¤ï¼web.xmlæ件å¿é¡»ä½¿ç¨DTDç2.3çæ¬ãä¸é¢ä»ç»ä¸ä¸ªç®åçä¾å­ï¼

  <xml version="1.0" encoding="ISO-8859-1"?>
    
DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
         "http://java.sun.com/dtd/web-app_2_3.dtd"
>

    
<web-app>
     
<filter>
        
<filter-name>MyFilterfilter-name>
        
<filter-class>myPackage.FilterClassfilter-class>
      
filter>
      

      
<filter-mapping>...filter-mapping>
     <
web-app>


2.filter-mappingåç´ 
    filter-mappingåç´ ä½äºweb.xmlæ件中filteråç´ ä¹åserlvetåç´ ä¹åãå®åå«å¦ä¸ä¸ä¸ªå¯è½çå­åç´ ï¼

1ã filter-name   è¿ä¸ªå¿éçåç´ å¿é¡»ä¸ç¨filterå素声ææ¶ç»äºè¿æ»¤å¨çå称ç¸å¹éã

2ã url-pattern   æ­¤å素声æä¸ä¸ªä»¥ææ ï¼/ï¼å¼å§ç模å¼ï¼å®æå®è¿æ»¤å¨åºç¨çURLãææfilter-mappingå素中å¿é¡»æä¾url-patternæ servlet-nameãä½ä¸è½å¯¹å个filter-mappingåç´ æä¾å¤ä¸ªurl-patternå素项ãå¦æå¸æè¿æ»¤å¨éç¨äºå¤ä¸ªæ¨¡å¼ï¼å¯éå¤ æ´ä¸ªfilter-mappingåç´ ã

3ã servlet-name   æ­¤åç´ ç»åºä¸ä¸ªå称ï¼æ­¤å称å¿é¡»ä¸å©ç¨servletåç´ ç»äºservletæJSP页é¢çå称ç¸å¹éãä¸è½ç»å个filter-mappingåç´ æä¾ å¤ä¸ªservlet-nameå素项ãå¦æå¸æè¿æ»¤å¨éåäºå¤ä¸ªservletåï¼å¯éå¤è¿ä¸ªfilter-mappingåç´ ã
ä¸é¢ä¸¾ä¸ä¸ªä¾å­ï¼

xml version="1.0" encoding="ISO-8859-1"?>
    
DOCTYPE web-app PUBLIC
        
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

        
"http://java.sun.com/dtd/web-app_2_3.dtd">
    
<web-app>
      
<filter>
        
<filter-name>MyFilterfilter-name>
        
<filter-class>myPackage.FilterClassfilter-class>
      
filter>
      

      
<filter-mapping>
        
<filter-name>MyFilterfilter-name>
        
<url-pattern>/someDirectory/SomePage.jspurl-pattern>
      
filter-mapping>
    
web-app>


1.5   ç¦ç¨æ¿æ´»å¨servlet
     å¨å¯¹èµæºåºç¨è¿æ»¤å¨æ¶ï¼å¯éè¿æå®è¦åºç¨è¿æ»¤å¨çURL模å¼æservletåæ¥å®æãå¦ææä¾servletåï¼åæ­¤å称å¿é¡»ä¸web.xmlç servletå素中ç»åºçå称ç¸å¹éãå¦æ使ç¨åºç¨å°ä¸ä¸ªserlvetçURL模å¼ï¼å此模å¼å¿é¡»ä¸å©ç¨web.xmlçåç´ servlet- mappingæå®ç模å¼ç¸å¹éãä½æ¯ï¼å¤æ°æå¡å¨ä½¿ç¨“æ¿æ´»å¨servlet”为servletä½ç»ä¸ä¸ªç¼ºççURLï¼http: //host/WebAppPrefix/servlet/ServletNameãéè¦ä¿è¯ç¨æ·ä¸å©ç¨è¿ä¸ªURL访é®servletï¼è¿æ ·ä¼ç»è¿è¿æ»¤å¨ 设置ï¼ã
ä¾å¦ï¼åå¦å©ç¨filteråfilter-mappingæ示å为SomeFilterçè¿æ»¤å¨åºç¨å°å为SomeServletçservletï¼åå¦ä¸ï¼

<filter>
      
<filter-name>SomeFilterfilter-name>
      
<filter-class>somePackage.SomeFilterClassfilter-class>
   <
filter>
    

    
<filter-mapping>
      
<filter-name>SomeFilterfilter-name>
      
<servlet-name>SomeServletservlet-name>
     <
filter-mapping>



æ¥çï¼ç¨servletåservlet-mappingè§å®URL   http://host/webAppPrefix/Blah åºè¯¥è°ç¨SomeSerlvetï¼å¦ä¸æ示ï¼

<filter>
      
<filter-name>SomeFilterfilter-name>
      
<filter-class>somePackage.SomeFilterClassfilter-class>
    
filter>
    

    
<filter-mapping>
      
<filter-name>SomeFilterfilter-name>
      
<servlet-name>/Blahservlet-name>
     <
filter-mapping>



ç°å¨ï¼å¨å®¢æ·æºä½¿ç¨URL   http://host/webAppPrefix/Blah æ¶å°±ä¼è°ç¨è¿æ»¤å¨ãè¿æ»¤å¨ä¸åºç¨å°
http://host/webAppPrefix/servlet/SomePackage.SomeServletClassã
尽管æå³é­æ¿æ´»å¨çæå¡å¨ä¸ç¨æ¹æ³ãä½æ¯ï¼å¯ç§»æ¤æ强çæ¹æ³æ¶éæ°æ å°Webåºç¨éç/servlet模å¼ï¼è¿æ ·ä½¿ææåå«æ­¤æ¨¡å¼ç请æ±è¢«éå°ç¸åç servlet中ã为äºéæ°æ å°æ­¤æ¨¡å¼ï¼é¦ååºè¯¥å»ºç«ä¸ä¸ªç®åçservletï¼å®æå°ä¸æ¡é误æ¶æ¯ï¼æéå®åç¨æ·å°é¡¶å±é¡µãç¶åï¼ä½¿ç¨servletå servlet-mappingåç´ åéåå«/servlet模å¼ç请æ±å°è¯¥servletãç¨åºæ¸å9-1ç»åºäºä¸ä¸ªç®ç­çä¾å­ã

ç¨åºæ¸å9-1 web.xmlï¼éå®å缺çservlet URLçæå½ï¼

 xml version="1.0" encoding="ISO-8859-1"?>
    
DOCTYPE web-app PUBLIC
         "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
         "http://java.sun.com/dtd/web-app_2_3.dtd"
>

    
<web-app>
    

    
<servlet>
      
<servlet-name>Errorservlet-name>
      
<servlet-class>somePackage.ErrorServletservlet-class>
    
servlet>
    

    
<servlet-mapping>
      
<servlet-name>Errorservlet-name>
      
<url-pattern>/servlet/*url-pattern>
    
servlet-mapping>
    

    <
web-app>

-------------------------------------------------------------------------------------------
解å³ä¹±ç 

web.xmlå éç½®

<!--   è¿æ»¤å¨ -->
 <filter>
  <filter-name>Filter</filter-name>
  <filter-class>
   com.util.EncodingFilter<!-- è¿æ»¤å¨ç±» -->
  </filter-class>
  <init-param>
   <param-name>Encoding</param-name>
   <param-value>gb2312</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>Filter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

EncodingFilter.java

package com.hibernate.util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {
 protected FilterConfig config;

 protected String Encoding = null;

 public void init(FilterConfig config) throws ServletException {

  this.config = config;
  this.Encoding = config.getInitParameter("Encoding");

 }

 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {

  if (request.getCharacterEncoding() == null) {
   if (Encoding != null) {
    request.setCharacterEncoding(Encoding);
    response.setCharacterEncoding(Encoding);
   }
  }
  chain.doFilter(request,response);
 }
 public void destroy() {}
}

OK!!!

----------------------------------------------------------------------------------------------------

å¾ç®åçè¿æ»¤å¨ï¼å°±æ¯ä¸ºäºè®°å½ä¸ä¸ªurlç请æ±æ¶é´ filter:
  1. package com.javaeye.wqf;  
  2. import javax.servlet.*;  
  3.   
  4. public class CounterFilter implements Filter {  
  5.     public void doFilter(ServletRequest request, ServletResponse response,  
  6.             FilterChain chain) throws IOException, ServletException {  
  7.         long start = System.currentTimeMillis();  
  8.         System.out.println("Filter start at "+start);  
  9.         chain.doFilter(request, response);  
  10.         long end = System.currentTimeMillis();  
  11.         System.out.println("Filter end at "+end);  
  12.     } 



  1. <filter>  
  2.     <filter-name>test</filter-name>  
  3.     <filter-class>com.javaeye.wqf.CounterFilter</filter-class>  
  4. </filter>  
  5.   
  6. <filter-mapping>  
  7.     <filter-name>test</filter-name>  
  8.     <url-pattern>/*</url-pattern>  
  9. </filter-mapping> 
ä¸è¬æåµä¸æ¯æ²¡ä»ä¹é®é¢ï¼ä½æ¯å½æä¸è½½ä¸ä¸ªç¨å¾®å¤§çæ件æ¶ï¼è·³åºç¡®è®¤çªå£ï¼å¦æéæ©çæ¯cancelï¼
å°±ä¼åç°filter并没æè¿åï¼ä¹å°±æ¯è¯´
  1. System.out.println("Filter end at "+end); 
并没ææ§è¡. åå æ¯:

chain.doFilter(request, response);  
æ§è¡å°è¿éæ¶ä¼ä»è¿éè°ç¨å©ä¸çfilteråservletï¼æ以è¿ä¸ªè°ç¨å°ä¼æ¯ä¸ä¸ªå¾é¿çè¿ç¨ã
å¨è¿ä¸ªè°ç¨éï¼å°ä¼å®å¨éè¿requeståresonseå»æä½è¿æ¥ï¼åå¾/åéæ°æ®ï¼å¦æè¿æ¥åºç°å¼å¸¸ï¼å°ç´æ¥å¼¹åºException
ä½ ç代ç é没ææè·å¼å¸¸ï¼æ以å¦æåºç°å¼å¸¸ï¼chain.doFilteråé¢çå°±ä¸ä¼æ§è¡ã
å¯ä»¥æchain.doFilteræ¾å°try finallyç»æ中ï¼ä¿è¯åç»­ä¼è¢«æ§è¡




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值