<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

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

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

    3、Servlet配置
    指的是web.xml中的信息,
    <servlet>
     <servlet-name></servlet-name>
     <servlet-class></servlet-class>
     <init-param></init-param>
    </servlet>
    //上面的配置對(duì)應(yīng)的可以說(shuō)就是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、請(qǐng)求和響應(yīng):
    (1)請(qǐng)求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 :這兩個(gè)方法絕對(duì)不可以同時(shí)被調(diào)用!!!!!
    setContentType/setCharacterEncoding

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

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

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

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


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

    元素分為以下幾種:
    1腳本元素
    2指令元素
    3動(dòng)作元素

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

    內(nèi)置對(duì)象絕對(duì)不可以在腳本聲明中去用!因?yàn)樗鼈兊淖饔檬窃趕ervice方法里面的。

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

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

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

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

    三、過(guò)濾器和監(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相同的過(guò)濾器處于一個(gè)過(guò)濾器鏈上,執(zhí)行的順序完全按照web.xml中的先后順序進(jìn)行。

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

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

    五、EL表達(dá)式語(yǔ)言:
    ${}
    1、常量、函數(shù)、變量的表達(dá)式
    2、變量是存儲(chǔ)在某一作用域中的同名的屬性值
    3、函數(shù)是在tld文件中聲明的引用一個(gè)類的公共且靜態(tài)的方法
    4、11個(gè)內(nèi)置對(duì)象
    (1)作用域:pageScope/requestScope/sessionScope/applicationScope
    (2)和頁(yè)面通信:pageContext
    (3)請(qǐng)求參數(shù)的:param/paramValues
    (4)報(bào)頭:header/headerValues
    (5)Cookies/initParam ---<context-param>
    5、點(diǎn)操作符和[]操作符和empty
    對(duì)javaBean,是調(diào)用getter方法,
    對(duì)map,是調(diào)用get(Object)方法,
    對(duì)作用域,是調(diào)用getAttribute(String)
    對(duì)pageContext,也是調(diào)用getter方法,可以得到所有的內(nèi)置對(duì)象
    對(duì)param,是去取得參數(shù)
    對(duì)header,是去拿報(bào)頭
    對(duì)initParam,是去拿初始化參數(shù)
    []操作符主要是針對(duì)數(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里面有一個(gè)pushBody,用來(lái)將體包起來(lái),這時(shí)候再用getOut方法得到
    的不再是JspWriter了,而是bodyContent了。BodyContent的生成是調(diào)用了pushBody方法,這里面又涉及一個(gè)getEnclosingWriter(),它
    是BodyContent的一個(gè)方法,可以得到它里面包的輸出流JspWriter,但是要注意要是進(jìn)行了一次以上的pushBody但是沒有進(jìn)行popBody的話,那么
    拿出來(lái)的就是里面包的BodyContent了,但是由于BodyContent是JspWriter的子類,所以也是符合方法聲明的


    2、SimpleTag接口(簡(jiǎn)單接口系列)
    setJspContext()
    setParent()
    setJspBody(JspFragment) 注意JspFragment是標(biāo)簽體,里面絕對(duì)不可以有腳本元素的!注冊(cè)的時(shí)候content元素中要么設(shè)置為empty,
    要么設(shè)置為scriptless,也就是簡(jiǎn)單標(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個(gè)庫(kù),我們說(shuō)了core、sql、i18n、fn標(biāo)記庫(kù)(就是表達(dá)式語(yǔ)言的函數(shù)庫(kù))
    我們沒有講xml的標(biāo)簽庫(kù)

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

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


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


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

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(6)

    隨筆檔案(57)

    友情鏈接

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产午夜不卡AV免费| 国产乱子伦精品免费女| 毛茸茸bbw亚洲人| 边摸边吃奶边做爽免费视频99 | **aaaaa毛片免费同男同女| 亚洲精品视频在线观看你懂的| 亚洲成AV人影片在线观看| 免费AA片少妇人AA片直播| 久久精品国产亚洲av日韩| 人妻无码一区二区三区免费| 中文字幕亚洲精品| 在线观看无码AV网站永久免费| 亚洲精品永久在线观看| 男人的天堂亚洲一区二区三区 | 精选影视免费在线 | 亚洲区小说区激情区图片区| 久久一区二区三区免费播放 | 1000部拍拍拍18免费网站| 亚洲一区二区三区在线观看网站| 亚洲XX00视频| 最近中文字幕免费完整| 久久精品国产亚洲AV天海翼| 国产精品亚洲w码日韩中文| 最近中文字幕2019高清免费| AAA日本高清在线播放免费观看| h视频在线免费观看| 亚洲国产午夜精品理论片| 免费人成视频在线观看免费| 添bbb免费观看高清视频| 在线中文高清资源免费观看| jjzz亚洲亚洲女人| 伊人久久国产免费观看视频| 美女内射无套日韩免费播放| 学生妹亚洲一区二区| 免费在线看v网址| 98精品全国免费观看视频| a毛片免费全部在线播放**| 亚洲午夜一区二区电影院| 91亚洲国产成人久久精品| 亚洲日本香蕉视频观看视频| 亚洲熟伦熟女新五十路熟妇 |