BS架構:基於瀏覽器的項目(軟件)
CS架構:基於客戶端服務器端的應用
web資源:我們電腦中的圖片,音頻,視頻,頁面。。。。。
服務器(tomcat):用來共享資源,也叫web容器
Tomcat的目錄結構:
如何訪問tomcat共享的資源:
http://10.1.5.170:8080/aa/個人首頁.html
改端口號:
Eclipse使用
1. 修改工作空間字符編碼
2. 修改默認字體大小
3. 修改右鍵new菜單里面的內容(添加一些選項)
4. Eclipse集成tomcat
5. Tomcat會默認把項目發布到工作空間中的目錄,我們希望tomcat 把項目發布到tomcat自己的webapps目錄下面
6. 創建動態web項目
7. 動態web項目的目錄結構
8. 動態web項目發布
Jsp
Jsp:動態頁面,在html頁面中嵌入java代碼實現動態頁面
1. 導入自定義非jsp頁面模板
2. Jsp語法規則:該了jsp頁面的代碼,必須重啟服務器才能生效
(1) <%%>:該符號中的內容就是java代碼,該符號內的變量是局部變量
(2) <%=%>:輸出變量結果到html頁面
(3) <%!%>:可以定義方法,以及全局變量,在解析的時候會放到類里面
(4) <%---- %>:注釋
3. Jsp頁面的解析:tomcat第一次接收到jsp請求的時候會把整個jsp頁面翻譯成一個java類
(1) Jsp:是在html頁面中嵌入java代碼:html+(ajax,vue.js)
(2) Servlet:是在java代碼嵌入html代碼
4. Jsp九大內置對象:對象不用創建了,我們在jsp頁面直接只用就行
Request:請求對象,封裝的是用戶請求服務的請求的所有數據
getParameter():用於獲取表單數據
setAttribute():往作用域中存值
Out:輸出對象,可以通過該對象對用戶響應html
Response:響應對象
Session:會話對象
Page:相當於this
PageContext:是page作用域,因為只在當前頁面生效,說就叫page作用域了
5. 登錄流程
6. http協議:超文本傳輸協議,使用TCP協議傳輸html
(1) 無連接:一次連接只處理一個請求,請求完成斷開連接
(2) 無狀態:服務器端默認不會存儲任何客戶端的數據(會銷毀request對象)
7. 亂碼問題
(1) Post:設置請求以及響應的對象字符編碼都是utf-8
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
(2) Get:其實tomcat8.0以上默認是支持utf-8
(3) 通過以上兩種方式任然亂碼:例如在跳轉到登陸頁面的時候拼在url后面的中文
① URLEncoder.encode():把中文編譯成16進制編碼
② URLDecoder.decode():把16進制編碼反編譯成中文
8. Get和post區別
(1) Get是默認的提交方式,會把表單里面的數據全部拼接在URL后面,是不安全的,並且get方式提交數據URL后面拼接的數據是有長度限制
(2) Post不會把表單數據顯示在URL后面,長度沒有限制,如果是涉及到密碼的表單一定要使用post方式
9. 跳轉頁面
(1) 重定向:response.sendRedirect("");
① 地址欄顯示的是跳轉過后的頁面路徑
② 一個頁面重定向到另外一個頁面,兩個頁面不會共享同一個request對象
(2) 請求轉發:request.getRequestDispatcher("main.jsp").forward(request, response);
① 地址欄顯示的是跳轉之前的頁面的路徑
② 一個頁面請求轉發到另外一個頁面,兩個頁面共享同一個request對象
10. Cookie相關技術
Cookie是有服務器端產生,通過響應發送給客戶端,客戶端拿到cookie以后以文本的形式存在客戶端本地,之后客戶端向服務器端發送請求的時候都會帶上該客戶端和該服務器端保持的cookie信息
11. 四大作用域:用來保存以及傳遞數據
(1) Page(pageContext):放到page作用域中是數據只有在該頁面生效,一般不會使用
(2) Request:請求作用域,作用范圍是一次請求,當請求完成request會銷毀,放在該作用域中的數據肯定也會清除
① setAttribute():往作用域中設置值
② getAttribute():從request作用域中取值
(3) Session(會話):一次會話包含多個請求,從我們第一次登陸成功(跟服務器建立會話)到瀏覽器關閉,期間所有的請求都在一個會話中,都會貢獻同一個session對象
① setAttribute():往作用域中設置值
② getAttribute():從session作用域中取值
③ setMaxInactiveInterval():設置有效時間,以秒為單位
④ getMaxInactiveInterval():獲取最大有效時間,非活動時間
⑤ Invalidate():注銷session
⑥ getId():獲取sessionID
(4) application:全局變量:整個項目運行期間都有效(切換瀏覽器仍然有效)
注意:不要把數據放到session作用域除非必要,例如登陸信息,如果兩個頁面需 要進行數據傳遞建議使用request,跳轉方式用請求轉發
JDBC開發規范
JDBC開發步驟:
1. 導入jar,並且加載驅動
2. 獲取數據庫連接
3. 獲取PreparedStatement,發送sql語句並且帶回執行結果
4. 關閉資源
1. Pojo層:建議實體類屬性要和數據庫表字段名字一致,如果說表字段單詞之間用_隔開,那么屬性名稱使用駝峰命名法:new_title----->newTitle
2. Dao層:一個dao層的類對應一張表的增刪查改
3. Dao層方法在起名字的時候不要使用get開頭
4. Dao層必須提供接口
5. Dao層方法只能有一個參數
6. 在jsp頁面不能直接調用dao方法,必須通過service層調用
(1) service層(服務層):項目里面的絕大部分業務邏輯是寫在服務層的
JDBCC處理大文本(CLOB)及BLOB(二進制)
clob:大文本數據 字節流 Reader Writer
存
- 先通過pstmt的?代替小說內容(占位符)
- 再通過pstmt.setCharacterStream(2,reader,(Int)file.leng());將上一步的?代替為 小說流 注意:第三個參數需要是類型的
取
- 通過Reader reader = rs.getCharacterStream(“NOVEL”);
- 將Reader通過Writer輸出即可。
blob:二進制 字節流 InputStream OutoutStream
與CLOB步驟一致,區別:setBinaryStream(…) getBinaryStream(…)
2、JavaBean
JavaBean(就是一個java類)的定義:滿足2點就可以稱為JavaBean
① Public修飾的類,public無參構造
② 所有屬性(如果有)都是private,並且提供set/get (如果boolean 則可get可以替換成is)
使用層面,Java分為2類:
① 封裝業務邏輯的JavaBean(Dao.java封裝了登錄邏輯) 邏輯
② 封裝數據的JavaBean (實體類,Student.java Person.java) 數據
Servlet
MVC設計模式:
M:Model, 模型:一個功能。用JavaBean實現。
V:View, 視圖:用於展示、以及與用戶交互。使用html js css jsp jQuery等前端技術實現
C:Controller, 控制器:接收請求,將請求跳轉到模型進行處理:模型處理完畢后,再將處理的結果返回給請求處。可以用jsp實現,但一般建議使用servlet實現控制器。
Jsp -----> Java(Servlet)-----> JSP
Servlet:
Java類必須符合一定的 規范:
a.必須繼承 javax.servlet.http.HttpServlet
b.重寫其中的 doGet()或doPost方法
doGet(): 接受 並處理所有的get提交方式的請求
doPost(): 接受 並處理所有的post提交方式的請求
Servlet要想使用,必須配置
Servlet2.5:web.xml
Servlet3.0:@WebServlet
Servlet2.5:web.xml:
項目的根目錄:WebContent、src
<a href=”WelcomeServlet”>所在的jsp是在WebContent目錄中,因此 發出的請求WelcomeServlet 是去請求項目更目錄。
Servlet流程:
用戶請求à<url-pattern>à根據<servlet-mapping>中的<servlet-name>去匹配<servlet>中的<servlet-name>,然后尋找到<servlet-class>,最終將請求交由<servlet-class>執行。