JavaWeb 中 web.html是核心 (前端后端的連接中轉(zhuǎn)站)
? ? ? ? ? ? ? cookie 客戶端
? ? ? ? ? ? ? session 服務(wù)器端
? ? ? ? ? ? ? 實現(xiàn):extends HttpServlet
? ? ? ? ? Servlet兩種配置方法:
? ? ? ? ? ? ? ? 1:web.xml配置
? ? ? ? ? ? ? ? 2:通過@WebServlet(name="",urlPatterns="") 注解配置? ?
? ? ? ? ? ? ? ? web.html對對象的描述:? (對src里的class 對象進行描述醇锚。JAVAWEB特有的實例化方法)
? ? ? ? ? ? ? ? ? ? <!--對我們創(chuàng)建的serverfemo進行描述-->
? ? ? ? ? ? ? ? ? ? ? ? <servlet>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <servlet-name>first</servlet-name>? 名字隨便起? 相當(dāng)于變量的名字 相當(dāng)于實例化 new 了? //前端的連接名字(action = “first”)
? ? ? ? ? ? ? ? ? ? ? ? ? ? <servlet-class>com.foreknow.contruller.ServleDemo</servlet-class>? 描述具體所在的地址 具體在包中那個文件- //后端的鏈接地址,寫在src包之后的路徑设哗,精確到class
? ? ? ? ? ? ? ? ? ? ? ? </servlet>
? ? ? ? ? ? ? ? ? ? ? ? <servlet-mapping>? ? ? ? ? ? ? ? ? ? ? ? 映射標(biāo)簽? ? 根據(jù)URL地址找到映射對象
? ? ? ? ? ? ? ? ? ? ? ? ? ? <servlet-name>first</servlet-name>? ? 通過名字找到具體對象所在位置 和前面的名字呼應(yīng)
? ? ? ? ? ? ? ? ? ? ? ? ? ? <url-pattern>/demo</url-pattern>? ? ? 一定要加斜杠 這個是網(wǎng)頁所指向的地址
? ? ? ? ? ? ? ? ? ? ? ? </servlet-mapping>
? ? ? ? ? ? ? ? @WebServlet配置
? ? ? ? ? ? ? ? ? ? 參考:https://blog.csdn.net/mytt_10566/article/details/70173007
? ? ? ? ? ? ? ? ? ? @WebServlet常用屬性
? ? ? ? ? ? ? ? ? ? 屬性 ? ? ? ? 類型 ? ? ? ? 是否必須 ? ? ? ? ? ? 說明
? ? ? ? ? ? ? ? ? ? asyncSupported boolean ? ? ? ? 否 ? ? ? ? ? ? ? ? 指定Servlet是否支持異步操作模式
? ? ? ? ? ? ? ? ? ? displayName String ? ? ? ? 否 ? ? ? ? ? ? ? ? 指定Servlet顯示名稱
? ? ? ? ? ? ? ? ? ? initParams? WebInitParam[] 否 ? ? ? ? ? ? ? ? 配置初始化參數(shù)
? ? ? ? ? ? ? ? ? ? loadOnStartup int? ? ? ? 否 ? ? ? ? ? ? ? ? 標(biāo)記容器是否在應(yīng)用啟動時就加載這個Servlet
? ? ? ? ? ? ? ? ? ? name ? ? ? ? String ? ? ? ? 否 ? ? ? ? ? ? ? ? 指定Servlet名稱
? ? ? ? ? ? ? ? ? ? urlPatterns/value String[] 否 ? ? ? ? ? ? ? ? 這兩個屬性作用相同锥惋,指定Servlet處理的url? ? ? ?
? ? ? ? ? ? ? ? ? ? 通過注解方式配置嫡意,web.xml中不需要配置該Servlet
? ? ? ? ? ? ? ? ? ? 舉例:
? ? ? ? ? ? ? ? ? ? ? ? @WebServlet(name = "ServletTest",urlPatterns = "/test01")
注意:
(1).loadOnStartup屬性:標(biāo)記容器是否在啟動應(yīng)用時就加載Servlet森渐,默認(rèn)不配置或數(shù)值為負(fù)數(shù)時表示客戶?? 端第一 次請求Servlet時再加載准验;0或正數(shù)表示啟動應(yīng)用就加載扔水,正數(shù)情況下,數(shù)值越小曹步,加載該Servlet的優(yōu)先級越高锋华;
(2).name屬性:可以指定也可以不指定,通過getServletName()可以獲取到箭窜,若不指定,則為Servlet的完整類名衍腥,如:cn.edu.njit.servlet.UserServlet
3).urlPatterns/value屬性: String[]類型磺樱,可以配置多個映射,如:urlPatterns={"/user/test", "/user/example"}
?(4).在使用注解方式時婆咸,需要注意:
<web-app> </web-app>根元素中不能配置屬性metadata-complete="true"竹捉,否則無法加載Servlet。metadata-
?complete屬性表示通知Web容器是否尋找注解尚骄,默認(rèn)不寫或者設(shè)置false块差,容器會掃描注解和Web分片,為Web應(yīng)用程序構(gòu)建有效的元數(shù)據(jù)倔丈;設(shè)置true憨闰,表示將由部署描述符為Web程序提供所有的配置信息web.xml中不能再配置該Servlet
(5).urlPatterns的常用規(guī)則:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*或者/:攔截所有
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *.do:攔截指定后綴
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /user/test:攔截路徑
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /user/*.do、/*.do需五、test*.do都是非法的鹉动,啟動時候會報錯
?(6).urlPatterns的配置規(guī)則:精確匹配、擴展名匹配宏邮、路徑匹配以及會包含一些優(yōu)先級泽示,這些在以后會整理缸血。? ?
? ? ? ? ? ? 常用方法:
? ? ? ? ? ? ? ? ? ? 中文亂碼
? ? ? ? ? ? ? ? ? ? ? ? resp.setContentType("text/html;charset=utf-8");? ? 設(shè)置基本讀取屬性字符集
? ? ? ? ? ? ? ? ? ? ? ? req.setCharacterEncoding("utf-8");? ? ? ? ? ? ? 設(shè)置基本讀取屬性字符集
? ? ? ? ? ? ? ? ? ? ? ? 1、pageEncoding=”UTF-8”的作用是設(shè)置JSP編譯成Servlet時使用的編碼械筛。
? ? ? ? ? ? ? ? ? ? ? ? 2捎泻、contentType=”text/html;charset=UTF-8”的作用是指定服務(wù)器響應(yīng)給瀏覽器的編碼。
? ? ? ? ? ? ? ? ? ? ? ? 3埋哟、req.setCharacterEncoding(“UTF-8”)的作用是設(shè)置對客戶端請求和數(shù)據(jù)庫取值時的編碼笆豁,不指定的話使用iso-8859-1。(只解決POST亂碼)
? ? ? ? ? ? ? ? ? ? ? ? 4定欧、resp.setCharacterEncoding(“UTF-8”)的作用是指定服務(wù)器響應(yīng)給瀏覽器的編碼渔呵。
? ? ? ? ? ? ? ? ? ? ? ? 5、resp.setContentType(“text/html;charset=utf-8”)的作用是指定服務(wù)器響應(yīng)給瀏覽器的編碼砍鸠。同時扩氢,瀏覽器也是根據(jù)這個參數(shù)來對其接收到的數(shù)據(jù)進行重新編碼(或者稱為解碼)。
? ? ? ? ? ? ? ? ? ? ? ? 對于發(fā)送數(shù)據(jù)爷辱,服務(wù)器按照resp.setCharacterEncoding—contentType—pageEncoding的優(yōu)先順序录豺,對要發(fā)送的數(shù)據(jù)進行編碼。
? ? ? ? ? ? ? ? ? ? 基本屬性:
? ? ? ? ? ? ? ? ? ? ? ? req.getParameter("參數(shù)名")? ? 獲取參數(shù)饭弓,在doGet(),doPost()都可以用
? ? ? ? ? ? ? ? ? ? ? ? doGet(); 完成url双饥,超鏈接傳送等
? ? ? ? ? ? ? ? ? ? ? ? doPost(); 用來完成表單得驗證,表單的數(shù)據(jù)等
? ? ? ? ? ? ? ? ? ? 向瀏覽器提交:
? ? ? ? ? ? ? ? ? ? ? ? PrintWriter writer = resp.getWriter();? 獲取提交瀏覽器的對象
? ? ? ? ? ? ? ? ? ? ? ? String email = req.getParameter("email");? ? 輸入的email 必須和輸入框 input 的name 屬性一樣? 這一步獲取前端數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? writer.println("用戶名"+email);? ? ? ? 向瀏覽器提交獲取的前端數(shù)據(jù)
? ? ? ? ? ? ? ? *** 后臺向前臺(jsp)傳遞數(shù)據(jù) ****? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? 1.req.setAttribute("list",list);? ? ? ? 將數(shù)據(jù)保存到服務(wù)器? 底層是Map k,v? 保存完可以直接發(fā)送弟断,并且不需要寫? ? req 使用setAttribute必須發(fā)送咏花,
? ? ? ? ? ? ? ? ? ? ? ? 2.req.getRequestDispatcher("/list.jsp").forward(req,resp);? ? 最終發(fā)送? 填寫URL
? ? ? ? ? ? ? ? ? ? ? ? req.getAttribute("list")? ? ? ? ? ? ? 接收數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 引入標(biāo)簽庫? 使用JSPL標(biāo)簽庫? c為標(biāo)簽的名字
? ? ? ? ? ? ? ? ? ? ? ? <c:forEach var="gb" items="${list}">? ? 在jsp里接收數(shù)據(jù),需要導(dǎo)入jstl標(biāo)簽庫 c為標(biāo)簽的名字
? ? ? ? ? ? ? ? ? ? 傳遞參數(shù)的方式:
? ? ? ? ? ? ? ? ? ? ? ? 1.前臺 通過表單傳遞 name=tom&password=123&email=tom@163.com? 前臺-->后臺
? ? ? ? ? ? ? ? ? ? ? ? ? ? 后臺request.getParameter("name");
? ? ? ? ? ? ? ? ? ? ? ? 2.也可以通過表單中的隱藏域 <input type="hidden" name="q" value="123">? 前臺-->后臺
? ? ? ? ? ? ? ? ? ? ? ? ? ? 后臺: request.getParameter("q");
? ? ? ? ? ? ? ? ? ? ? ? 3.可以通過超連接向后臺傳遞參數(shù)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 前臺-->后臺
? ? ? ? ? ? ? ? ? ? ? ? ? ? <a href="/全路徑/映射地址?id=1&q=delete">這是一個超連接</a>
? ? ? ? ? ? ? ? ? ? ? ? ? ? http://localhost:8080/項目映射地址/參數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? 通過超鏈接傳送的值由doGet() 處理阀趴,通過button 的值由doPost() 處理
? ? ? ? ? ? ? ? ? ? ? ? ? ? 例子:a href="http://localhost:8080/JavaWebPro_war_exploded/delete?id=${gb.id}"? class="btn btn-danger" >刪除</a>
? ? ? ? ? ? ? ? ? ? ? ? ? ? 后臺:request.getParameter("id");? request.getParameter("q");
? ? ? ? ? ? ? ? ? ? ? ? 4.通過表單提交按鈕進行自動提交? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 前臺-->后臺
? ? ? ? ? ? ? ? ? ? ? ? ? ? form action 設(shè)置 servlrt-name 的值
? ? ? ? ? ? ? ? ? ? ? ? ? ? button 的type? 設(shè)置為 submit
? ? ? ? ? ? ? ? ? ? ? ? ? ? 文本框 的name 屬性名字與后臺接受名字設(shè)置一樣
? ? ? ? ? ? ? ? ? ? ? ? ? ? 例子:? (前臺)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <form action="test02" method="post">
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <span>名字</span> <input name="name" type="text"> <br><br>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <span>年齡</span> <input name="age" type="text"> <br><br>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <span>學(xué)校</span> <input name="school" type="text"> <br><br>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <span>郵箱</span> <input name="email" type="text"> <br><br>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <button type="submit">確定提交</button>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </form>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (后臺)doPost()
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String name = req.getParameter("name");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String age = req.getParameter("age");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String school = req.getParameter("school");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String email = req.getParameter("email");
? ? ? ? ? ? ? ? ? ? ? ? 5.? req.setAttribute("list",list);? ? 存儲數(shù)據(jù)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 后臺-->前臺
? ? ? ? ? ? ? ? ? ? ? ? ? ? req.getRequestDispatcher("/user/manager?q=list").forward(req,resp);? //轉(zhuǎn)發(fā)? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? 后臺:request.getParameter("q");
? ? ? ? ? ? ? ? ? ? ? ? 6. session 傳遞數(shù)據(jù)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 后臺 -> 前臺
? ? ? ? ? ? ? ? ? ? ? ? ? ? HttpSession session = req.getSession();? ? //創(chuàng)建Session對象
? ? ? ? ? ? ? ? ? ? ? ? ? ? session.setAttribute("name","zhangsan");? ? //向Session對象中保存數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? String name = (String)session.getAttribute("name");? ? //如何從Session中獲取數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? req.getRequestDispatcher("/list.jsp").forward(req,resp);? ? //? ? ? ? 將這個請求轉(zhuǎn)達給list.jsp
? ? ? ? ? ? ? ? ? ? ? ? ? ? session 和 req 使用setAttribute 區(qū)別
? ? ? ? ? ? ? ? ? ? ? ? ? ? session 提交的 所有jsp昏翰,所有文件 都公用,也是需要 req.getRequestDispatcher("/list.jsp").forward(req,resp); 轉(zhuǎn)發(fā)
? ? ? ? ? ? ? ? ? ? ? ? ? ? req 需要指定接收對象,并且只適用于接收對象?
? ? ? ? ? ? ? ? ? ? ** 如何將request中的數(shù)據(jù)傳遞給jsp頁面(如何獲取數(shù)據(jù))? 后臺 -> 前臺
? ? ? ? ? ? ? ? ? ? ? ? 1.在服務(wù)器(servlet)中如何保存數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? req.setAttribute("list",list);
? ? ? ? ? ? ? ? ? ? ? ? ? ? 傳送:
? ? ? ? ? ? ? ? ? ? ? ? ? ? req.getRequestDispatcher("/list.jsp").forward(req,resp);? ? 最終發(fā)送? 填寫URL
? ? ? ? ? ? ? ? ? ? ? ? 2.在jsp中如何獲取到request中的集合
? ? ? ? ? ? ? ? ? ? ? ? ? ? ${list}? ? ? ?
? ? ? ? ? ? ? ? ? ? 假定你的web application 名稱為bainews,你在瀏覽器中輸入du請求路徑:zhi
? ? ? ? ? ? ? ? ? ? ? ? ? ? http://localhost:8080/news/main/list.jsp
? ? ? ? ? ? ? ? ? ? ? ? ? ? 則執(zhí)行下面dao向行代碼后打印出如下結(jié)果:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1刘急、 System.out.println(request.getContextPath());
? ? ? ? ? ? ? ? ? ? ? ? ? ? 打印結(jié)果:/news
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2棚菊、System.out.println(request.getServletPath());
? ? ? ? ? ? ? ? ? ? ? ? ? ? 打印結(jié)果:/main/list.jsp
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3、 System.out.println(request.getRequestURI());
? ? ? ? ? ? ? ? ? ? ? ? ? ? 打印結(jié)果:/news/main/list.jsp
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4叔汁、 System.out.println(request.getRealPath("/"));
? ? ? ? ? ? ? ? ? ? ? ? ? ? 打印結(jié)果: F:\Tomcat 6.0\webapps\news\test
? ? ? ? ? ? ? ? ? doPost(HttpServletRequest req, HttpServletResponse resp)
? ? ? ? ? ? ? ? ? ? ? ? req:輸入 服務(wù)器端? 請求體
? ? ? ? ? ? ? ? ? ? ? ? resp:輸出? 客戶機端? 響應(yīng)體
? ? ? ? ? ? ? ? ? doPost() 在針對表單提交時统求,要對表單設(shè)置提交方法 method 和 后臺連接 action
? ? ? ? ? ? ? ? ? ? ? ? <form method='post' action="liu">? //action 后面為在web中定義的組件名
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <span> 名字</span> <input name="name" type="text" required>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <button? type="submit">點擊
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </button>
? ? ? ? ? ? ? ? ? ? ? ? </form>
? ? ? ? ? ? ? ? ? doGet() :
? ? ? ? ? ? ? ? ? ? ? ? //? ? ? ? 設(shè)置服務(wù)器向客戶端響應(yīng)類型
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? resp.setContentType("text/html;charset=utf-8");
? ? ? ? ? ? ? ? ? ? ? ? //? ? ? ? 設(shè)置客戶端反饋服務(wù)器為utf8
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? req.setCharacterEncoding("utf-8");
? ? ? ? ? ? ? ? ? ? ? ? //要使用這個對象PrintWriter中的方法在頁面中輸出內(nèi)容
? ? ? ? ? ? ? ? ? ? ? ? ? ? PrintWriter out = resp.getWriter();
? ? ? ? ? ? ? ? ? ? ? ? ? ? out.println("<html>");
? ? ? ? ? ? ? ? ? ? ? ? ? ? out.println("<head>");
? ? ? ? ? ? ? ? ? ? ? ? ? ? out.println("<title>servlet</title>");
? ? ? ? ? ? ? ? ? ? ? ? ? ? out.println("</head>");
? ? ? ? ? ? ? ? ? ? ? ? ? ? out.println("<body>");
? ? ? ? ? ? ? ? ? ? ? ? ? ? out.println("<h1>這是一個測試程序servlet</h1>");
? ? ? ? ? ? ? ? ? ? ? ? ? ? out.println("</body>");
? ? ? ? ? ? ? ? ? ? ? ? ? ? out.println("</html>");
? ? ? ? ? ? ? ? ? ? ? ? ? ? out.flush();
? ? ? ? ? ? ? ? ? ? ? ? ? ? out.close();
? ? ? ? ?
什么是Servlet:這就是一個服務(wù)器端的應(yīng)用程序? 在src里創(chuàng)建
? ? ? ? ? 作用:
? ? ? ? ? ? ? 1.可以讀取客戶端發(fā)送的所有的數(shù)據(jù)
? ? ? ? ? ? ? 2.可以獲取請求的參數(shù)
? ? ? ? ? ? ? 3.可以處理數(shù)據(jù)并成生結(jié)果
? ? ? ? ? ? ? 4.也可以設(shè)置合適的http響應(yīng)參數(shù)
? ? ? ? ? ? ? 5.也可以將響應(yīng)的信息發(fā)送給客戶端
? ? ? ? ? Servlet 生命周期
? ? ? ? ? ? ? ? Servlet 生命周期可被定義為從創(chuàng)建直到毀滅的整個過程。以下是 Servlet 遵循的過程:
? ? ? ? ? ? ? ? Servlet 通過調(diào)用 init () 方法進行初始化据块。? ? 它在第一次創(chuàng)建 Servlet 時被調(diào)用码邻,在后續(xù)每次用戶請求時不再調(diào)用
? ? ? ? ? ? ? ? Servlet 調(diào)用 service() 方法來處理客戶端的請求。
? ? ? ? ? ? ? ? Servlet 通過調(diào)用 destroy() 方法終止(結(jié)束)另假。? destroy() 方法只會被調(diào)用一次冒滩,在 Servlet 生命周期結(jié)束時被調(diào)用。
? ? ? ? ? ? ? ? 最后浪谴,Servlet 是由 JVM 的垃圾回收器進行垃圾回收的? ?
? ? ? ? ? 如何創(chuàng)建一個Servlet
? ? ? ? ? ? ? 1.要想創(chuàng)建一個Servlet开睡,那么就一定要繼承HttpServlet
? ? ? ? ? ? ? 2.要重寫doGet或doPost方法
? ? ? ? ? ? ? ? ? ? 這兩個方法什么時候會調(diào)用:如果客戶端向服務(wù)器端發(fā)送的請求為get請求因苹,那么就會自動去調(diào)用Servlet中的doGet方法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果客戶端向服務(wù)器端發(fā)送的請求為post請求,那么就會自動去調(diào)用Servlet中的doPost方法
? ? ? ? ? ? 3.方法的參數(shù)
? ? ? ? ? ? ? ? http會支持多種請求的方式:
? ? ? ? ? ? ? ? ? GET(SELECT):從服務(wù)器取出資源(一項或多項)篇恒。
? ? ? ? ? ? ? ? ? POST(CREATE):在服務(wù)器新建一個資源扶檐。
? ? ? ? ? ? ? ? ? PUT(UPDATE):在服務(wù)器更新資源(客戶端提供改變后的完整資源)。
? ? ? ? ? ? ? ? ? DELETE(DELETE):從服務(wù)器刪除資源胁艰。
? ? ? ? ? ? ? ? ? HttpServletRequest 接口:這個接口無需我們自己初始化款筑,它是由tomcat服務(wù)器(Web容器)會自動進行初始化的
? ? ? ? ? ? ? ? ? 會提供一些常用的方法:如何獲取請求的參數(shù)
? ? ? ? ? ? ? ? HttpServletResponse接口:這個接口無需我們自己初始化,它是由tomcat服務(wù)器(Web容器)會自動進行初始化的
? ? ? ? ? ? ? ? ? 例如:在服務(wù)器端設(shè)置響應(yīng)的內(nèi)容的類型
? ? ? ? ? 4.一些屬性
? ? ? ? ? ? ? //設(shè)置服務(wù)器端向客戶端響應(yīng)的內(nèi)容的類型(MIME)? ? ? 寫在實現(xiàn)的doGet()中
? ? ? ? ? ? ? ? ? resp.setContentType("text/html;charset=utf-8");
? ? ? ? ? ? 設(shè)置全局初始化參數(shù)
? ? ? ? ? ? ? ? <context-param>
? ? ? ? ? ? ? ? ? ? <param-name>encoding</param-name>
? ? ? ? ? ? ? ? ? ? <param-value>1234856789</param-value>
? ? ? ? ? ? ? ? </context-param>? ? ?
? ? ? ? ? ? 設(shè)置初始化參數(shù)(局部初始化參數(shù))
? ? ? ? ? ? ? ? <!--life -->
? ? ? ? ? ? ? ? <servlet>
? ? ? ? ? ? ? ? ? ? <servlet-name>life</servlet-name>
? ? ? ? ? ? ? ? ? ? <servlet-class>com.foreknow.controller.LifeServer</servlet-class>
? ? ? ? ? ? ? ? <!--初始化參數(shù)-->
? ? ? ? ? ? ? ? ? ? <init-param>? ? ? ? ? ? ? ? ? ? ? ? //初始化參數(shù)
? ? ? ? ? ? ? ? ? ? <param-name>pageSize</param-name>
? ? ? ? ? ? ? ? ? ? <param-value>10</param-value>
? ? ? ? ? ? ? ? ? ? </init-param>
? ? ? ? ? ? ? ? </servlet>
? ? ? ? ? ? ? ? <!--? 映射標(biāo)簽-->
? ? ? ? ? ? ? ? <servlet-mapping>
? ? ? ? ? ? ? ? ? ? <servlet-name>life</servlet-name>
? ? ? ? ? ? ? ? ? ? <!--映射地址? ? -->
? ? ? ? ? ? ? ? ? ? <url-pattern>/lifedemo</url-pattern>
? ? ? ? ? ? ? ? </servlet-mapping>?
? ? ? ? ? ? 接受局部初始化參數(shù)
? ? ? ? ? ? ? ? 重寫 init(ServletConfig config) 方法
? ? ? ? ? ? ? ? String pageSize = config.getInitParameter("pageSize");? ? //獲取參數(shù)
? ? ? ? ? ? 接受全局初始化參數(shù)
? ? ? ? ? ? ? ? 重寫 init(ServletConfig config) 方法
? ? ? ? ? ? ? ? String encoding = config.getServletContext().getInitParameter("encoding");
? ? ? ? ? 實現(xiàn)資源的跳轉(zhuǎn):(實現(xiàn)頁面跳轉(zhuǎn))
? ? ? ? ? ? ? ? ? 跳轉(zhuǎn)由doGet() 跳轉(zhuǎn)腾么,接受就由doGet()接受
? ? ? ? ? ? ? ? ? 跳轉(zhuǎn)由doPost() 跳轉(zhuǎn)奈梳,接受就由doPost()接受
? ? ? ? ? ? ? ? ? 可以實現(xiàn)后臺跳轉(zhuǎn)后臺,前臺頁面跳轉(zhuǎn)到前臺等操作
? ? ? ? ? ? ? ? ? 請求轉(zhuǎn)發(fā):發(fā)送一次請求解虱,尋找目標(biāo)攘须,如果該目標(biāo)無法實現(xiàn),則由目標(biāo)進行尋找
? ? ? ? ? ? ? ? ? ? ? ? ? 請求轉(zhuǎn)發(fā)多用于后臺java文件直接的數(shù)據(jù)傳輸跳轉(zhuǎn)
? ? ? ? ? ? ? ? ? ? ? ? ? 轉(zhuǎn)發(fā)只能轉(zhuǎn)發(fā)站內(nèi)資源
? ? ? ? ? ? ? ? ? ? ? ? ? req.getRequestDispatcher("url").forward(req,resp);
? ? ? ? ? ? ? ? ? ? ? ? ? 發(fā)送完由目標(biāo)的doGet()進行處理
? ? ? ? ? ? ? ? ? ? ? ? ? 例子:
? ? ? ? ? ? ? ? ? ? ? ? ? ? (發(fā)送方)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public class Delete extends HttpServlet {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? resp.setContentType("text/html;charset=utf-8");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String id = req.getParameter("id");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? req.getRequestDispatcher("/manage?q=delete&id="+id).forward(req,resp);? ? 執(zhí)行請求轉(zhuǎn)發(fā)殴泰,帶參數(shù)跳轉(zhuǎn)到manage
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // q為隨便定義的名字
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PrintWriter writer = resp.getWriter();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (接收方)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public class ManageServlet extends HttpServlet {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //我們只需 要在doGet中獲取到請求的參數(shù)q=list于宙,然后根據(jù)獲取到的參數(shù)來決定調(diào)用哪一個方法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String method = req.getParameter("q");? ? //接受請求轉(zhuǎn)發(fā)發(fā)送過來的數(shù)據(jù)? 接受q的數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if("delete".equals(method)) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? delete(req,resp);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }else if("update".equals(method)){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? update(req,resp);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? list(req,resp);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }? ?
? ? ? ? ? ? ? ? ? 重定向:發(fā)送多次請求,多次尋找目標(biāo)
? ? ? ? ? ? ? ? ? ? ? ? 重定向可以定向到任意資源
? ? ? ? ? ? ? ? ? ? ? ? resp.sendRedirect("url");
? ? ? ? ? ? ? ? ? ? ? ? 轉(zhuǎn)發(fā)在服務(wù)器端完成的悍汛;重定向是在客戶端完成的
? ? ? ? ? ? ? ? ? ? ? ? 轉(zhuǎn)發(fā)的速度快捞魁;重定向速度慢
? ? ? ? ? ? ? ? ? ? ? ? 轉(zhuǎn)發(fā)的是同一次請求;重定向是兩次不同請求
? ? ? ? ? ? ? ? ? ? ? ? 轉(zhuǎn)發(fā)不會執(zhí)行轉(zhuǎn)發(fā)后的代碼离咐;重定向會執(zhí)行重定向之后的代碼
? ? ? ? ? ? ? ? ? ? ? ? 轉(zhuǎn)發(fā)地址欄沒有變化谱俭;重定向地址欄有變化
? ? ? ? ? ? ? ? ? ? ? ? 轉(zhuǎn)發(fā)必須是在同一臺服務(wù)器下完成;重定向可以在不同的服務(wù)器下完成
? ? ? ? ? ? ? ? ? ? ? ? 轉(zhuǎn)發(fā)只能轉(zhuǎn)當(dāng)前站內(nèi)資源宵蛀,重定向可以任意資源
? ? ? ? ? ? ? ? ? * 如何在從A資源轉(zhuǎn)發(fā)到B資源的時候傳遞參數(shù):目的是讓服務(wù)器知道你想要做什么事情
? ? ? ? ? ? ? ? ? ? ? 語法: url?key1=value1&key2=value2
? ? ? ? ? ? ? ? ? ? ? 例子:req.getRequestDispatcher("/manage?q=list").forward(req,resp);? q為隨便定義的名字
? ? ? ? ? ? ? ? ? ? ? ? ? ? String method = req.getParameter("q");? ? 在跳轉(zhuǎn)那里進行接收 這里就是在manage里進行接收
? ? ? ? ? ? ? ? ? 細(xì)談getRequestDispatcher()與sendRedirect()的區(qū)別
? ? ? ? ? ? ? ? ? 首先我們要知道:
? ? ? ? ? ? ? ? ? ? ? ? (1)request.getRequestDispatcher()是請求轉(zhuǎn)發(fā)旺上,前后頁面共享一個request ; 這個是在服務(wù)端運行的,對瀏覽器來說是透明的糖埋。
? ? ? ? ? ? ? ? ? ? ? ? (2)response.sendRedirect()是重新定向,前后頁面不是一個request窃这。而這個是在瀏覽器端運行的瞳别。
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1) redirect 方式
? ? ? ? ? ? ? ? ? ? ? ? response.sendRedirect("/a.jsp");
? ? ? ? ? ? ? ? ? ? ? ? 頁面的路徑是相對路徑。sendRedirect可以將頁面跳轉(zhuǎn)到任何頁面杭攻,不一定局限于本web應(yīng)用中祟敛,如:
? ? ? ? ? ? ? ? ? ? ? ? response.sendRedirect("URL");
? ? ? ? ? ? ? ? ? ? ? ? 跳轉(zhuǎn)后瀏覽器地址欄變化。
? ? ? ? ? ? ? ? ? ? ? ? 這種方式要傳值出去的話兆解,只能在url中帶parameter或者放在session中馆铁,無法使用request.setAttribute來 傳遞。所以該方式只適用于無傳值跳轉(zhuǎn)
? ? ? ? ? ? ? ? ? ? ? ? 2) forward方式
? ? ? ? ? ? ? ? ? ? ? ? request.getRequestDispatcher("/路徑(可以是jsp路徑也可以是servlet)") .forward(request, response);
? ? ? ? ? ? ? ? ? ? ? ? 如:
? ? ? ? ? ? ? ? ? ? ? ? request.getRequestDispatcher("/2.jsp)") .forward(request, response);
? ? ? ? ? ? ? ? ? ? ? ? request.getRequestDispatcher("/servlet/HomeServlet)") .forward(request, response);
? ? ? ? ? ? ? ? ? ? ? ? Servlet頁面跳轉(zhuǎn)的路徑是相對路徑锅睛。forward方式只能跳轉(zhuǎn)到本web應(yīng)用中的頁面上埠巨。
? ? ? ? ? ? ? ? ? ? ? ? 跳轉(zhuǎn)后瀏覽器地址欄不會變化历谍。
? ? ? ? ? ? ? ? ? ? ? ? 使用這種方式跳轉(zhuǎn),傳值可以使用三種方法:url中帶parameter辣垒,session望侈,request.setAttribute?
? ? ? ? ? ??
? ? ? ? ? ? JSP
? ? ? ? ? ? ? ? ? ? * jsp文件可以實現(xiàn)輸出JAVA,js,html,css
? ? ? ? ? ? ? ? ? jsp向servlet傳值大致有這么幾種情況。
? ? ? ? ? ? ? ? ? ? ? ? 1.1第一種超鏈接勋桶,在href='servletAction?id=xxx'脱衙,使用超鏈接時前面應(yīng)該加上項目名
? ? ? ? ? ? ? ? ? ? ? ? 1.2第二種form表單提交,當(dāng)點擊submit時例驹,action="servletAction" method='get/post'//注意這個可是要按提交按鈕的
? ? ? ? ? ? ? ? ? ? ? ? 1.3第三種就是利用ajax,url='servletActionz',當(dāng)然了捐韩,這里也有g(shù)et和post兩種情況,get直接在url后面加問號傳參鹃锈,post會把參數(shù)放在實體內(nèi)容里面荤胁。
? ? ? ? ? ? ? ? ? ? ? ? 2.最后在servlet那邊 用 request.getParameter("參數(shù)名");就可以拿到了
? ? ? ? ? ? ? ? ? JSP里的<$? $>
? ? ? ? ? ? ? ? ? ? ? ? 意思為輸出仪召,等同于out.println()
? ? ? ? ? ? ? ? ? ? ? ? <% request.getContextPath()%>? ? 獲取項目總地址寨蹋,在JSP使用<a>跳轉(zhuǎn)需要寫項目總地址
? ? ? ? ? ? ? ? ? 接收信息
? ? ? ? ? ? ? ? ? ? ? ${key}
? ? ? ? ? ? ? ? ? 接受session信息? ? 前面加sessionScope
? ? ? ? ? ? ? ? ? ? ? ${sessionScope.key}?
? ? ? ? ? ? ? ? ? 接受request信息? ? 前面加requestScope
? ? ? ? ? ? ? ? ? ? ? ${requestScope.key}? ?
? ? ? ? ? Session
? ? ? ? ? ? ? ? ? ? 什么是Session(公共存儲庫)
? ? ? ? ? ? ? ? ? ? ? ? ? ? Session是服務(wù)器端的會話技術(shù),服務(wù)器在運行的時候可以為每一個用戶的數(shù)據(jù)去創(chuàng)建一個單獨的Session對象扔茅。
? ? ? ? ? ? ? ? ? ? ? ? ? ? Session可以用戶游覽器獨享已旧。所以當(dāng)在訪問Web資源的時候,可以把自睡在的數(shù)據(jù)保存在各自的Session中召娜。
? ? ? ? ? ? ? ? ? ? Session的核心
? ? ? ? ? ? ? ? ? ? ? ? ? ? HttpSession:主要用于保存會話的數(shù)據(jù). req.getSession()方法來獲取HttpSession接口
? ? ? ? ? ? ? ? ? ? ? ? ? ? 如何向Session中保存數(shù)據(jù) session.setAttribute("name","zhangsan");
? ? ? ? ? ? ? ? ? ? ? ? ? ? 如何獲取到Session中的數(shù)據(jù) session.getAttribute("name");? //zhangsan
? ? ? ? ? ? ? ? ? ? Session的原理:
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1.第一次創(chuàng)建一個Session對象运褪,給Session分配一個唯一的id(JSESSIONID)
? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.要將JSESSIONID作為Cookie的值發(fā)送給游覽器來保存
? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.在第二次訪問的時候,游覽器會攜帶JSESSIONID的cookie來訪問服務(wù)器
? ? ? ? ? ? ? ? ? ? ? ? ? ? 4.服務(wù)器要得到JSESSIONID玖瘸,在服務(wù)器的內(nèi)存中搜索是否存在對應(yīng)編號的session對象
? ? ? ? ? ? ? ? ? ? 注意:保存在session中的數(shù)據(jù)會被多個servlet/jsp所共享秸讹,只要游覽器不關(guān)閉,那么保存在session中的數(shù)據(jù)會一直有效
? ? ? ? ? ? ? ? ? ? 語句:
? ? ? ? ? ? ? ? ? ? ? ? ? ? HttpSession session = req.getSession();? ? //創(chuàng)建Session對象
? ? ? ? ? ? ? ? ? ? ? ? ? ? session.setAttribute("name","zhangsan");? ? //向Session對象中保存數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? String name = (String)session.getAttribute("name");? ? //如何從Session中獲取數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? req.getRequestDispatcher("/list.jsp").forward(req,resp);? ? //? ? ? ? 將這個請求轉(zhuǎn)達給list.jsp
? ? ? ? ? ? ? ? ? ? ? ? session 和 req 使用setAttribute 區(qū)別
? ? ? ? ? ? ? ? ? ? ? ? ? ? session 提交的 所有jsp雅倒,所有文件 都公用,也是需要 req.getRequestDispatcher("/list.jsp").forward(req,resp); 轉(zhuǎn)發(fā)
? ? ? ? ? ? ? ? ? ? ? ? ? ? req 需要指定接收對象璃诀,并且只適用于接收對象
? ? ? ? ? ? Cookie
? ? ? ? ? ? ? ? ? ? 1.什么是會話:它是指客戶端與服務(wù)器端之間的數(shù)據(jù)傳輸(登錄,購物車)
? ? ? ? ? ? ? ? ? ? 2.會話管理:管理數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? 常用的會話技術(shù):
? ? ? ? ? ? ? ? ? ? ? ? 1.Cookie 數(shù)據(jù)會保存在客戶端
? ? ? ? ? ? ? ? ? ? ? ? 2.Session 數(shù)據(jù)會保存在服務(wù)器端
? ? ? ? ? ? ? ? ? ? 什么是Cookie:它是客戶端的技術(shù)蔑匣,程序會把每個用戶的數(shù)據(jù)以cookie的形式寫給各自的游覽器劣欢,當(dāng)用戶使用
? ? ? ? ? ? ? ? ? ? ? ? ? ? 游覽器再去訪問Web服務(wù)器的資源的時候,它會有自自的數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? Cookie類:主要用于存儲會話的數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1. 構(gòu)造Cookie對象?? Cookie cookie =new Cookie("name",name);
? ? ? ? ? ? ? ? ? ? ? ? ? ? 2. 設(shè)置Cookie 例如:可以設(shè)置Cookie的有效時間? setMaxAge(int expiry) 以秒為單位 1*24*60*60(一天)
? ? ? ? ? ? ? ? ? ? ? ? ? ? 3. 發(fā)送客戶端游覽器來保存? HttpServletResponse:addCookie(Cookie cookie)
? ? ? ? ? ? ? ? ? ? ? ? ? ? 4. 客戶端再向服務(wù)器端發(fā)送請求的時候裁良,服務(wù)器端也可以接收cookie? ? Cookie[] request.getCookies()
? ? ? ? ? ? ? ? ? ? Cookie的原理:
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1.要在服務(wù)器端創(chuàng)建一個Cookie對象凿将,將數(shù)據(jù)保存到會話中
? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.服務(wù)器會發(fā)送Cookie的信息給游覽器,之后會將Cookie保存到游覽器端
? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.游覽器會在下次訪問服務(wù)的時候价脾,會攜帶cookie的信息(這些信息會包含在http的請求中)
? ? ? ? ? ? ? ? ? ? ? ? ? ? 4.服務(wù)器端會獲取到游覽器端攜帶的cookie
? ? ? ? ? ? ? ? ? ? 注意:cookie的數(shù)據(jù)類型只能保存非中文字符串類型牧抵。你可以保存多個cookie,一個游覽器只能保存300個cookie
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一個站點最多可以存入20個cookie侨把,每個cookie的大小限制為4kb
? ? ? ? ? ? Servlet 編寫過濾器(filter):
? ? ? ? ? ? ? ? ? ? 實現(xiàn)javax.servlet 的 Filter 接口
? ? ? ? ? ? ? ? ? ? 過濾器的核心攔截都寫在doFilter 里? ?
? ? ? ? ? ? ? ? ? ? ? Filter是一個可重? ? ? ? 用的組件
? ? ? ? ? ? ? ? ? ? ? 創(chuàng)建一個過濾器犀变,實現(xiàn)轉(zhuǎn)換字符編碼集
? ? ? ? ? ? ? ? ? ? ? init()方法:web 應(yīng)用程序啟動時妹孙,web 服務(wù)器將創(chuàng)建Filter 的實例對象,并調(diào)用其init方法弛作,
? ? ? ? ? ? ? ? ? ? ? 讀取web.xml配置涕蜂,完成對象的初始化功能,從而為后續(xù)的用戶請求作好攔截的準(zhǔn)備工作
? ? ? ? ? ? ? ? ? ? (filter對象只會創(chuàng)建一次映琳,init方法也只會執(zhí)行一次)机隙。開發(fā)人員通過init方法的參數(shù),
? ? ? ? ? ? ? ? ? ? ? 可獲得代表當(dāng)前filter配置信息的FilterConfig對象萨西。
? ? ? ? ? ? ? ? ? ? ? ? ? 可以將一個或多個過濾器附加到一個 Servlet 或一組 Servlet有鹿。過濾器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 頁面。
? ? ? ? ? ? ? ? ? ? ? ? ? ? 過濾器是可用于 Servlet 編程的 Java 類谎脯,可以實現(xiàn)以下目的:
? ? ? ? ? ? ? ? ? ? ? ? ? ? 在客戶端的請求訪問后端資源之前葱跋,攔截這些請求。
? ? ? ? ? ? ? ? ? ? ? ? ? ? 在服務(wù)器的響應(yīng)發(fā)送回客戶端之前源梭,處理這些響應(yīng)娱俺。
? ? ? ? ? ? ? ? ? ? ? 一、Filter 的基本工作原理
? ? ? ? ? ? ? ? ? ? ? ? 1废麻、Filter 程序是一個實現(xiàn)了特殊接口的 Java 類荠卷,與 Servlet 類似,也是由 Servlet 容器進行調(diào)用和執(zhí)行的烛愧。
? ? ? ? ? ? ? ? ? ? ? ? 2油宜、當(dāng)在 web.xml 注冊了一個 Filter 來對某個 Servlet 程序進行攔截處理時,它可以決定是否將請求繼續(xù)傳遞給 Servlet 程序怜姿,
? ? ? ? ? ? ? ? ? ? ? ? ? 以及對請求和響應(yīng)消息是否進行修改慎冤。
? ? ? ? ? ? ? ? ? ? ? ? 3、當(dāng) Servlet 容器開始調(diào)用某個 Servlet 程序時沧卢,如果發(fā)現(xiàn)已經(jīng)注冊了一個 Filter 程序來對該 Servlet 進行攔截蚁堤,那么容器不
? ? ? ? ? ? ? ? ? ? ? ? ? 再直接調(diào)用 Servlet 的 service 方法,而是調(diào)用 Filter 的 doFilter 方法但狭,再由 doFilter 方法決定是否去激活 service 方法披诗。
? ? ? ? ? ? ? ? ? ? ? ? 4、但在 Filter.doFilter 方法中不能直接調(diào)用 Servlet 的 service 方法熟空,而是調(diào)用 FilterChain.doFilter 方法來激活目標(biāo)
? ? ? ? ? ? ? ? ? ? ? ? ? Servlet 的 service 方法,F(xiàn)ilterChain 對象時通過 Filter.doFilter 方法的參數(shù)傳遞進來的搞莺。
? ? ? ? ? ? ? ? ? ? ? ? 5息罗、只要在 Filter.doFilter 方法中調(diào)用 FilterChain.doFilter 方法的語句前后增加某些程序代碼,這樣就可以在 Servlet 進行響應(yīng)
? ? ? ? ? ? ? ? ? ? ? ? ? 前后實現(xiàn)某些特殊功能才沧。
? ? ? ? ? ? ? ? ? ? ? ? 6迈喉、如果在 Filter.doFilter 方法中沒有調(diào)用 FilterChain.doFilter 方法绍刮,則目標(biāo) Servlet 的 service 方法不會被執(zhí)行,這樣通過
? ? ? ? ? ? ? ? ? ? ? ? ? Filter 就可以阻止某些非法的訪問請求挨摸。
? ? ? ? ? ? ? ? ? ? 配置:web.xml中
? ? ? ? ? ? ? ? ? ? ? ? 過濾器
? ? ? ? ? ? ? ? ? ? ? ? ? ? <filter>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <filter-name>characterenconding</filter-name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <filter-class>com.foreknow.fliter.CharacterEncodingFilter</filter-class>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <init-param>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //局部初始化
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <param-name>encoding</param-name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <param-value>UTF-8</param-value>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </init-param>
? ? ? ? ? ? ? ? ? ? ? ? ? ? </filter>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <filter-mapping>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <filter-name>characterenconding</filter-name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <url-pattern>/*</url-pattern>? ? ? ? ? ? //全部請求都被攔截執(zhí)行過濾器
? ? ? ? ? ? ? ? ? ? ? ? ? ? </filter-mapping>
? ? ? ? ? ? ? ? ? ? ? ? 配置映射
? ? ? ? ? ? ? ? ? ? ? ? ? ? <servlet>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <servlet-name>login</servlet-name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <servlet-class>com.foreknow.controller.LoginServlet</servlet-class>
? ? ? ? ? ? ? ? ? ? ? ? ? ? </servlet>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <!--? 映射標(biāo)簽-->
? ? ? ? ? ? ? ? ? ? ? ? ? ? <servlet-mapping>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <servlet-name>login</servlet-name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <!--映射地址? ? -->
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <url-pattern>/login</url-pattern>
? ? ? ? ? ? ? ? ? ? ? ? ? ? </servlet-mapping>
? ? ? ? ? ? ? ? JavaWeb前端中的jsp的一些寫法:
? ? ? ? ? ? ? ? ? ? ? 表單提交:
? ? ? ? ? ? ? ? ? ? ? ? ? ? 僅僅是表單提交的話孩革,用button 設(shè)置type 為submit ,表單信息會根據(jù)每一個input 的name值自動讀取信息得运,返回后臺
? ? ? ? ? ? ? ? ? ? ? ? ? ? jsp: (發(fā)送數(shù)據(jù))
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <form action="test02" method="post">
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <span>名字</span> <input name="name" type="text"> <br><br>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <span>年齡</span> <input name="age" type="text"> <br><br>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <span>學(xué)校</span> <input name="school" type="text"> <br><br>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <span>郵箱</span> <input name="email" type="text"> <br><br>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <button type="submit">確定提交</button>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </form>
? ? ? ? ? ? ? ? ? ? ? ? ? ? .class (接受數(shù)據(jù))
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String name = req.getParameter("name");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String age = req.getParameter("age");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String school = req.getParameter("school");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String email = req.getParameter("email");
全局初始化參數(shù)
<context-param>
? ? <param-name>username??????? (key)
? ? <param-value>liuweiyi????????????? (value)
</context-param>
想再添加必須再寫一個context-param
局部初始化參數(shù)
寫在Servlet 或 Filter 里的參數(shù)
<init-param>
? ? <param-name>username
? ? <param-value>77777777
</init-param>
讀取參數(shù)
//? ? ? 接受全局變量信息
? ? ? ? ServletContext servletContext =this.getServletContext();
? ? ? ? String username = servletContext.getInitParameter("username");
? ? ? ? out.println("全局信息是"+username);
//? ? ?? 接受局部信息
? ? ? ? ServletConfig servletConfig =this.getServletConfig();
? ? ? ? String username1 = servletConfig.getInitParameter("username");
? ? ? ? out.println("局部信息是"+username1);