JavaWeb 筆記

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);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膝蜈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子熔掺,更是在濱河造成了極大的恐慌饱搏,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件置逻,死亡現(xiàn)場離奇詭異推沸,居然都是意外死亡,警方通過查閱死者的電腦和手機券坞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門鬓催,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恨锚,你說我怎么就攤上這事宇驾。” “怎么了眠冈?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵飞苇,是天一觀的道長。 經(jīng)常有香客問我蜗顽,道長布卡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任雇盖,我火速辦了婚禮忿等,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崔挖。我一直安慰自己贸街,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布狸相。 她就那樣靜靜地躺著薛匪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪脓鹃。 梳的紋絲不亂的頭發(fā)上逸尖,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音,去河邊找鬼娇跟。 笑死岩齿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苞俘。 我是一名探鬼主播盹沈,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吃谣!你這毒婦竟也來了乞封?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤基协,失蹤者是張志新(化名)和其女友劉穎歌亲,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澜驮,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡陷揪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了杂穷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悍缠。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖耐量,靈堂內(nèi)的尸體忽然破棺而出飞蚓,到底是詐尸還是另有隱情,我是刑警寧澤廊蜒,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布趴拧,位于F島的核電站,受9級特大地震影響山叮,放射性物質(zhì)發(fā)生泄漏著榴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一屁倔、第九天 我趴在偏房一處隱蔽的房頂上張望脑又。 院中可真熱鬧,春花似錦锐借、人聲如沸问麸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽严卖。三九已至,卻和暖如春布轿,著一層夾襖步出監(jiān)牢的瞬間哮笆,已是汗流浹背俺亮。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疟呐,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓东且,卻偏偏與公主長得像启具,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子珊泳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348