目錄
1
1.1 前臺
1.1.1 程序開發體系
B/S是Brower/Server的縮寫,即瀏覽器/服務器結構。
C/S是Client/Server的縮寫,即客戶端/服務器模式。
1.1.2 Web應用概述
Web使用超文本技術將Internet上的資源以網頁的形式展示出來;
Internet採用超文本和超媒體的信息組織形式,將信息的鏈接擴展到整個Internet上。
Web構成
服務器:包括物理設備和軟件應用程序,物理設備指遠程計算機;軟件應用程序是應用程序,Apache,Tomcat等。
客戶端:通常指客戶使用的本地計算機。
Web應用
Web應用程序是一種使用Web訪問的應用程序。例如:百度。Web應用程序是一種使用HTTP作爲核心通信協議
Web服務器:Web服務器只負責處理HTTP協議,只能發送靜態頁面的內容。Apache、IIS、Nginx。
Web應用服務器:提供訪問商業邏輯的途徑以供客戶端應用程序使用,Tomcat
1.2 JSP
Tomcat搭建
目錄:
bin: 可執行文件(startup.bat, shutdown.bat)
conf: 配置文件(server.xml)
lib: tomcat依賴的jar文件
log:日誌文件(記錄出錯等信息)
temp:臨時文件
webapps: 可執行的項目(將我們開發的項目放入該目錄)
work: 存放由Jsp翻譯成的java(servlet類文件)以及編譯成的class文件
初始頁面的設置(web.xml中)
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
1.2.1 JSP執行流程
第一次訪問:服務端JSP翻譯成JAVA,再將JAVA編譯成class文件。
第二次訪問:不需要翻譯和編譯過程,而是直接訪問。
1.2.2 JSP的頁面元素
(1)訪問方式
A.<%局部變量、java語句 %>
B.<%!字段、方法 %>
C.<%=表達式 %>
(2)Page指令:
<%@ page %>
Page指定的屬性:
Language:jsp頁面使用的腳本語言
pageEncoding: jsp文件自身編碼 jsp->java
contentType:瀏覽器解析jsp的編碼
import: java代碼需要使用的類的包的導入
(3)註釋:
Html註釋<!-- -->
Java註釋// /*…*/
Jsp 註釋 <%-- --%>
用戶可以通過瀏覽器查看到Html註釋;而另外兩個註釋看不到。
1.2.3 JSP內置對象
Out:
輸出對象,功能是向客戶端輸出內容 Out.Print println
Request:
請求對象,存儲“客戶端向服務端發送的請求信息”
String getParameter(String name) : 根據請求的字段名key,返回字段值value
String[] getParameterValues(String name): 根據請求的字段名key,返回多個字段值value(checkbox)
Void setCharacterEncoding(String charset):設置post請求編碼
getRequestDispatcher(“b.jsp”).forward(request,response); 請求轉發的方式跳轉頁面 ->b.jsp
getServletContext(): 獲取項目的ServletContext對象
Response:
響應對象
Void addCookie(Cookie cookie):服務端想客戶端增加一個cookie對象
Void sendRedirect(String location) throws IOException: 頁面跳轉的一種方式(重定向)
Void setContentType(String type):設置服務端響應的編碼(設置服務端的contentType類型)
Session(服務端):
session存儲在服務端
session是在同一個用戶(客戶)請求時共享
session實現機制:第一次請求時產生一個sessionid並賦值給cookie的jsessionid,然後發送給客戶端,最終實現session的sessionid與cookie的jsessionid一一對應
String getID:獲取sessionID
Bool isNew():判斷是否是第一次訪問(新用戶)
Void invalidate();使session失效。(退出或註銷)
Object getAttribute()
void setAttribute()
void removeAttribute(String name)
void setMaxInactiveInterval(秒):設置最大有效 非活動時間
void getMaxInactiveInterval():獲取最大有效 非活動時間
Application 全局對象
String getContextPath():虛擬路徑
String getRealPath(String name):絕對路徑(虛擬路徑相對應的絕對路徑,tomcat中可能會有多個虛擬路徑)
跳轉的兩種方法
Cookie(客戶端,不是內置對象):服務端產生的,再發送到客戶端保存
Sesson和Cookie區別
Get提交方式
(1)統一每一個變量的編碼new String(name.getBytes(舊編碼),新編碼);//不推薦
(2)修改server.xml,URIEncoding="utf-8"
Post提交方式
設置post編碼,request.setCharacterEncoding(“utf-8”);
1.3 Servlet
MVC設計模式
Model ,模型
View,視圖
Controller,控制器
Servlet
Java類符合以下的規範:
- 必須繼承javax.servlet.http.HttpServlet
- 重寫其中的doGet()或doPost()方法
- 必須進行配置
Web.xml
<servlet>
<servlet-name>...</servlet-class>
<servlet-class>...</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>...</servlet-name>
<url-pattern>...</url-pattern>
</servlet-mapping>
Servlet3.0後使用@Servlet。
不需要在web.xml中配置,但需要在Servlet類的定義上面編寫註解@WebServlet(“url-mapping”)。
ServletConfig 對象是 Servlet 的專屬配置對象,每個Servlet都單獨擁有一個 ServletConfig 對象,用來獲取 web.xml 中的配置信息:
ServletContext.getServletContext():獲取Servlet上下文對象。(就是jsp中的application)
常見方法:
getRealPath():絕對路徑
getContextPath():相對路徑
setAttribute()
getAttribute()
String getInitParameter(String name):在當前Web容器範圍內,獲取名爲name的參數值(初始化參數)
2
2.1 名詞解釋
HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是因特網上應用最爲廣泛的一種網絡傳輸協議
URL(Uniform Resource Locator,統一資源定位符),它是WWW的統一資源定位標誌,就是指網絡地址。組成:協議類型、主機名和路徑及文件名。
MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用一種應用程序來打開的方式類型
HTML: 超文本標記語言(英語:HyperText Markup Language,簡稱:HTML)
CSS: 層疊樣式表(英文全稱:Cascading Style Sheets)是一種用來表現HTML(標準通用標記語言的一個應用)或XML(標準通用標記語言的一個子集)等文件樣式的計算機語言。
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼.
2.2 get/post區別
1.url可見性
get傳參方式是通過地址欄URL傳遞,是可以直接看到get傳遞的參數,post傳參方式參數URL不可見,get把請求的數據在URL後通過?連接,通過&進行參數分割。psot將從參數存放在HTTP的包體內
2.傳輸數據大小
get傳遞數據是通過URL進行傳遞,對傳遞的數據長度是受到URL大小的限制,URL最大長度是2048個字符。post沒有長度限制
3.後退頁面
get後退不會有影響,post後退會重新進行提交
4.緩存
get請求可以被緩存,post不可以被緩存
5.編碼方式
get請求只URL編碼,post支持多種編碼方式
6.歷史記錄
get請求的記錄會留在歷史記錄中,post請求不會留在歷史記錄
7 字符類型
get只支持ASCII字符,post沒有字符類型限制
2.3 JSP工作原理
1. 當用戶訪問一個JSP頁面時,會向一個Servlet容器(Tomcat等)發出請求;
2. 如果是初始次訪問或頁面有所改動,則servlet容器首先要把JSP頁面轉化爲Servlet代碼,即翻譯成Java,再將其轉化爲class文件;
3. JSP容器負責調用從JSP轉換來的servlet,這些servlet負責提供服務相應用戶請求;如果用戶有多個請求,則容器會建立多個線程處理多個請求;
4. 容器執行字節碼文件,並將其結果返回到客戶端;
2.4 Servlet工作原理
web服務器接受到一個http請求後,web服務器會將請求移交給servlet容器,servlet容器首先對所請求的URL進行解析並根據web.xml配置文件找到相應的處理servlet, 同時將request、response 對象傳遞給它,servlet在處理完請求後會把所有需要返回的信息放入response對象中並返回到客戶端,servlet 一旦處理完請求,servlet 容器就會刷新response對象,並把控制權重新返回給web服務器。
Servlet流程
請求-><url-pattern>->根據<servlet-mapping>中的<servlet-name>去匹配<servlet>中的<servlet-name>,然後尋找到<servlet>中的<servlet-class>,最終將請求交由對應的class執行。
2.5 Java Beans特點
JAVABean
(1)public修飾的類,public無參構造函數
(2)所有屬性都是private,並提供get/set,如果返回boolean,則可以是is/get
使用層面,java分爲兩大類:
封裝業務邏輯的JavaBean
封裝數據的JavaBean
2.6 JSP作用域
pageContext:Jsp頁面容器,當前頁面有效,跳轉後無效
Request: 請求對象,存儲“客戶端向服務端發送的請求信息”,同一次請求有效,其他請求無效(請求轉發有效,重定向後無效)
Session(服務端):會話:同一次會話有效,無論怎麼跳轉都有效;關閉/切換瀏覽器後無效;登錄-》退出之間全部有效
Application 全局對象:當前項目全局有效(整個項目運行期間有效;切換瀏覽器仍然有效),但是服務器關閉,則無效
2.7 Spring MVC原理
Spring MVC是Spring提供的一個實現了Web MVC設計模式的輕量級Web框架。
流程說明:
(1)客戶端(瀏覽器)發送請求,直接請求到DispatcherServlet。
(2)DispatcherServlet根據請求信息調用HandlerMapping,解析請求對應的Handler。
(3)解析到對應的Handler後,開始由HandlerAdapter適配器處理。
(4)HandlerAdapter會根據Handler來調用真正的處理器開處理請求,並處理相應的業務邏輯。
(5)處理器處理完業務後,會返回一個ModelAndView對象,Model是返回的數據對象,View是個邏輯上的View。
(6)ViewResolver會根據邏輯View查找實際的View。
(7)DispaterServlet把返回的Model傳給View。
(8)通過View返回給請求者(瀏覽器)
2.8 控制反轉
Ioc—Inversion of Control,即“控制反轉”,是一種設計思想。
IOC 容器具有依賴注入功能的容器,它可以創建對象。
傳統應用程序設計中,我們直接在對象內部通過new進行創建對象,是程序主動去創建依賴對象,也就是正轉;
在使用Spring框架之後,對象的實例不再由調用者來創建,而是由Spring容器來創建,Spring容器會負責控制程序之間的關係,而不是由調用者的程序代碼直接控制。這樣,控制權由應用代碼轉移到了Spring容器,控制權發生了反轉,這就是控制反轉。
Spring 提供了以下兩種不同類型的容器。
Spring BeanFactory 容器
XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("Beans.xml"));
Spring ApplicationContext 容器
ApplicationContext context =new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
<property name="message" value="Hello World!"/>
</bean>
2.9 依賴注入
控制反轉最常用的方式叫做依賴注入(Dependency Injection,簡稱DI),
從Spring容器的角度來看,Spring容器負責將被依賴對象賦值給調用者的成員變量,這相當於爲調用者注入了它依賴的實例,這就是Spring的依賴注入。
Spring 基於構造函數的依賴注入,當容器調用帶有一組參數的類構造函數時,基於構造函數的 DI 就完成了,其中每個參數代表一個對其他類的依賴。
Spring 基於設值函數的依賴注入,當容器調用一個無參的構造函數或一個無參的靜態 factory 方法來初始化你的 bean 後,通過容器在你的 bean 上調用設值函數,基於設值函數的 DI 就完成了。
3.0 AOP
AOP的全稱是Aspect-Oriented Programming,即面向切面編程(也稱面向方面編程)。它是面向對象編程(OOP)的一種補充.
AOP採取橫向抽取機制,將分散在各個方法中的重複代碼提取出來,然後在程序編譯或運行時,再將這些提取出來的代碼應用到需要執行的地方。