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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

将servlet数据传到html_Servlet详解(二)

發布時間:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将servlet数据传到html_Servlet详解(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【42】

請求轉發:

問題:服務器在接收到瀏覽器的請求后,僅僅使用一個Servlet 進行請求處理,會造成不同的 Servlet 邏輯代碼冗余,Servlet 的職責不明確。

解決:使用請求轉發。

特點:

  • 一次請求
  • 地址欄信息不改變。
  • Request 對象作用域

問題:使用請求轉發后,不同的 Servlet 之間怎么進行數據的共享呢?或者說數據怎么從一個 servlet 流轉給另外一個 Servlet 呢?

解決:使用 request 對象的作用域

使用:

request.setAttribute(object name,Object value); request.getAttribute(Object obj)

作用:解決了一次請求內的不同 Servlet 的數據(請求數據+其他數據)共享問題。

作用域:基于請求轉發,一次請求中的所有 Servlet 共享。

注意:使用 Request 對象進行數據流轉,數據只在一次請求內有效。

特點:

  • 服務器創建
  • 每次請求都會創建
  • 生命周期一次請求

重定向

問題:如果當前的請求,Servlet 無法進行處理怎么辦?如果使用請求轉發,造成表單數據重復提交怎么辦?

解決:使用重定向

使用:response.sendRedirect(“路徑”).

本地路徑為:uri

網絡路徑為:定向資源的 URL 信息

特點:

  • 兩次請求
  • 瀏覽器地址欄信息改變
  • 避免表單重復提交

轉發和重定向的區別:

Cookie

測試代碼:MyServlet1

public class MyServlet1 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//設置請求編碼格式req.setCharacterEncoding("utf-8");//設置響應編碼格式resp.setContentType("text/html;charset=utf-8");//獲取請求信息String a=req.getParameter("a");String b=req.getParameter("b");//處理請求信息System.out.println(a+":"+b);//響應處理結果//創建Cookie數據Cookie c=new Cookie("b", b);//設置Cookie信息c.setMaxAge(3600*24*3);//設置cookie的有效期。//設置有效路徑c.setPath("/cookie/my2");//響應Cookie數據resp.addCookie(c);//直接響應resp.getWriter().write("我是MyServlet1,處理完畢");//請求轉發//重定向} }

MyServlet2:

public class MyServlet2 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//設置請求編碼格式req.setCharacterEncoding("utf-8");//設置響應編碼格式resp.setContentType("text/html;charset=utf-8");//獲取請求信息//String b=req.getParameter("b");String bc=null; //獲取Cookie數據Cookie[] cookies = req.getCookies();for(Cookie ck:cookies){if("b".equals(ck.getName())){bc=ck.getValue();}}String c=req.getParameter("c");//處理請求信息System.out.println(bc+":"+c);//響應處理結果//直接響應resp.getWriter().write("我是MyServlet2,處理完畢");//請求轉發//重定向} }

Session

問題:Request 對象解決了一次請求內的不同 Servlet 的數據共享問題,那么一個用戶的不同請求的處理需要使用相同的數據怎么辦呢?

解決:使用 session 技術。

原理:用戶使用瀏覽器第一次向服務器發送請求,服務器在接受到請求后,調用對應的 Servlet 進行處理。在處理過程中會給用戶創建一個 session 對象,用來存儲用戶請求處理相關的公共數據,并將此 session 對象的 JSESSIONID 以 Cookie 的形式存儲在瀏覽器中(臨

時存儲,瀏覽器關閉即失效)。用戶在發起第二次請求及后續請求時,請求信息中會附帶 JSESSIONID,服務器在接收到請求后,調用對應的 Servlet 進行請求處理,同時根據 JSESSIONID 返回其對應的 session 對象。

特點:

  • Session 技術是依賴 Cookie 技術的服務器端的數據存儲技術。
  • 由服務器進行創建
  • 每個用戶獨立擁有一個 session
  • 默認存儲時間為 30 分鐘

作用:

解決了一個用戶的不同請求的數據共享問題。

使用:

  • 創建 Session 對象
  • 存儲數據到 session 對象
  • 獲取 session 對象
  • 獲取數據從 session 對象
  • 如果獲取 session 中不存在的數據返回 null。

注意:只要不關閉瀏覽器,并且 session 不失效的情況下,同一個用戶的任意請求在項目的任意Servlet中獲取到的都是同一個session對象。

作用域:一次會話

session學習:

session的使用:

//創建session對象HttpSession session =req.getSession();//存儲數據到session中session.setAttribute(String name, Object value);//獲取session對象HttpSession session =req.getSession();//獲取session中的數據session.getAttribute(String uname);注意:返回的object類型,需要強制轉換//刪除session中的數據session.removeAttribute(String uname);//注意:如果有數據則刪除,沒有則什么都不做。

流程: 1、瀏覽器發起請求到Aservlet,在AServlet中使用req.getSession()獲取Session對象,如果此次請求中沒有SessionID則創建一個新的Session對象,如果有SessionID則將其對應的Session對象返回(前提是該session對象沒有到期),如果session對象到期銷毀了,就算有sessionID也會重新創建一個Session。

2、校驗session是否失效,存儲數據到session對象中或者獲取session中的數據或者刪除session中的數據

特點:session解決了同一個用戶不同請求 的數據共享問題。

session的作用域:瀏覽器不關閉,session不失效,則同一用戶的任意請求獲取的都是同一個session 一次會話

session的設置:

session默認有效時間為30分鐘,可以在tomcat下的web.xml中進行配置

注意:此種配置方式是所有的tomcat下的項目默認為30分鐘

也可以在代碼中使用

session.setMaxInactiveInterval(int seconds);//設置session的有效時間,參數為整數類型的秒

session.invalidate();//強制銷毀session

測試代碼:

UserServlet

public class UserServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//設置請求編碼格式req.setCharacterEncoding("utf-8");//設置響應編碼格式resp.setContentType("text/html;charset=utf-8");//獲取請求信息String uname=req.getParameter("uname");String pwd=req.getParameter("pwd");//處理請求信息//校驗用戶信息if("張三".equals(uname) && "123".equals(pwd)){//登錄成功//響應處理結果}else{//登錄失敗//創建Session并增加登錄失敗標記HttpSession session = req.getSession();session.setAttribute("flag","loginFalse");//響應處理結果(重定向到登錄頁面)resp.sendRedirect("login");}} }

LoginServlet

public class LoginServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//設置請求編碼格式req.setCharacterEncoding("utf-8");//設置響應編碼格式resp.setContentType("text/html;charset=utf-8");//獲取Session中的數據HttpSession session = req.getSession();String str=(session.getAttribute("flag")==null?"":"用戶名或密碼錯誤");//銷毀sessionsession.invalidate();//獲取請求信息//處理請求信息//響應處理結果//直接響應resp.getWriter().write("<html>");resp.getWriter().write("<head>");resp.getWriter().write("</head>");resp.getWriter().write("<body>");resp.getWriter().write("<form action='user' method='get'>");resp.getWriter().write("<font color='red'>"+str+"</font>");resp.getWriter().write(" 用戶名:<input type='text' name='uname' value=''/><br />");resp.getWriter().write(" 密碼:<input type='password' name='pwd' value=''/><br />");resp.getWriter().write("<input type='submit' value='登錄'/><br />");resp.getWriter().write("</form>");resp.getWriter().write("</body>");resp.getWriter().write("</html>");} }

ServletContext 對象:

作用:解決了不同用戶之間的數據共享問題

使用:創建ServletContext對象

ServletContext sc1 = this.getServletContext();ServletContext sc2 =this.getServletConfig().getServletContext();ServletContext sc3=req.getSession().getServletContext();

存儲用戶共享數據 sc.setAttribute(String name,Object value);

獲取用戶共享數據 sc.getAttribute(String name);

刪除共享數據 sc.removeAttribute(String name);

獲取web.xml中的全局配置屬性,作用:將部分動作和源文件進行解耦,我們只需要在xml配置文件中進行相關配置就會改變代碼的執行效果。

sc.getInitParameter(String name);注意返回的是String類型數據

獲取webRoot下的資源流對象

sc.getResourceAsStream(String path);

注意:path為相對路徑,寫從webRoot開始查找資源的路徑即可。

獲取webRoot下的資源絕對路徑 sc.getRealPath(String path);

注意:path為相對路徑,寫從webRoot開始查找資源的路徑即可。

特點:服務器創建,被所有用戶共享

生命周期:服務器開啟到服務器關閉

ServletConfig 對象:

問題:使用 ServletContext 對象可以獲取 web.xml 中的全局配置文件,在 web.xml 中每個 Servlet 也可以進行單獨的配置,那么該怎么獲取配置信息呢?

解決:使用 ServletConfig 對象

作用:ServletConfig 對象是 Servlet 的專屬配置對象,每個 Servlet 都

單獨擁有一個 ServletConfig 對象,用來獲取 web.xml 中的配置信息。

使用:a、獲取 ServletConfig 對象 b、 獲取 web.xml 中 servlet 的配置信息

總結

以上是生活随笔為你收集整理的将servlet数据传到html_Servlet详解(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。