-
理解“動”態網站
HTML、CSS、JavaScript(動態效果)——(界面層,運行在客戶端瀏覽器);
Java、SQL、JSP、Servlet——(運行在服務器)
上邊老師總結的,不看,看下邊的
動態網站指數據是活的,也就是說數據是存在數據庫中的,靜態網站是指數據就在前端頁面上,如果要改靜態頁面上的數據,就得改代碼。靜態網站上有種東西叫JavaScript,這個只是搞一些動態效果或者和後端交互數據(Ajax),有這個不叫動態網站。 -
JavaBean
javaBean分爲實體JavaBean和業務JavaBean
實現實體的JavaBean,叫做封裝數據的JavaBean,俗稱實體類(entity)。
實現功能的JavaBean,叫做封裝業務的JavaBean,比如dao,biz。
典型的JavaBean,是指封裝數據的JavaBean(entity),它的特徵:
(1) 必須是public類
(2) 私有成員變量(private)
(3) public的無參構造方法
(4) 圍繞每個屬相生成set方法和get方法 -
JSP工作原理
第1次執行JSP頁面時,經過轉譯(.jsp->.java)、編譯(.java->.class)、執行的過程。
第2次以後再執行時,直接執行.class,這個.class就是Servlet。
例題:
JSP文件在第一次運行的時候被JSP引擎編譯爲( A )文件
A. Servlet
B. Class
C. HTML
D. XML -
HTTP協議發送消息的方法:get和post
get方法特徵:明文傳輸數據,發送數據大小有限制。<form method="GET"> … </form> <a href="#">…</a> response.sendRedirect("list.jsp?boardId=1");
post方法特徵:密文傳輸數據,發送數據大小沒有限制。
<form method="post"> … </form>
post相比get要安全點兒
-
HTTP協議具有"無狀態"的特點。
點擊超鏈接<a>
,相當於發起新的HTTP鏈接,產生一個新的request對象。 -
HTML
<form method="post" action="……"> <input type="text" name="username" id="username"/> <input type="hidden" name="temp" value="123"/> <!--隱藏表單域 --> </form> <a href="next.jsp?a=1&b=2&c=3"></a> <!--下級目錄,上級目錄,根目錄--> <!--下級 直接寫 next.jsp--> <!--上級 ../next.jsp--> <!--根目錄 /next.jsp--> <!-- URL重寫 (重定向)--> response.sendRedirect("list.jsp?boardId=1");
-
JSP指令元素包括:page、include、taglib
(1) jsp中import可以有多個
(2) jsp中的include有兩種,一種是靜態引入(<%@ include file = frangmentURL%>
),一種是動態引入(<jsp:include page= frangmentURL />
),前者的頁面將會直接插入包含該頁面中該指令的位置,然後jsp編譯器再對合成的文件進行編譯,最終編譯的頁面只有一個;後者的jsp程序將會將請求forward到被包含頁面,並將執行結果放入輸出至瀏覽器中,並返回頁面繼續執行後面的代碼,包含文件和被包含文件將會分別編譯。簡單來說,前者得到一個Servlet,後者得到兩個Servlet。
(3) 當jsp頁面使用第三方標籤庫時,使用taglib指令"導包",url是第三方標籤庫定義的,prefix是標籤的前綴,使用這個庫裏的標籤時,前邊要加一個前綴。<%@ page import="entity.*,dao.*,java.util.Date" contentType="text/html;charset=utf-8" %> <%@include file="other.jsp"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <c:out value="renliang"></c:out>
-
JSP腳本元素包括:表達式(<%=… %>)、腳本代碼(<%… %>)、聲明(<%!… %>)
例題:
JSP標記都是以<%
或<jsp
開頭,以%>
或/>
結尾。 -
9個內置對象: response、out、request、pageContext、session、application、config、exception、page
常用的:request、response、out、pageContext、session、application
比較作用域範圍:pageContext、request、session、application
(1) pageContext:當前頁面(默認的作用域)<% pageContext.setAttribute("color","yellow");%> <%=pageContext.getAttribute("color")%> <!--用JSP表達式輸出 --> ${pageScope.color} <!--用EL表達式輸出 --> <c:forEach item="list" var="obj"> <!—obj默認是定義在pageContext內置對象中 --> …${obj.attr} </c:forEach>
(2) request:當次HTTP鏈接中
String變量名 = request.getParameter("變量名"); request. setAttribute("變量名",值); request. getAttribute("變量名");
(3) session:當前會話中(只要不註銷session即關閉瀏覽器)
如果當前已展開會話,就返回當前session對象;如果當前沒有session,創建一個新的session對象:HttpSession session = request.getSession(); HttpSession session = request.getSession(true);
如果當前已展開會話,就返回當前session對象;如果當前沒有session,返回null:
HttpSession session = request.getSession(false);
(4) application:整個應用程序(所有頁面、所有會話,只要服務器不關)
一般用於計數的
例題:
request內置對象代表了客戶端的請求信息,主要用於通過HTTP協議傳送給服務端的數據。out對象主要用來向客戶輸出各種數據類型的內容。
page對象用於指定當前JSP本身。
pageContext對象提供了對JSP頁面內使用到的所有對象及名稱空間的訪問。
application對象保存應用程序中公有的數據。
response對象實現了HttpServletResponse接口,可對客戶的請求作出動態響應,向客戶端發送數據。
如果希望在多個頁面間共享數據,可以使用(A)作用域
A. request,session
B. application.session
C. request,application
D. pageContext,request -
頁面跳轉的兩種方式:重定向和轉向的區別
重定向:response.sendRedirect("index.jsp");
相當於發起新的HTTP鏈接;
地址欄會發生變化;
效率低;
安全性較高。
轉向:request.getRequestDispatcher("index.jsp").forward(request,response);
不發起新的HTTP鏈接,服務器內部資源的跳轉;
地址欄不變化;
效率較高。 -
EL表達式支持關鍵字:eq、ne、lt等等、empty
算數運算符 描述 ( ) 括號,改變運算優先級 - 負號 *,/(div),%(mod) 乘除取餘,若除以0,返回值爲無窮大而不是錯誤 +,- 加減 關係運算符 說明 範例 結果 ==或eq 等於 ${5==5}或${5eq5} true !=或ne 不等於 ${5!=5}或${5ne5} false <或lt 小於 ${3<5}或${3lt5} true >或gt 大於 ${3>5}或${3gt5} false <=或le 小於等於 ${3<=5}或${3le5} true >=或ge 大於等於 ${3>=5}或${3ge5} false 邏輯運算符 範例 &&或and ${A && B}或${A and B} ||
或or${A ||
B}或${A or B}!或not ${!A}或${not A} empty主要判斷值是否爲空
${empty A}
條件運算符 ${A?B:C}
例題:
EL表達式,${10 mod 3}的執行結果爲( B )
A. 10 mod 3
B. 1
C. 3
D. null -
EL表達式與JSP表達式區別:
EL表達式取出一個變量的值時,要求這個變量必須來自某個內置對象中;<!--name 必須來自pageScope、requestScope、sessionScope或applicationScope作用域--> ${name}
JSP表達式取出一個變量的值時,這個變量是一個局部變量;
<%=name%>
EL表達式,如果表達式結果爲NULL,不會有任何顯示;
JSP表達式,如果表達式結果爲NULL,顯示NULL。
給定以下JSP代碼片段,有2個客戶依次瀏覽該JSP;且每個客戶只瀏覽一次,第2個客戶會看到瀏覽器顯示(A)<% int x = 1; %> <%! int x = 10; %> X = <%=x %>
A. x = 1
B. x = 2
C. x = 10
D. x = 11 -
JSTL標籤:Core庫和Format庫
Core庫:<c:if test="${}">…</c:if> <c:choose> <c:when test="${}"> …. </c:when> <c:otherwise> …. </c:otherwise> </c:choose> <c:forEach item="${list}" var="obj" > …${obj.attr} </c:forEach>
Format庫:格式化日期或數字,本地化和國際化
<fmt:formatNumber />、<fmt:formatDate>
-
Servlet的理解
Servlet繼承javax.servlet.http.HttpServlet類。
HttpServlet是抽象類,它的Http處理方法只有定聲明沒有具體實現。
開發Servlet類,一般需要重寫**doGet( )或doPost( )**方法。
例題:
Servlet的優點有(ABC)
A. 執行效率高
B. 可移植性好
C. 功能強大
D. 運行速度快
Servlet和JSP的區別是(BCD)
A. 性能更強
B. 編程方式不同
C. 運行速度不同
D. 編譯順序不同 -
Servlet的訪問:web.xml中配置
<servlet> <servlet-name>firstServlet</servlet-name> <servlet-class>servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>firstServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
-
Servlet的生命週期:
加載類實例化
init()初始化
請求處理
destroy()
第1次訪問某Servlet時,會調用init()方法;
之後訪問Servlet的doGet()或doPost()方法;
關閉服務器時候,會調用destroy()方法。
例題:
當訪問一個Servlet時,以下Servlet中的哪個方法先被執行( D )
A. destroy
B. doGet()
C. service()
D. init() -
session對象是HttpSession接口類型;application對象是ServletContext接口類型。
-
過濾器
<filter> <filter-name> EncodingCharacterFilter </filter-name> <filter-class> filter. EncodingCharacterFilter </filter-class> </filter> <filter-mapping> <filter-name> EncodingCharacterFilter </filter-name> <url-pattern>/admin/*</url-pattern > </filter-mapping>
例題:
編寫一個filter,需要( B )
A. 繼承Filter類
B. 實現Filter接口
C. 繼承HttpFilter類
D. 實現HttpFilter接口
在編寫過濾器時,需要完成的方法(A)
A. doFilter()
B. doChain()
C. doPost()
D. doDelete() -
Model1和Model2模型對比
Model1是JSP+JavaBean
Model2是JSP+Servlet+JavaBean
Model1中,JSP頁面獨自響應請求,並將處理結果返回客戶端,所有的數據通過Bean來處理,JSP頁面顯示數據。Model實現了視圖層和業務層的分離。大量Model1會使JSP頁面嵌入大量腳本代碼,使整個頁面程序變得很複雜,造成了代碼開發和維護的困難。
Model2中,通過JSP頁面顯示數據,通過Servlet完成大量的事務處理工作。這樣的話,JSP頁面中沒有任何數據處理邏輯,所有數據處理邏輯均出現在Servlet中。Model2具有更清晰的頁面表現、清楚的開發者角色劃分,做到了基本的前後端分離。
例題:
JSP的兩種體系結構是model1和model2
補充:
- 能夠保留請求作用域中數據的轉向方式是(D)
A. response.forward()
B. response.sendRedirect()
C. session.getRequestDispatcher().forward(request,response)
D. request.getRequestDispatcher().forward(request,response) - Login.jsp爲登錄頁面,表單代碼如下:
<form action="index.jsp" method="post"> <input type="text" name="name" /> <input type="submit" value="login" /> </form>
- index.jsp中直接顯示用戶名,以下哪種代碼正確(C)
A. ${requestScope.name}
B. <%=name %>
C. ${param.name}
D. <%=param.name%> - 按作用域從大到小排列正確的是(D)
A. application,page,request,response
B. session,pageContext,request,application
C. public,application,session,request
D. application,session,request,pageContext - 在編寫Servlet時,需要繼承HttpServlet類,在Servlet中聲明doGet()和doPost()需要HttpServletRequest和HttpServletResponse類型的兩個參數
- jsp主要內置對象有:response、exception、pageContext、request、session、application、out、config、page
- 使用useBean動作標記的時候scope屬性有4種選項,作用範圍由小到大是pageContext、request、session、application,其中session是指當關閉瀏覽器的時候這個javabean失效,application是指當關閉服務器的時候這個javabean失效。
- 三種常用的動態網頁技術是ASP,PHP,JSP
- JSP利用JDBC操作數據庫的步驟:
(1) 加載驅動程序,調用 Class.forName()將自動加載驅動程序類。
(2) 建立連接,若連接字符串爲String url = "jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPwd
,其中dbName、userName和userPwd3個分別代表數據庫名、數據庫的用戶名和密碼
(3) 建立StateMent
(4) 執行sql語句,其中,查詢數據庫裏的表內容是Statement接口使用**executeQuery()**方法
(5) 關閉數據庫
題目來自百度文庫:https://wenku.baidu.com/view/0620ecafd1d233d4b14e852458fb770bf78a3b8a.html和https://www.doc88.com/p-645858552264.html