日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JSP脚本 9大内置对象

發(fā)布時(shí)間:2025/3/20 javascript 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSP脚本 9大内置对象 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)介

  • JSP腳一包含9個(gè)內(nèi)置對(duì)象,即JSP腳本規(guī)范對(duì)它們進(jìn)行了初始化,可以直接使用。
  • JSP內(nèi)置對(duì)象的實(shí)質(zhì):request與response是對(duì)應(yīng)Servlet的_jspService()方法的形參,其它則是該方法的局部變量。
  • 1.application

  • application對(duì)象是ServletContext的實(shí)例。
  • 在Servlet中沒有application對(duì)象,可通過如下代碼獲取
  • ServletContext application = getServletConfig().getServletContext();
  • application可用于在JSP腳本中獲取web.xml中使用<context-param>配置的參數(shù)。如:
  • <% String user = application.getInitParameter("user");%>

    這也能說明<context-param>配置的參數(shù)對(duì)整個(gè)web應(yīng)用有效。對(duì)應(yīng)web.xml部分代碼:

    <context-param><param-name>user</param-name><param-value>zhangchunling</param-value> </context-param>

    4. Jsp與Servlet之間如何交換數(shù)據(jù)?
    Web服務(wù)器提供了4個(gè)類似Map結(jié)構(gòu)的容器:application、session、request、page

    2. config

  • config對(duì)象是ServletConfig的實(shí)例,用得較少。
  • 配置JSP也是在web.xml中配置的(比如為Jsp頁面設(shè)置另一個(gè)URL)。config對(duì)象可在JSP腳本中獲取web.xml中使用<init-param>配置的對(duì)數(shù)。
    web.xml中對(duì)應(yīng)的配置JSP的代碼:
  • <servlet><servlet-name>config</servlet-name><jsp-file>/configTest.jsp</jsp-file><init-param><param-name>keyName</param-name><param-value>keyValue</param-value></init-param> </servlet> <servlet-mapping><servlet-name>config</servlet-name><url-pattern>/config</url-pattern><!-- config是可訪問configTest.jsp的另一路徑--> </servlet-mapping>

    對(duì)應(yīng)JSP腳本代碼:

    <%=config.getInitParameter("keyName")%> //以上結(jié)果是:keyValue
  • 注意
    如果JSP頁面希望獲取web.xml中的配置信息,則必須通過為該JSP配置的路徑(/config)來訪問該JSP,因?yàn)橹挥羞@親,jsp頁面才會(huì)讓配置對(duì)數(shù)起作用。
    如:localhost:8080…/config的訪問結(jié)果是:keyValue,
    而localhost:8080…/configTest.jsp訪問的結(jié)果是:null。
  • 3. exception

  • exception對(duì)象是Throwable的實(shí)例。
  • exception對(duì)象僅在異常處理頁面有效,它常用的兩個(gè)方法:getMessage()和printStackTrace();
  • Jsp頁面生成的Servlet類里的catch部分由異常處理頁面生成負(fù)責(zé),catch塊里的異常對(duì)象就是exception對(duì)象。
  • JSP的異常處理機(jī)制對(duì)JSP聲明不起作用,依然需要處理checked異常。
  • 當(dāng)jsp頁面page指令的isErrorPage屬性為true時(shí),該jsp頁面就是異常處理頁面,所以該頁面也就會(huì)提供exception對(duì)象。
  • 4.out

  • out對(duì)象是JspWriter的實(shí)例
  • out對(duì)象代表一個(gè)頁面輸出流,輸出內(nèi)容到HTML頁面。如out.println("<h1>h1號(hào)的字體</h1>");的結(jié)果是:<h1>h1號(hào)的字體</h1>
  • 輸出表達(dá)式<%=…%>可替代out,因?yàn)檩敵霰磉_(dá)式的底層就是out.write(“…”);
  • 5.pageContext

  • pageContext對(duì)象是PageContext的實(shí)例??稍L問application、session、request、page的變量。
  • 添加值的兩個(gè)方法:
    setAttribute(String name);
    setAttribute(String name,int scope); //取指定范圍內(nèi)的name屬性的值。scope代表4個(gè)范圍:
    pageContext.APPLICATION_SCOPE,值為4
    pageContext.SESSION_SCOPE,值為3
    pageContext.REQUEST_SCOPE,值為2
    pageContext.PAGE_SCOPE,值為1
  • 兩個(gè)對(duì)應(yīng)的取值的方法:
    getAttribute(String name);
    getAttribute(String name,int Scope); //取指定范圍的name屬性的值
  • pageContext對(duì)象可獲取的其他內(nèi)置對(duì)象:
  • 對(duì)象名對(duì)象類型獲取方法
    requestServletRequestgetRequest()
    responseServletResponsegetResponse()
    configServletConfiggetServletConfig()
    applicationServletContextgetServletContext()
    sessionHttpSessiongetSession()

    6. request

  • request對(duì)象是HttpServletReques的實(shí)例,每個(gè)request對(duì)象都封裝著一次用戶的請(qǐng)求,且所有請(qǐng)求參數(shù)都封裝在其中。
  • 服務(wù)器通過JSP或Servlet解析請(qǐng)求頭或請(qǐng)求參數(shù),而JSP或Servlet獲取請(qǐng)求參數(shù)或請(qǐng)求頭的途徑就是request。我們有時(shí)會(huì)獲取請(qǐng)求頭的內(nèi)容,所以request很重要。
  • 不是每個(gè)form表單都會(huì)生成請(qǐng)求參數(shù),而是有name屬性的表單才會(huì)生成。表單和請(qǐng)求參數(shù)的關(guān)系注意如下幾點(diǎn):
  • 一個(gè)name屬性對(duì)應(yīng)一個(gè)請(qǐng)求參數(shù)。
  • 如果有多個(gè)name屬性同名,則請(qǐng)求參數(shù)將以逗號(hào)拼接成串生成一個(gè)請(qǐng)求參數(shù)。
  • 如果某個(gè)name表單域里設(shè)置了disabled=”disabled”,則該表單域不再生成請(qǐng)求參數(shù)。
  • request執(zhí)行forward或include
  • 使用:getRequestDispatcher(String path)方法返回的RequestDispatcher實(shí)例對(duì)象后調(diào)用forward()或include()方法實(shí)現(xiàn),path以斜線開頭。
  • 將a.jsp頁面include到本頁面:
    getRequestDispatcher(“a.jsp”).include(request,response);
  • 轉(zhuǎn)發(fā)請(qǐng)求到b.jsp頁面:
    getRequestDispatcher(“b.jsp”).forward(request,response);
  • POST請(qǐng)求與GET請(qǐng)求
  • GET方式請(qǐng)求:直接在地址欄里輸入訪問地址的請(qǐng)求,以及提交form表單默認(rèn)的請(qǐng)求(或是設(shè)form元素的method為get)都是GET請(qǐng)求。GET方式請(qǐng)求在地址欄里能看到請(qǐng)求參數(shù)名和值(不好),且該方式傳送數(shù)據(jù)量小,一般不大小2KB。
  • POST方式請(qǐng)求:要提交的表單的form元素的method屬性設(shè)為post的請(qǐng)求。該種方式請(qǐng)求傳輸?shù)臄?shù)據(jù)量比GET方式大,取決于服務(wù)器的限制。POST請(qǐng)求要發(fā)送的請(qǐng)求參數(shù)和對(duì)應(yīng)的值都放在HTML HEADER中傳輸,地址欄里看不到,相對(duì)安全。
  • GET方式請(qǐng)求處理中文參數(shù)亂碼:
    將得到的內(nèi)容用URLDecoder類的decode()方法,
    即:String dstr = URLDecoder.decode(request.getParameter(“userName”), “UTF-8”);
  • POST方式請(qǐng)求處理中文參數(shù)亂碼:
    需要在獲取請(qǐng)求參數(shù)之前調(diào)用setCharacterEncoding()方法設(shè)置編碼的字符集,
    即:request.setCharacterEncoding(“GBK”);
    String name = request.getParameter(“userName”);
  • 可在獲取請(qǐng)求參數(shù)值后對(duì)亂碼的參數(shù)值重新編碼得到正確的值。方法是將值轉(zhuǎn)換成字節(jié)數(shù)組,然后重新解碼成字符串:
    String name = request.getParameter(“userName”);
    byte[] b = name.getBytes(“ISO-8859-1”);
    String rightName = new String(b,”UTF-8”);
  • 獲取cookie
    request.getCookies()方法能獲取請(qǐng)求里的所有cookie組成的數(shù)組。通過判斷cookie的名字判斷是哪個(gè)cookie。
  • 7.response

  • response是HttpServletResponse的實(shí)例,代表服務(wù)器端對(duì)客戶端的響應(yīng)
  • response有響應(yīng)、重定向、向客戶端添加cookie等作用。
  • 一般使用out對(duì)象生成簡(jiǎn)單的響應(yīng),但out對(duì)象是Writer類的子類,而Writer是字符流,無法輸出字節(jié)流。所以如果是圖片(或是PDF文檔,Excel)這類字節(jié)流還是得需要response作為響應(yīng)輸出。
  • 重定向:response.sendRedirect(“c.jsp”);
    與forward不同的是,因?yàn)橹囟ㄏ驅(qū)⑸傻诙握?qǐng)求,所以會(huì)丟失第一次請(qǐng)求的所有請(qǐng)求參數(shù)和request范圍的屬性。
  • 添加cookie
  • //創(chuàng)建Cookie對(duì)象 Cookie c = new Cookie("username","zhangchunling"); //設(shè)置Cookie對(duì)象的生命周期:1天,如果設(shè)置生命周期,則Cookie會(huì)隨瀏覽器關(guān)閉而消失 c.setMaxAge(24*60*60); //向客戶端添加Cookie對(duì)象 response.addCookie(c);

    Cookie值默認(rèn)不允許出現(xiàn)中文字符,如果有中文字符,則需要編碼:

    Cookie c = new Cookie("username",java.net.URLEncoder.encode("張春玲","GBK")); c.setMaxAge(24*3600); response.addCookie(c);

    在得到cookie后,又用java.netURLDecoder解碼cookie值即可。

    8. session

  • session對(duì)象是HttpSession的實(shí)例,代表一次用戶會(huì)話
    一次用戶會(huì)話:瀏覽器連接服務(wù)開始到與服務(wù)器斷開的過程。所以瀏覽器關(guān)閉,session就消失。
  • session常用于跟蹤用戶的會(huì)話信息,如判斷是否登錄或是購物車購買的商品等。其他信息一般不會(huì)放在session里。
  • session機(jī)制通常用于保存客戶端的狀態(tài)信息,這些狀態(tài)信息需要被保存到Web服務(wù)器的硬盤上,所以要求session里的屬性值必須是可序列化的,否則會(huì)有不可序列化的異常。session里的屬性值可以是任何可序列化的Java對(duì)象。
  • 每個(gè)session都有一個(gè)ID,當(dāng)服務(wù)器與客戶建立會(huì)話后,session就會(huì)在內(nèi)存中保存一個(gè)jsessionId,然后放在響應(yīng)的header里給客戶端保存,客戶端繼續(xù)訪問時(shí),會(huì)將jsessionId封裝進(jìn)request當(dāng)中,這樣服務(wù)器就能判斷是新的會(huì)話還是已建立的會(huì)話。
    所以,只要每次請(qǐng)求把服務(wù)器生成的jsessionId帶過去,服務(wù)器端就會(huì)認(rèn)為是同一個(gè)會(huì)話。
  • 9. page

    page對(duì)象代表頁面本身(即Servlet中的this),沒多大用處,它的類型就是生成的Servlet類,能用page的地方就能用this。

    總結(jié)

    以上是生活随笔為你收集整理的JSP脚本 9大内置对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。