【轉(zhuǎn)】Web小結(jié)

          轉(zhuǎn)自:http://blog.csdn.net/imnol/archive/2007/08/15/1745288.aspx

          一 Servlet
          1、Servlet、ServletConfig:前者對應(yīng)一個Servlet類,后者對應(yīng)的是在web.xml中的配置信息
          (1)Servlet:
          init(ServletConfig):只再類加載并實(shí)例化后會被調(diào)用一次。
          service(ServletRequest,ServletResponse):會被調(diào)用多次
          destroy():只有一次
          getServletConfig()
          getServletInfo()
          (2)ServletCionfig
          getServletName()
          getInitParameter(String):---<servlet><init-param></init-param></servlet>
          getInitParameterNames():
          getServletContext
          注意ServletContext中也有g(shù)etInitParameter(String),它對應(yīng)的是:<context-param>中嵌套的元素
          這個<context-param>和<servlet>標(biāo)簽是同級別的,初始化的是整個應(yīng)用程序

          2、兩個類:
          GenericServlet/HttpServlet:
          GenericServlet實(shí)現(xiàn)Servlet和ServletConfig,HttpServlet繼承自GenericServlet,而且它是和HTTP協(xié)議相關(guān)的。
          (1)GenericServlet:具有一個無參的init方法,方便子類的覆蓋。
          (2)HttpServlet:具有兩個service方法,并且有7個do方法。重寫的時候一般重寫do方法

          3、Servlet配置
          指的是web.xml中的信息,
          <servlet>
           <servlet-name></servlet-name>
           <servlet-class></servlet-class>
           <init-param></init-param>
          </servlet>
          //上面的配置對應(yīng)的可以說就是ServletConfig中的東西
          <servlet-mapping>
           <servlet-name></servlet-name>
           <url-pattern></url-pattern>
          </servlet-mapping>

          4、WEB應(yīng)用程序文件夾的結(jié)構(gòu)
          --WEB-INF
            |
            |------------web.xml
            |------------lib文件夾      JAR文件
            |------------classes       類文件
            |------------tags          TagFile標(biāo)簽文件
          --靜態(tài)資源與JSP文件

          5、請求和響應(yīng):
          (1)請求ServletRequest->HttpServletRequest
          getParameter(String)、
          getHeader()、
          getParameterValues(String)、用于復(fù)選框
          getParameterNames、
          getRemoteAddr、得到遠(yuǎn)程地址
          getLocalAddr、得到本地地址
          getLocale、得到本地化信息
          getSession/getCookies
          getRequestDispatcher

          (2)響應(yīng)ServletResponse->HttpServletResponse
          sendRedirect
          sendError
          setHeader/addHeader/setIntHeader
          getWriter/getOutputStream :這兩個方法絕對不可以同時被調(diào)用!?。。?!
          setContentType/setCharacterEncoding

          6、請求的轉(zhuǎn)發(fā)和響應(yīng)的重定向之間的區(qū)別要搞清楚
          (1)轉(zhuǎn)發(fā):
          A、三種轉(zhuǎn)發(fā)的方法:
          RequestDispatcher.forward/include
          <jsp:include>
          <jsp:forward> 等價于RequestDispatcher.forward();return;
          也就是說使用RequestDispatcher.forward()后,下面的代碼仍然要執(zhí)行,但是<jsp:forward>執(zhí)行后,下面的代碼就不執(zhí)行了。
          pageContext.forward/include
          B、如何得到RequestDispatcher:
          request.getRequestDispatcher
          ServletContext.getRequestDispatcher

          RequestDispatcher的請求轉(zhuǎn)發(fā)、Jsp頁面中指令元素include、以及ServletContext中的getResourceAsStream(String path)
          (用來讀出文件夾中的路徑資源)都可以訪問WEB-INF文件夾,
          比如為了防止用戶訪問一些受保護(hù)的頁面(比如控制器Servlet),把它們放到WEB-INF中去,請求轉(zhuǎn)發(fā)的時候可以去訪問。
          有的時候需要讀取WEB-INF中的一些配置資源,需要ServletContext中的getResourceAsStream方法。
          而且有的網(wǎng)站的各個頁面具有相同的頭圖片和尾圖片,這些東東就可以放到WEB-INF文件夾中用page元素的include指令來包含進(jìn)來。

          注意如果使用ServletContext的RequestDispatcher,要從A應(yīng)用程序轉(zhuǎn)發(fā)請求到B,必須設(shè)定A的crossContext值為true!

          (2)重定向
          response.sendRedirect:比如在注冊結(jié)束后轉(zhuǎn)到下一個頁面的時候,一定要使用重定向改變?yōu)g覽器的URL地址!
          請求的轉(zhuǎn)發(fā)不可能脫離Tomcat服務(wù)器的范圍,如果想要脫離本服務(wù)器的話,只能通過響應(yīng)重定向的方式。重定向要生成一個臨時的響應(yīng),(響應(yīng)
          一旦生成請求就結(jié)束了)瀏覽器接到這個臨時的響應(yīng)后不顯示任何東西而是發(fā)送請求去找新的地址。


          二、JSP
          1、模板和元素:
          對于JSP來說,它是不可執(zhí)行的,必須翻譯成Servlet才能執(zhí)行,必須要容器特殊處理的叫做元素,
          直接打印到輸出流中去的是模板

          元素分為以下幾種:
          1腳本元素
          2指令元素
          3動作元素

          1腳本元素:
          (1)腳本片斷:翻譯后原封不動的放到service方法里面
          (2)腳本聲明:放在類里面,但是是在service方法外面,
          (3)腳本表達(dá)式:原封不動的放到out.print里面去,腳本表達(dá)式不可以加分號。

          內(nèi)置對象絕對不可以在腳本聲明中去用!因為它們的作用是在service方法里面的。

          2指令元素:
          Page指令:
          include指令<%@include file=""%>,包含的這個文件一定是按照純文本的格式去讀取,讀取文件的時候就有編碼的問題,這時候就是pageEncoding
          的設(shè)置問題了。
          taglib指令

          3頁面亂碼:pageEncoding/contentType
          前者設(shè)置jsp頁面讀取的形式,后者設(shè)置一個響應(yīng)的報頭,告訴瀏覽器以什么編碼格式去顯示
          如果沒有設(shè)置pageEncoding而是只設(shè)置了contentType的話,那么pageEncoding要受contentType影響,反之亦然。
          也就是兩者只設(shè)一者的話都會按照一個編碼去顯示!

          無論請求還是響應(yīng),遞交的時候默認(rèn)都是按照iso-8859-1去解碼的。一定要保證讀寫和顯示時候的編碼都是一致的

          4 動作元素:
          <jsp:useBean>:主要作用:開放一個腳本變量并且向作用域里面存一個屬性
          <jsp:setProperty>
          <jsp:getProperty>
          <jsp:forward>
          <jsp:include>
          <jsp:param>
          前六個比較重要!
          <jsp:invoke>
          <jsp:doBody>
          <jsp:plugin>
          <jsp:fallback>
          <jsp:params>

          三、過濾器和監(jiān)聽器
          1、Filter/FilterConfig
          init(FilterConfig)
          doFilter(ServletRequest,ServletResponse,FilterChain)
          destroy()

          <filter>
           <filter-name>
           <filter-class>
          </filter>

          <filter-mapping>
           <filter-name>
           <url-pattern>|<servlet-name>
          </filter-mapping>

          url-pattern相同的過濾器處于一個過濾器鏈上,執(zhí)行的順序完全按照web.xml中的先后順序進(jìn)行。

          2、監(jiān)聽器->ServletContext/HttpSession/ServletRequest
          (1)生命周期
          ServletContextListener:初始化(從BBS中讀取全部討論區(qū)并存儲在應(yīng)用程序的作用域中或是將全部封殺的IP讀出來存儲)和銷毀
          HttpSessionListener/HttpSessionActivationListener
          ServletRequestListener
          (2)屬性的增刪改
          一般是AttributeListener去作的
          <listener>
           <listener-class>包名.類名</listener-class>
          </listener>

          四、四個作用域和九個內(nèi)置對象
          1、頁面作用域?qū)?yīng)的是pageContext,而不是page
          2、內(nèi)置對象:
          pageContext/request/session/application
          out->是JspWriter的實(shí)例,它有緩存,而PrintWriter沒有緩存,在頁面結(jié)束的時候一定會通過響應(yīng)生成PrintWriter去寫出緩存的內(nèi)容!
            如果緩存滿了的話,要看:如果<%@page autoFlush="true"%>,則會自動刷新,如果是false,會拋出異常的!response.getWriter()
            返回的是PrintWriter,不是JspWriter。
          exception->isErrorPage=true的時候才有用
          session:兩種跟蹤機(jī)制:一種是通過客戶端的cookie存儲,另外一種是將sessionId存在服務(wù)器端,
          config->ServletConfig
          page->Object->this
          response:

          五、EL表達(dá)式語言:
          ${}
          1、常量、函數(shù)、變量的表達(dá)式
          2、變量是存儲在某一作用域中的同名的屬性值
          3、函數(shù)是在tld文件中聲明的引用一個類的公共且靜態(tài)的方法
          4、11個內(nèi)置對象
          (1)作用域:pageScope/requestScope/sessionScope/applicationScope
          (2)和頁面通信:pageContext
          (3)請求參數(shù)的:param/paramValues
          (4)報頭:header/headerValues
          (5)Cookies/initParam ---<context-param>
          5、點(diǎn)操作符和[]操作符和empty
          對javaBean,是調(diào)用getter方法,
          對map,是調(diào)用get(Object)方法,
          對作用域,是調(diào)用getAttribute(String)
          對pageContext,也是調(diào)用getter方法,可以得到所有的內(nèi)置對象
          對param,是去取得參數(shù)
          對header,是去拿報頭
          對initParam,是去拿初始化參數(shù)
          []操作符主要是針對數(shù)組


          六 自定義標(biāo)簽
          1、Tag接口(傳統(tǒng)接口系列)

          JspTag
          (1)Tag : doStartTag(返回值是SKIP_BODY/EVAL_BODY_INCLUDE)/doEndTag(返回SKIP_PAGE或是EVAL_PAGE)
          (2)IterationTag->TagSupport
          doAfterBody:EVAL_BODY_AGAIN/SKIP_BODY
          (3)BodyTag->BodyTagSupport
          doInitBody
          doAfterBody:EVAL_BODY_BUFFERED->BodyContent:pageContext里面有一個pushBody,用來將體包起來,這時候再用getOut方法得到
          的不再是JspWriter了,而是bodyContent了。BodyContent的生成是調(diào)用了pushBody方法,這里面又涉及一個getEnclosingWriter(),它
          是BodyContent的一個方法,可以得到它里面包的輸出流JspWriter,但是要注意要是進(jìn)行了一次以上的pushBody但是沒有進(jìn)行popBody的話,那么
          拿出來的就是里面包的BodyContent了,但是由于BodyContent是JspWriter的子類,所以也是符合方法聲明的


          2、SimpleTag接口(簡單接口系列)
          setJspContext()
          setParent()
          setJspBody(JspFragment) 注意JspFragment是標(biāo)簽體,里面絕對不可以有腳本元素的!注冊的時候content元素中要么設(shè)置為empty,
          要么設(shè)置為scriptless,也就是簡單標(biāo)簽的標(biāo)簽體是不可以有腳本元素的!
          doTag()

          JspFragment.invoke(null):直接弄到輸出流中去
          JspFragment.invoke(StringWriter out):將輸出流弄到StringWriter中去,然后調(diào)用out.toString可以將體變成字符串的形式

          3、Tag File標(biāo)簽文件
          .tag
          可以放在/WEB-INF/tags里面或者/META-INF/tags里面也可以
          至于標(biāo)簽文件的tld可以放在WEB-INF中也可以放在META-INF中去,都是沒有問題的
          標(biāo)簽文件描述的是標(biāo)簽處理類,jsp描述的是Servlet,二者都是不可運(yùn)行的,注意標(biāo)簽文件中有<%@tag%>,里面可以設(shè)置不少標(biāo)簽的屬性
          還有<%@attribute %>,<%@taglib%>和<%@include%>也可以用,屬性可以是JspFragment

          比如:<my:first>
            <jsp:attribute>
            </jsp:attribute>
            <jsp:body>
            </jsp:body>
            </my:first>

          <jsp:invoke name=var>運(yùn)算結(jié)果就放在了var里面
          <jsp:doBody>  處理體

          七、JSTL
          一共5個庫,我們說了core、sql、i18n、fn標(biāo)記庫(就是表達(dá)式語言的函數(shù)庫)
          我們沒有講xml的標(biāo)簽庫

          八、國際化與漢字的編碼
          ResourceBundle
          兩種形式:
          1、ListResourceBundle
          2、寫一個Properties文件,里面有一個nativetoacsii命令進(jìn)行,參照前面的筆記轉(zhuǎn)碼
          基名和擴(kuò)展名:起名字都是要有標(biāo)準(zhǔn)的
          Locale:本地化對象
          getBundle方法可以通過傳入基名和本地化對象來處理
          <fmt:bundle>
          <fmt:setBundle>
          <fmt:message>
          漢字編碼:GB2312/GB13000(GBK)/GB18030
          Unicode UCS/UTF-8

          posted on 2007-08-20 13:36 hijackwust 閱讀(228) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          <2007年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(6)

          隨筆檔案(57)

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 山丹县| 九江市| 元谋县| 崇阳县| 福海县| 特克斯县| 曲松县| 罗源县| 广河县| 临桂县| 盖州市| 皮山县| 上虞市| 舞钢市| 东宁县| 古浪县| 图木舒克市| 信阳市| 太仓市| 营山县| 察隅县| 青阳县| 清原| 体育| 双鸭山市| 沙洋县| 泽州县| 临朐县| 滨海县| 陇南市| 通榆县| 西吉县| 大渡口区| 贵溪市| 铜川市| 永登县| 容城县| 营山县| 尼木县| 麻城市| 云浮市|