一路拾遺
          Collect By Finding All The Way ......
          posts - 81,comments - 41,trackbacks - 0

          JSP與 servlet之間的傳值有兩種情況:JSP -> servlet, servlet -> JSP。
          通過對象 request和 session (不考慮 application)完成傳值。

          一、JSP -> servlet
          JSP頁面有3種方法向 servlet傳值: form表單、URL 、其他

          <!-- JSP page -->
          ...
          <%......
                 session.setAttribute("testSession","Hello session");
                 reqeust.setAttribute("testRequest","Hello request");
          %>
          <a href="JspServlet?action=toServlet">click me</a>
          <form action="JspServlet?action=toServlet" method="post" name="form">
                 <input name="username" type="test" />
                 <input type="submit" value="submit">
          </form>
          ...

          1、對于該JSP頁面 form表單的內(nèi)容,如 <input>標(biāo)簽,在 servlet可用 request.getParameter("username");獲取。
          2、URL:比如這里的 <a>標(biāo)簽的 href屬性與 <form>標(biāo)簽的 action屬性的值 "JspServlet?action=toServlet",在 servlet同樣用 request.getParameter("action")獲取;所要注意的是這里的 url 要和 servlet在web.xml里的 <url-pattern>標(biāo)簽的路徑所對應(yīng)。這部分后面會(huì)提到。
          3、java片段代碼,servlet只能接到 session.setAttribute("testSession","Hello session")的內(nèi)容,而接不到 request的內(nèi)容。在 servlet里用 request.getSession().getAttribute("testSession")獲取 session內(nèi)容。

          二、Servlet
          1、關(guān)于 servlet,首先要提到它在 web.xml里的注冊內(nèi)容,如

              <servlet-name>JspServlet1</servlet-name>
                  <servlet-class>com.demo.JspServletDemo</servlet-class>
              </servlet>
              <servlet-mapping>
                  <servlet-name>JspServlet1</servlet-name>
                  <url-pattern>/JspServlet</url-pattern>
              </servlet-mapping>

              <servlet-name>JspServlet2</servlet-name>
                  <servlet-class>com.demo.JspServletDemo</servlet-class>
              </servlet>
              <servlet-mapping>
                  <servlet-name>JspServlet2</servlet-name>
                  <url-pattern>/admin/JspServlet</url-pattern>
              </servlet-mapping>

          假如 project name 是 jsp2servlet,則該 project根目錄的 Context是 /jsp2servlet,在地址欄里顯示是 http://localhost:8080/jsp2servlet/;
          在 project 根目錄下有 admin目錄,對應(yīng)的 Context是/admin/jsp2servlet,在地址欄里顯示是 http://localhost:8080/jsp2servlet/admin,
          在這兩個(gè)目錄下的 jsp 都想轉(zhuǎn)到 com.demo.JspServletDemo類做處理,這時(shí)的 url需要在 web.xml注冊兩次。
              1)在 http://localhost:8080/jsp2servlet/ 目錄下的 jsp 頁面 JspServlet1,url應(yīng)寫為 "JspServlet"
              2)在 http://localhost:8080/jsp2servlet/admin/ 目錄下的 jsp 頁面訪問 JspServlet2,url應(yīng)寫為 "admin/JspServlet"

          2、在 servlet直接用 request對象,得到發(fā)送來的請求內(nèi)容;用 request.getSession(),得到 session對象,從而得到會(huì)話內(nèi)容。

          這里的 request.getSession()的參數(shù)為 boolean 類型,該方法意思可理解為:

          session可以認(rèn)為是每一個(gè)IE進(jìn)程對應(yīng)一個(gè)會(huì)話(新開一個(gè)IE進(jìn)程就可以對應(yīng)兩個(gè)會(huì)話的),getSession都是返回當(dāng)前用戶的會(huì)話對象,參數(shù)的區(qū)別在于:
          參數(shù)為true (默認(rèn)),則如果“當(dāng)前用戶的會(huì)話對象”為空(第一次訪問時(shí))則創(chuàng)建一個(gè)新的會(huì)話對象返回;
          參數(shù)為false,則如果“當(dāng)前用戶的會(huì)話對象”為空,則返回 null (即不自動(dòng)創(chuàng)建會(huì)話對象)。

          利用這個(gè)方法可以判斷 session是否過期,如下:

          if(request.getSession(false)==null)
             System.out.println("Session has been invalidated!");
          else
             System.out.println("Session is active!");
          三、Servlet -> JSP
          從 servlet轉(zhuǎn)到 jsp不外乎兩種方法,重定向 和 url轉(zhuǎn)發(fā)

          1、重定向 ( Redirect):是路徑的跳轉(zhuǎn),內(nèi)容和 url都改變。不允許帶 request參數(shù)( session參數(shù)可以),即不允許在 servlet里給 request對象使用setAttribute方法傳給下一頁面。在 servlet里使用 response.sendRedirect(url) 方法。注意這里的 url前不帶斜線 /,如 response.sendRedirect(”test.jsp“)

          2、url轉(zhuǎn)發(fā) ( Forward):是頁面的跳轉(zhuǎn),頁面內(nèi)容發(fā)生改變,url不變。可以帶 request和 session參數(shù)。在 servlet里使用 getServletConfig().getServletContext().getRequestDispatcher(url).forward(request, response)。而這里的 url前需要帶斜線 /,如getServletConfig().getServletContext().getRequestDispatcher(”/test.jsp“).forward(request, response)

           

          posted on 2009-04-19 18:27 胖胖泡泡 閱讀(689) 評論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 二手房| 河池市| 西乌珠穆沁旗| 渭南市| 泸州市| 旬邑县| 临汾市| 德惠市| 双辽市| 玛多县| 紫阳县| 济阳县| 阿拉善右旗| 桦南县| 韩城市| 塔河县| 仁布县| 福清市| 聂荣县| 定襄县| 合川市| 读书| 郸城县| 定边县| 翁牛特旗| 广丰县| 遵义县| 孟村| 邯郸市| 金湖县| 昌邑市| 册亨县| 合作市| 都匀市| 色达县| 怀化市| 嘉荫县| 屯留县| 普兰县| 万盛区| 辉南县|