1. 程式人生 > >7 Servlet交互和作用域對象

7 Servlet交互和作用域對象

set 防止 isp strong 地址欄 out 獲取數據 響應 請求轉發

1.多個web組件進行跳轉(加上/就是絕對路徑)

WEB組件跳轉的三種方式:(組件包括Servlet,jsp,Filiter)
     ①.請求轉發(forword)
       request對象.getRequestDispatcher(String path).forword(request,response);
        特點:
         地址欄不變
                 AServlet和BServlet共享同一個請求(共享請求數據)
         頁面響應的數據是有BServlet決定的
         不能跨域訪問
         可以訪問WEB-INF下面的資源
 ②.URL重定向(redirect)
         response對象.sendRedirect(String path);
     特點:
          地址欄中的地址改變
          AServlet和BServlet各自發一個請求(不能共享請求數據)
          頁面響應的數據是由BServlet決定的
          可以跨域訪問
          不能訪問WEB-INF下面的資源

              1.1使用請求轉發
           需要在同一個請求對象中共享數據
           需要訪問WEB-INF下面的資源
      1.2.使用URL重定向
           需要跨域訪問
           使用URL重定向可以防止表單重復提交

          1.3.請求包含(include)

2.需要多個頁面跳轉共享數據要依賴作用域對象(web組件的3大作用域)

  對象名稱                   數據類型                 對象描述

 request                        HttpServletRequest    在一個請求中共享數據
 session                        HttpSession           在一個會話共享數據
(ServletContext)application     ServletContext      在一個應用中共享數據

 所有作用域對象設置/獲取數據一樣:
     設置共享數據:
         作用域對象.setAttribute(String name,Object value);
     獲取共享數據:
         作用域對象.getAttribute(String name);

   各自的作用共享的數據只能在各自的作用域中取出來,不能跨作用域取共享數據

3.ServletContext接口和常用方法

     接口ServletContext就是上下文
 獲取ServletContext對象:
         ServletContext ctx=request.getSession().getServletContext();
  獲取當前應用的上下文路徑:
           String path=ctx.getContextPath();
  獲取當前項目的根路徑:
           ctx.getRealPath(String name);
  獲取全局的初始化參數:
           ctx.getInitParameter(String name);
      獲取局部的初始化參數:
           super.getInitParameter(String name);

全局初始化參數的配置:
      <context-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
 </context-param>

4.JSP

 ①.JSP的原理:
   JSP文件-->Servlet類-->編譯成字節碼-->解釋執行

   JSP底層使用Servlet輸出流輸出HTML代碼片段

  JSP語法:
          輸出數據到頁面上:<%= %>
      相當於在servlet中的service方法寫java代碼:<% %>

 ②.JSP的三大指令:
        page/include/taglib
  指令的語法:
       <%@  指令名稱  屬性名稱="屬性值"%>
      2. include(靜態包含,包含其他組件)
            語法:<%@ include file=""%>
        動態包含:<jsp:include page=""/>
          3.taglib(引入外部標簽)
          <%@taglib uri="" prefix=""%>
 ③.JSP的九大內置對象
        pageContext   在當前頁面共享數據
    request       在一個請求共享數據
    session        在一個會話中共享數據
    application     在一個應用中共享數據
    response        響應對象
    exception       異常對象
    config          獲取初始化配置參數對象
    out            輸出流對象
    page          當前servlet對象

 ④.JSP的四大作用域
    pageContent
request
session
application
 ⑤.JSP的動作元素
        <jsp:include/>
    <jsp:forward/>
    <jsp:param/>:在包含和轉發時,利用該標簽傳遞請求參數

       靜態包含和動態包含的區別:
          靜態包含在翻譯的時候,將多個JSP合並翻譯成一個Servlet
      動態包含在翻譯時,每個jsp文件都會翻譯成對應的Servlet,
      在程序運行加載到JVM中的時候動態合並
       動態包含可以傳遞參數
 ⑥.改JSP的模版文件
     JSP Files-->Templates-->New JSP File(html)

7 Servlet交互和作用域對象