1、請求servlet的過程html
1、從瀏覽器發出請求到web容器java
2、web容器建立HttpServletRequest和HttpServletResponse兩個類型的對象web
3、調用servlet中service方法,而且將request和response兩個對象傳遞給方法數組
4、建立PrintWriter輸出流瀏覽器
5、將輸出流響應給客戶端瀏覽器安全
2、service()與doGet()和doPost()方法的關係服務器
service根據請求方式若是是get請求調用doGet()方法,若是是post請求調用doPost()方法session
3、項目的上下文路徑app
request.getContextPath();jsp
4、Servlet生命週期
1、裝載Servlet類
2、建立Servlet實例
3、調用init()方法:初始化方法,前3步在第一次發送請求時執行
4、調用service()方法:每次向Servlet發送請求時調用一次
5、調用destroy()方法:銷燬方法,關閉服務器時調用
5、loadOnStartUp
1、配置Servlet類在啓動服務器時完成初始化
2、配置每一個Servlet初始化的順序,數字小的先初始化
3、web.xml配置
<servlet>
<servlet-name>demo2</servlet-name>
<servlet-class>com.jnmd.servlet.DemoServlet2</servlet-class>
<!-- 配置Servlet啓動 -->
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>demo2</servlet-name>
<url-pattern>/demoServlet2</url-pattern>
</servlet-mapping>
4、註解配置
@WebServlet(urlPatterns="/DemoServlet1" , loadOnStartup=5)
6、JSP的生命週期
1、Jsp文件轉換爲Servlet類
2、編譯Servlet類爲字節碼文件
3、裝載Servlet類
4、建立Servlet實例
5、調用_jspInit()方法:初始化,前5步第一次發送請求時執行
6、調用_jspService()方法:每次發送請求調用一次
7、調用_jspDestroy()方法:關閉服務器時執行
1、三種元素
1、腳本元素
(1)註釋
html註釋:<!-- -->:在網頁源碼能夠看到的
JSP註釋:<%-- --%>
Java註釋:<% /**/ //%>
(2)聲明標籤:<%! %>
能夠聲明變量、常量、方法,使用訪問控制修飾符
(3)Scriptlet標籤:<%%>
任意的Java代碼
(4)表達式輸出:<%=%>
輸出任意的表達式(常量表達式、變量表達式)
2、指令元素
<%@ 指令元素 屬性名="屬性值"%>
(1)page指令
import:導包
contentType:設置MIME類型
pageEncoding:字符編碼
(2)include指令
file:包含文件的路徑
(3)taglib指令
3、動做元素
(1)動態包含:<jsp:include></jsp:include>
(2)能夠向包含的文件中傳遞參數
<jsp:param name="參數名" value="參數值"></jsp:param>
(3)頁面轉發:<jsp:forward page="轉發的頁面"></jsp:forward>
服務器端跳轉:轉發了頁面可是url地址不會發生改變
2、四個做用域
1、page:同一個jsp頁面
2、request:同一次請求(同一個url)
3、session:同一次會話(同一個瀏覽器窗口)
4、application:同一次應用(從服務器啓動到關閉)
5、向做用域中存儲數據:setAttribute("名字",存儲的數據)
6、從做用域中獲取數據:getAttribute("名字")
7、page範圍過小,application範圍太大,不多使用,絕大多數使用request和session
3、9個隱含對象
1、request
(1)getContextPath():獲取上下文路徑
(2)getRequestURI():獲取請求地址
(3)getParameter("參數名"):獲取請求參數(包含、頁面轉發、超連接、表單)
2、response
(1)sendRedirect("頁面地址"):地址重定向
3、out:輸出流
4、session:會話
在servlet類中建立session對象:request.getSession()
5、application
在servlet類中建立application對象
request.getServletContext()
6、config
7、page
8、pageContext
9、exception
4、聲明標籤與java代碼塊聲明變量的區別
1、聲明標籤聲明的變量是實例變量
2、java代碼塊中聲明的變量是service方法中的局部變量
5、指令包含與動做元素包含區別
1、指令元素包含:靜態包含,先包含內容再執行
2、動做元素包含:動態包含,先各自執行,再包含執行結果,在動做元素中能夠向包含的頁面傳遞參數。
6、服務器端跳轉與客戶端跳轉的區別
1、服務器端跳轉:<jsp:forward></jsp:forward>,地址欄不發生改變,兩個頁面在同一次請求中,可使用request做用域共享數據
2、客戶端跳轉:地址欄發生改變,兩個頁面不在同一次請求可是在同一次會話中,可使用session做用域共享數據。
(1)超連接
(2)地址重定向:response.senRedirect("頁面地址")
1、<jsp:useBean></jsp:useBean>
1、建立一個類的對象,而且存儲到做用域中
2、id:對象名(存儲到做用域中的名稱)
3、class:類的全名稱
4、scope:做用域,缺省是page
二:<jsp:setProperty></jsp:setProperty>
1、爲對象的屬性賦值
2、<jsp:setProperty name="useBean的id名稱" property="屬性名"></jsp:setProperty>:將表單中property="屬性名"名字的表單參數自動賦值給類中的同名的屬性。
3、<jsp:setProperty name="useBean的id名稱" property="屬性名" param="表單參數名">:將表單中param="表單參數名"自動賦值給類中property="屬性名"的屬性。
4、<jsp:setProperty name="useBean的id名稱" property="屬性名" value="數值">:將value值賦值給類中屬性
5、<jsp:setProperty name="useBean的id名稱" property="*">:將表單中全部的表單參數自動賦值給類中同名的屬性。
3、<jsp:getProperty></jsp:getProperty>
1、輸出對象的屬性值
2、name:useBean的id名稱
3、property:對象的屬性名
4、EL表達式
1、獲取做用域中的屬性
(1)page做用域:${pageScope.屬性名}
(2)request做用域:${requestScope.屬性名}
(3)session做用域:${sessionScope.屬性名}
(4)application做用域:${applicationScope.屬性名}
(5)${屬性名}:按照page-request-session-application的順序依次從做用域中獲取屬性,直到獲取到爲止。
(6)若是做用域中的屬性是一個對象,獲取對象的屬性值
${做用域中的屬性名.對象的屬性名}
2、獲取請求參數
(1)單個值:${param.參數名}
(2)多個值:${paramValues.參數名}
3、EL表達式中的運算符
(1)算數運算符:+ - * / %
(2)比較運算符:> < >= <= == != empty not empty
(3)邏輯運算符:&& || !
4、輸出上下文參數:${pageContext.request.contextPath}
5、JSTL核心標籤庫
1、在做用域中聲明變量
<c:set var="變量名" value="數值" scope="做用域,默認是page">
2、條件判斷
<c:if test="${條件}" var="將test運算結果存儲成一個變量" scope="將test運算結果存儲到做用域中">
若是條件爲true執行標籤體,不然不執行
</c:if>
3、迭代集合、迭代器對象、數組、枚舉、以逗號分隔的字符串
(1)
<c:forEach items="${做用域中的對象}" var="自定義循環變量名" varStatus="自定義狀態變量名">
循環體
</c:forEach>
(2)狀態
狀態變量名.count:從1開始的每次循環遞增1的數字
狀態變量名.index:從0開始的每次循環遞增1的數字
4、循環次數
<c:forEach begin="起始值" end="終止值" step="循環變量自增值">
循環體
</c:forEach>
5、地址
(1)<c:url value="url地址" var="將地址聲明爲一個變量" scope="將變量存儲到做用域中">
(2)url地址前沒有/:相對路徑
(3)url地址前有/:絕對路徑(相對於上下文的路徑)
1、過濾器
1、攔截資源的請求和響應。
2、Filter接口
(1)init(FilterConfig config):初始化方法,啓動服務器時執行
(2)doFilter(ServletRequest request , ServletResponse response , FilterChain chain):執行過濾功能,向攔截的資源發送請求響應的時候執行
(3)destroy():銷燬方法,關閉服務器時執行
3、FilterChain接口
(1)doFilter(ServletRequest request,ServletResponse ,response):放過請求
1、監聽器
1、做用:當web容器中的request、session、ServletContext發生變化時會自動響應對應的方法。
2、ServletContextListener接口
(1)contextInitalized(SerlvetContextEvent sce):啓動服務器時執行
(2)contextDestroyed(ServletContextEvent sce):關閉服務器時執行
3、ServletContextAttributeListener接口
(1)attributeAdded(ServletContextAttributeEvent scae):向application做用域中添加屬性時執行
(2)attributeReplaced(ServletContextAttributeEvent scae):修改application做用域中屬性時執行
(3)attributeRemoved(ServletContextAttributeEvent scae):刪除application做用域中屬性時執行
4、HttpSessionListener接口
(1)sessionCreated(HttpSessionEvent hse):瀏覽器第一次發送請求時執行
(2)sessionDestroyed(HttpSessionEvent hse):會話超時或調用invilidate()方法
5、HttpSessionAttributeListener接口
(1)attributeAdded(HttpSessionBindingEvent hsbe):向session做用域中添加屬性時執行
(2)attributeReplaced(HttpSessionBindingEvent hsbe):修改session做用域中屬性時執行
(3)attributeRemoved(HttpSessionBindingEvent hsbe):刪除session做用域中屬性時執行
6、ServletRequestListener接口
(1)requestInitialized(ServletRequestEvent sre):發送請求時執行
(2)requestDestroyed(ServletRequestEvent sre):請求結束時執行
7、ServletRequestAttributeListener接口
(1)attributeAdded(ServletRequestAttributeEvent srae):向request做用域中添加屬性時執行
(2)attributeRemoved(ServletRequestAttributeEvent srae):從request做用域中刪除屬性時執行
(3)attributeReplaced(ServletRequestAttributeEvent srae):修改request做用域中屬性時執行
一個客戶端瀏覽器發送的請求,也就是同一次會話。
2、Cookie與Session
1、Session是將數據保存到服務器端,安全可是速度慢
2、Cookie是將數據保存到客戶端瀏覽器,不安全可是速度快
3、Session的超時時間:默認是30分鐘
<session-config>
<session-timeout>超時的時間單位分鐘</session-timeout>
</session-config>
4、Cookie的API
1、建立Cookie對象
new Cookie("名" , "值");
2、獲取Cookie對象的名稱
getName()
3、獲取Cookie對象的值
getValue()
4、設置Cookie的存活時間
setMaxAge(存活時間單位是秒)
5、將Cookie對象保存到客戶端瀏覽器
response.addCookie(Cookie對象);
6、從客戶端瀏覽器獲取Cookie對象
request.getCookies()