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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【Servlet】ServletContext、ServletConfig对象学习、用户登录系统完善

發布時間:2024/2/28 windows 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Servlet】ServletContext、ServletConfig对象学习、用户登录系统完善 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總結:request、cookie、session、context的區別

這四個對象有不同級別的作用域和生命周期。

(1)request:解決了一次請求內的數據共享問題(作用域:一次請求)

req.setAttribute("uname", "張三"); // 在servlet中添加request參數

(2)cookie:解決了同一用戶不同請求的數據共享的問題(作用域:一次會話/或者設置定時)

Cookie c = new Cookie("uname", "張三"); // 創建Cookie對象c.setPath("CookieServlet"); // 指定共享cookie的Servletresp.addCookie(c); // 將cookie添加到響應對象中

(3)session:解決了同一用戶不同請求的數據共享問題(作用域:會話創建->瀏覽器關閉)

// session 技術是依賴Cookie 技術的服務器端的數據存儲技術// cookie存儲在本地瀏覽器,而session存儲在服務器HttpSession hs=req.getSession(); // 在servlet中獲取session對象hs.setAttribute("uname","張三"); // 數據存儲

(4)context:解決了不同用戶的數據共享問題(作用域:服務器啟動->服務器關閉)

ServletContext sc=this.getServletContext(); // 在servlet中獲取context對象sc.setAttribute("str", "ServletContext對象學習");// 數據存儲

ServletContext / ServletConfig 對象學習

通過前面知識點的學習,我們對于請求的處理已經可以說比較靈活了,但是還不夠。我們再介紹兩個重要的對象:ServletContext 對象和ServletConfig 對象


ServletContext 對象:

問題:
Request 解決了一次請求內的數據共享問題,session 解決了用戶不同請求的數據共享問題,那么不同的用戶的數據共享該怎么辦呢?

解決:
使用ServletContext 對象

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

原理:
ServletContext 對象由服務器進行創建,一個項目只有一個對象。不管在項目的任意位置進行獲取得到的都是同一個對象,那么不同用戶發起的請求獲取到的也就是同一個對象了,該對象由用戶共同擁有。

特點:
服務器進行創建
用戶共享
一個項目只有一個

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

作用域:
項目內

使用:
獲取ServletContext 對象
使用作用域進行共享數據流轉
獲取web.xml 中的全局配置
獲取webroot 下項目資源流對象
獲取webroot 下資源絕對路徑

案例:
網頁瀏覽器次數統計,詳見源碼

代碼示例

(1)ServletContextServlet.java

package com.bjsxt.servlet;import java.io.IOException; import java.io.InputStream;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /*** ServletContext對象學習:* 問題:* 不同的用戶使用相同的數據* 解決:* ServletContext對象* 特點:* 服務器創建* 用戶共享* 作用域:* 整個項目內* 生命周期:* 服務器啟動到服務器關閉* 使用:* 獲取ServletContext對象* //第一種方式:ServletContext sc=this.getServletContext();//第二種方式:ServletContext sc2=this.getServletConfig().getServletContext();//第三種方式:ServletContext sc3=req.getSession().getServletContext();* 使用ServletContext對象完成數據共享* //數據存儲* sc.setAttribute(String name, Object value);* //數據獲取* sc.getAttribute("str") 返回的是Object類型* 注意:* 不同的用戶可以給ServletContext對象進行數據的存取。* 獲取的數據不存在返回null。* 獲取項目中web.xml文件中的全局配置數據* sc.getInitParameter(String name); 根據鍵的名字返回web.xml中配置的全局數據的值,返回String類型。* 如果數據不存在返回null。* sc.getInitParameterNames();返回鍵名的枚舉* 配置方式:注意 一組<context-param>標簽只能存儲一組鍵值對數據,多組可以聲明多個 <context-param>進行存儲。* <context-param><param-name>name</param-name><param-value>zhangsan</param-value></context-param>作用:將靜態數據和代碼進行解耦。獲取項目webroot下的資源的絕對路徑。String path=sc.getRealPath(String path); 獲取的路徑為項目根目錄,path參數為項目根目錄中的路徑獲取webroot下的資源的流對象InputStream is = sc.getResourceAsStream(String path);注意:此種方式只能獲取項目根目錄下的資源流對象,class文件的流對象需要使用類加載器獲取。path參數為項目根目錄中的路徑* * * @author MyPC**/ public class ServletContextServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//獲取ServletContext對象//第一種方式:ServletContext sc=this.getServletContext();//第二種方式:ServletContext sc2=this.getServletConfig().getServletContext();//第三種方式:ServletContext sc3=req.getSession().getServletContext();System.out.println(sc==sc2);System.out.println(sc==sc3);//使用ServletContext對象完成數據共享//數據存儲sc.setAttribute("str", "ServletContext對象學習");//獲取項目web.xml的全局配置數據String str = sc.getInitParameter("name2");System.out.println("全局配置參數:"+str);//獲取項目根目錄下的資源的絕對路徑//String path="D:\\apache-tomcat-7.0.56\\webapps\\sc\\doc\\1.txt";String path=sc.getRealPath("/doc/1.txt");System.out.println(path);//獲取項目根目錄下資源的流對象InputStream is = sc.getResourceAsStream("/doc/1.txt");} }

(2)ServletContextServlet2.java

package com.bjsxt.servlet;import java.io.IOException;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class ServletContextServlet2 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//創建ServletContext對象ServletContext sc=this.getServletContext();//獲取數據System.out.println("ServletContextServlet2.service()"+sc.getAttribute("str"));} }

ServletConfig 對象:

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

解決:
使用ServletConfig 對象

作用:
ServletConfig 對象是Servlet 的專屬配置對象,每個Servlet 都單獨擁有一個ServletConfig 對象,用來獲取web.xml 中的配置信息。

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

代碼示例

(1)web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>07-ServletConfig</display-name><servlet><servlet-name>ServletConfigServlet</servlet-name><servlet-class>com.bjsxt.servlet.ServletConfigServlet</servlet-class><init-param><param-name>config</param-name> <!-- 在這里(項目內)配置ServletConfig需要獲取的內容:鍵 --><param-value>utf-8</param-value> <!-- 在這里(項目內)配置ServletConfig需要獲取的內容:值 --></init-param></servlet><servlet-mapping><servlet-name>ServletConfigServlet</servlet-name><url-pattern>/sg</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list> </web-app>

(2)ServletConfigServlet.java

package com.bjsxt.servlet;import java.io.IOException;import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /*** ServletConfig對象學習:* 問題:* 如何獲取在web.xml中給每個servlet單獨配置的數據呢?* 解決:* 使用ServletConfig對象* 使用:* 獲取ServletConfig對象* 獲取web.xml中的配置數據* @author MyPC**/ public class ServletConfigServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//獲取ServletConfig對象ServletConfig sc=this.getServletConfig();//獲取web.xml中的配置數據String code=sc.getInitParameter("config");System.out.println(code);} }

LoginServlet檢測思路:

* 請求中文亂碼解決:* 1、使用String進行數據重新編碼* uname=new String(uname.getBytes("iso8859-1"),"utf-8");* 2、使用公共配置* get方式:* 步驟一:req.setCharacterEncoding("utf-8");* 步驟二:* 在tomcat的目錄下的conf目錄中修改server.xml文件:在Connector標簽中增加屬性 useBodyEncodingForURI="true"* post方式:* req.setCharacterEncoding("utf-8");* Servlet流程總結:* 瀏覽器發起請求到服務器(請求)* 服務器接受瀏覽器的請求,進行解析,創建request對象存儲請求數據* 服務器調用對應的servlet進行請求處理,并將request對象作為實參傳遞給servlet的方法* servlet的方法執行進行請求處理* //設置請求編碼格式* //設置響應編碼格式* //獲取請求信息* //處理請求信息* //創建業務層對象* //調用業務層對象的方法* //響應處理結果*請求轉發學習:* 作用:實現多個servlet聯動操作處理請求,這樣避免代碼冗余,讓servlet的職責更加明確。* 使用:* req.getRequestDispatcher("要轉發的地址").forward(req, resp);* 地址:相對路徑,直接書寫servlet的別名即可。* 特點:* 一次請求,瀏覽器地址欄信息不改變。* 注意:* 請求轉發后直接return結束即可。*reuqet作用域:* 解決了一次請求內的servlet的數據共享問題*重定向:* 解決了表單重復提交的問題,以及當前servlet無法處理的請求的問題。* 使用:* resp.sendRedirect(String uri);* 示例:* resp.sendRedirect("/login/main");* 特點:* 兩次請求,兩個request對象。* 瀏覽器地址欄信息改變* 時機:* 如果請求中有表單數據,而數據又比較重要,不能重復提交,建議使用重定向。* 如果請求被Servlet接收后,無法進行處理,建議使用重定向定位到可以處理的資源。 *解決主頁面用戶名顯示為null的問題:* 原因:* 因為在用戶登錄成功后使用重定向顯示主頁面,兩次請求,而用戶的信息* 在第一次請求中,第二次請求中沒有用戶數據,所以顯示為null* 解決:* 使用session*使用ServletContext對象完成網頁計數器* 在用戶登錄校驗中創建計數器并自增,然后存儲到ServletContext對象中* 在主頁面里取出計數器數據顯示給用戶即可。*

三天免登陸、訪問次數統計、用戶信息顯示 Demo


下面放主要代碼。orm框架部分,見github。

github地址:
https://github.com/HanquanHq/ServletNote01_LoginSystem

項目結構:

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>04-Login</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><description></description><display-name>CookieServlet</display-name><servlet-name>CookieServlet</servlet-name><servlet-class>cn.hanquan.servlet.CookieServlet</servlet-class></servlet><servlet-mapping><servlet-name>CookieServlet</servlet-name><url-pattern>/CookieServlet</url-pattern></servlet-mapping><servlet><description></description><display-name>MainServlet</display-name><servlet-name>MainServlet</servlet-name><servlet-class>cn.hanquan.servlet.MainServlet</servlet-class></servlet><servlet-mapping><servlet-name>MainServlet</servlet-name><url-pattern>/MainServlet</url-pattern></servlet-mapping><servlet><description></description><display-name>PageServlet</display-name><servlet-name>PageServlet</servlet-name><servlet-class>cn.hanquan.servlet.PageServlet</servlet-class></servlet><servlet-mapping><servlet-name>PageServlet</servlet-name><url-pattern>/PageServlet</url-pattern></servlet-mapping><servlet><description></description><display-name>LoginServlet</display-name><servlet-name>LoginServlet</servlet-name><servlet-class>cn.hanquan.servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/LoginServlet</url-pattern></servlet-mapping><servlet><description></description><display-name>NumServlet</display-name><servlet-name>NumServlet</servlet-name><servlet-class>cn.hanquan.servlet.NumServlet</servlet-class><load-on-startup>1</load-on-startup> <!-- tomcat啟動立即加載 --></servlet><servlet-mapping><servlet-name>NumServlet</servlet-name><url-pattern>/NumServlet</url-pattern></servlet-mapping><servlet><description></description><display-name>ShowServlet</display-name><servlet-name>ShowServlet</servlet-name><servlet-class>cn.hanquan.servlet.ShowServlet</servlet-class></servlet><servlet-mapping><servlet-name>ShowServlet</servlet-name><url-pattern>/ShowServlet</url-pattern></servlet-mapping></web-app>

index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JSP頁面</title> </head> <body><form action='CookieServlet' method='get'><input type='submit' value='跳轉到CookieServlet' /><br /></form> </body> </html>

CookieServlet.java

package cn.hanquan.servlet;import java.io.IOException;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import cn.hanquan.orm.core.Query; import cn.hanquan.orm.core.QueryFactory; import cn.hanquan.orm.po.User;public class CookieServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");Cookie[] cks = req.getCookies();if (cks != null) {// 有cookieString uid = "";for (Cookie c : cks) {if ("uid".equals(c.getName())) {uid = c.getValue();}}if ("".equals(uid)) {// cookie不完整req.setAttribute("str", "You have cleaned cookie, please login again.");req.getRequestDispatcher("/PageServlet").forward(req, resp);return;} else {// 二次驗證用戶存在User u = new User();u.setUid(Integer.parseInt(uid));Query q = QueryFactory.createQuery();Object o = q.queryUniqueRow("select * from user where uid=?", User.class, new String[] { uid });if (o != null) {u = (User) o;// 登錄數據存入sessionHttpSession hs = req.getSession();hs.setAttribute("user", u);// 計數器ServletContext sc = this.getServletContext();if (sc.getAttribute("nums") != null) {int nums = Integer.parseInt((String) sc.getAttribute("nums"));nums += 1;sc.setAttribute("nums", nums + "");} else {sc.setAttribute("nums", "1");}// 重定向resp.sendRedirect("MainServlet");return;} else {resp.sendRedirect("MainServlet");return;}}} else {// 沒有cookieresp.sendRedirect("MainServlet");return;}} }

LoginServlet.java

package cn.hanquan.servlet;import java.io.IOException;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import cn.hanquan.orm.core.Query; import cn.hanquan.orm.core.QueryFactory; import cn.hanquan.orm.po.User;/*** 接收提交的表單,并根據登陸結果重定向* * @author Buuug**/ 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");// 獲取表單請求信息String uname = req.getParameter("uname");String upwd = req.getParameter("upwd");System.out.println("獲取到uname=" + uname + "upwd=" + upwd);// 處理請求信息if (uname == null || upwd == null) {// 避免直接訪問此頁報空指針resp.sendRedirect("PageServlet");return;}User u = new User();u.setUname(uname);u.setUpwd(upwd);Query q = QueryFactory.createQuery();Object result = q.queryUniqueRow("select * from user where uname=? and upwd=?", User.class,new String[] { uname, upwd });System.out.println(result);// 登錄結果if (result != null) {// rightCookie c = new Cookie("uid", ((User) result).getUid() + "");c.setMaxAge(5 * 60);c.setPath("CookieServlet");resp.addCookie(c);// 登錄數據存到sessionHttpSession hs = req.getSession();hs.setAttribute("user", u);// 計數器ServletContext sc = this.getServletContext();if (sc.getAttribute("nums") != null) {int nums = Integer.parseInt((String) sc.getAttribute("nums"));nums += 1;sc.setAttribute("nums", nums + "");} else {sc.setAttribute("nums", "1");}// 重定向resp.sendRedirect("MainServlet");return;} else {// wrong// 請求轉發req.setAttribute("str", "用戶名或密碼錯誤");req.getRequestDispatcher("PageServlet").forward(req, resp);return;}} }

MainServlet.java

package cn.hanquan.servlet;import java.io.IOException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import cn.hanquan.orm.po.User;public class MainServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {// 設置請求、響應編碼格式req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");// 獲取Session用戶信息Object o = req.getSession().getAttribute("user");String uname = "";if (o != null) {uname = ((User) o).getUname();} else {resp.sendRedirect("LoginServlet");return;}// 獲取網頁瀏覽次數int nums = Integer.parseInt((String) this.getServletContext().getAttribute("nums"));// 響應處理結果resp.getWriter().write("<html>");resp.getWriter().write("<head>");resp.getWriter().write("</head>");resp.getWriter().write("<body>");resp.getWriter().write("<h3>歡迎 " + uname + " 訪問尚學堂管理系統</h3>"); // 只有請求轉發才有效resp.getWriter().write("所有用戶總登錄次數為:" + nums);resp.getWriter().write("<hr>");resp.getWriter().write("<form action='ShowServlet' method='get'>");resp.getWriter().write("<input type='submit' value='查看個人信息'>");resp.getWriter().write("</form>");resp.getWriter().write("</body>");resp.getWriter().write("</html>");} }

NumServlet.java

package cn.hanquan.servlet;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;/*** 計算總登錄次數* * 在ServletContext和1.txt中,nums以String類型存儲、讀取。* 在讀取至java內存之后,轉換成int類型進行運算。* * @author Buuug**/ public class NumServlet extends HttpServlet {@Override/*** 讀文件*/public void init() throws ServletException {String path = this.getServletContext().getRealPath("/nums/1.txt");FileReader fr = null;BufferedReader br = null;System.out.println("讀 :" + path);try {fr = new FileReader(path);br = new BufferedReader(fr);String nums = br.readLine();// 寫入ServletContextthis.getServletContext().setAttribute("nums", nums);} catch (Exception e) {e.printStackTrace();} finally {try {fr.close();} catch (IOException e) {e.printStackTrace();}try {br.close();} catch (IOException e) {e.printStackTrace();}}}@Override/*** 寫文件*/public void destroy() {// 寫入txtint nums = Integer.parseInt((String) this.getServletContext().getAttribute("nums"));String path = this.getServletContext().getRealPath("/nums/1.txt");System.out.println("寫:" + path);BufferedWriter bw = null;FileWriter fw = null;try {fw = new FileWriter(path);bw = new BufferedWriter(fw);bw.write(nums + "");bw.flush();} catch (Exception e) {e.printStackTrace();} finally {try {fw.close();} catch (IOException e) {e.printStackTrace();}try {bw.close();} catch (IOException e) {e.printStackTrace();}}}}

PageServlet.java

package cn.hanquan.servlet;import java.io.IOException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** 繪制登錄頁面、提交表單* * @author Buuug**/ public class PageServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");String str = (String) req.getAttribute("str") == null ? "" : (String) req.getAttribute("str");// 錯誤提示resp.getWriter().write("<html>");resp.getWriter().write("<head>");resp.getWriter().write("</head>");resp.getWriter().write("<body>");resp.getWriter().write("<font color='red' size='20px'>" + str + "</font>");resp.getWriter().write("<form action='LoginServlet' method='get'>");resp.getWriter().write("用戶名:<input type='text' name='uname' value=''/><br/>");resp.getWriter().write("密碼:<input type='password' name='upwd' value=''/><br/>");resp.getWriter().write("<input type='submit' value='登錄'/><br/>");resp.getWriter().write("</form>");resp.getWriter().write("</body>");resp.getWriter().write("</html>");} }

ShowServlet.java

package cn.hanquan.servlet;import java.io.IOException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import cn.hanquan.orm.po.User;/*** 在MainServlet中,顯示用戶個人信息* * @author Buuug**/ public class ShowServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");HttpSession hs = req.getSession();if (hs.getAttribute("user") == null) {resp.sendRedirect("/CookieServlet");return;}User u = (User) hs.getAttribute("user");// 表格顯示個人信息resp.getWriter().write("<html>");resp.getWriter().write("<head>");resp.getWriter().write("</head>");resp.getWriter().write("<body>");resp.getWriter().write("<table border='1px'>");resp.getWriter().write("<tr>");resp.getWriter().write("<td>用戶名</td>");resp.getWriter().write("<td>" + u.getUname() + "</td>");resp.getWriter().write("</tr>");resp.getWriter().write("<tr>");resp.getWriter().write("<td>密碼</td>");resp.getWriter().write("<td>" + u.getUpwd() + "</td>");resp.getWriter().write("</tr>");resp.getWriter().write("</table>");resp.getWriter().write("</body>");resp.getWriter().write("</html>");} }

總結

以上是生活随笔為你收集整理的【Servlet】ServletContext、ServletConfig对象学习、用户登录系统完善的全部內容,希望文章能夠幫你解決所遇到的問題。

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