1.javaweb環境搭建
(1)安裝JDK
(2)安裝Web服務器-Tomcat
解壓版(apache-tomcat-9.0.26.zip)
參考網址:https://blog.csdn.net/weixin_42109012/article/details/94383001
如果tomcat啓動信息,出現亂碼,可參考 https://blog.csdn.net/whscheetah/article/details/85056467解決。
安裝版(apache-tomcat-9.0.26.exe)
(3)安裝IDEA
配置jdk,tomcat
2.Servlet入門
2.1 Servlet是什麼
Servlet是利用Java類編寫的服務端程序。(Servlet的實質就是Java類)。
作用:負責接收客戶端的請求,並給出響應。
Servlet提供以下功能:
1.對客戶端發送的數據進行讀取和攔截。
2.讀取客戶端請求的隱含數據。
3.運行結果或生成結果。
4.發送響應的數據。
對於將來要學的JSP,可以先了解JSP的實質是Servlet。
servlet的配置,有兩種方式,一是在web.xml中配置,二是,在Servlet3.0之後可以通過註解配置。
package com.ambow.servlet;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
//@WebServlet("/myServlet")
public class MyServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init....Servlet初始化");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service...給用戶提供服務的方法。可以處理客戶端的請求");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("destroy....銷燬Servlet");
}
}
(1)Web.xml配置
<!-- 配置Servlet -->
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.ambow.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>
(2)註解配置
在Servlet的類定義上面,添加註解@WebServlet("/myServlet")
2.2 Servlet的生命週期
init–當服務器啓動,第一次訪問Servlet的時候,servlet進行初始化
service–在服務器啓動期間,可以不斷的處理請求。
destroy–在服務器停止的時候,去銷燬Servlet.
注意:虛擬路徑的配置
Servlet的使用方式:
(1)繼承Servlet接口
(2)實現HttpServlet抽象類【掌握】
2.3 Servlet處理表單數據
【案例1 登錄案例】
實現效果
輸入正確的賬號,密碼。(賬號:admin,密碼:123)跳轉到登錄成功頁面。
否則,跳轉到登錄失敗頁面。
2.4 請求和響應
(1)瞭解HTTP協議。
參考資料:https://www.runoob.com/http/http-tutorial.html
(2)掌握通過瀏覽器的抓包工具,查看請求消息和響應消息。
請求消息格式:
請求行
請求頭部
空行
請求數據
響應消息格式:
狀態行
消息報頭
空行
響應正文。
(3)request和response對象的常用方法
註冊案例
–常用方法
**request:**獲取請求消息數據,獲取參數,請求轉發,共享數據,獲取ServletContext
(1)request.getParameter(“username”); – 獲取除複選框以外的表單元素的值
(2)request.getParameterValues(“hobby”);–獲取複選框的值
(3)request.setCharacterEncoding(“utf-8”);–修改請求對象的編碼
(4)request.getRequestDispatcher(“success.html”).forward(request,response);–請求轉發
(5)request.getParameterNames();–得到當前請求中的所有參數的完整列表
(6)request.getCookies( );–讀取客戶端的Cookie信息
-------------------------共享數據相關的方法----------------------------
(7)request.setAttribute(“loginUser”,uname);//往request作用域中,設置屬性
(8)String loginUser = (String )request.getAttribute(“loginUser”);//從request作用域中,獲取屬性值。(注意:要進行類型強轉)
-------------------------獲取請求行相關的方法----------------------------
(9)String method = request.getMethod();//獲取表單提交方式
(10)String contextPath = request.getContextPath();//獲取虛擬路徑
(11)String servletPath = request.getServletPath();//獲取Servlet路徑
(12)String queryString = request.getQueryString();//獲取查詢字符串
(13)String protocol = request.getProtocol();//獲取協議名稱及版本
-------------------------獲取請求頭相關的方法----------------------------
(14)Enumeration headerNames = request.getHeaderNames();//獲取所有請求頭的名稱
(15)String headerValue = request.getHeader(header);//獲取指定header的值
-------------------------獲取請求數據相關的方法----------------------------
(1)request.getParameter(“username”); – 獲取除複選框以外的表單元素的值
(2)request.getParameterValues(“hobby”);–獲取複選框的值
**response:**重定向,輸出字符數據,輸出字節數據,驗證碼
(1)response.sendRedirect(“success.html”);–請求重定向
(2)response.addCookie(cookie);–發送Cookie到客戶端瀏覽器
3.會話跟蹤技術
3.1 Cookie
【案例1 記住密碼】
實現效果
當勾選“記住密碼”複選框時,下次訪問登錄頁面,會自動記住賬號,密碼信息。
【案例2 上次訪問時間】
實現效果
首次登錄,顯示“歡迎您,XXX”
下次登錄,顯示“歡迎您,XXX,您上次登錄時間爲 yyyy年MM月dd日 hh:mm:ss”
1. 概念: Cookie是客戶端會話技術,將數據保存在客戶端,以保留了各種跟蹤信息。
2. 識別用戶包括三個步驟:
(1)服務器腳本向瀏覽器發送一組 Cookie。例如:姓名、年齡或識別號碼等。
(2)瀏覽器將這些信息存儲在本地計算機上,以備將來使用。
(3)當下一次瀏覽器向 Web 服務器發送任何請求時,瀏覽器會把這些 Cookie 信息發送到服務器,服務器將使用這些信息來識別用戶。
3. 通過 Servlet 設置 Cookie 包括三個步驟:
(1) 創建一個 Cookie 對象:您可以調用帶有 cookie 名稱和 cookie 值的 Cookie 構造函數,cookie 名稱和 cookie 值都是字符串。
Cookie cookie = new Cookie("key","value");
請記住,無論是名字還是值,都不應該包含空格或以下任何字符:
[ ] ( ) = , " / ? @ : ;
(2) 設置最大生存週期:您可以使用 setMaxAge 方法來指定 cookie 能夠保持有效的時間(以秒爲單位)。下面將設置一個最長有效期爲 24 小時的 cookie。
cookie.setMaxAge(60*60*24);
setMaxAge的參數有如下三種情況:
- 正數:將Cookie數據寫到硬盤的文件中。持久化存儲。並指定cookie存活時間,時間到後,cookie文件自動失效
- 負數:默認值,當瀏覽器關閉後,Cookie數據被銷燬
- 零:刪除cookie信息
(3) 發送 Cookie 到 HTTP 響應頭:您可以使用 response.addCookie 來添加 HTTP 響應頭中的 Cookie,如下所示:
response.addCookie(cookie);
4.通過 Servlet 讀取 Cookie
要讀取 Cookie,您需要通過調用 HttpServletRequest 的 getCookies( ) 方法創建一個 javax.servlet.http.Cookie 對象的數組。然後循環遍歷數組,並使用 getName() 和 getValue() 方法來訪問每個 cookie 和關聯的值。
5.通過 Servlet 刪除 Cookie
刪除 Cookie 是非常簡單的。如果您想刪除一個 cookie,那麼您只需要按照以下三個步驟進行:
(1)讀取一個現有的 cookie,並把它存儲在 Cookie 對象中。
(2)使用 setMaxAge() 方法設置 cookie 的年齡爲零,來刪除現有的 cookie。
(3)把這個 cookie 添加到響應頭。
3.2 Session
【案例1 登錄、退出系統案例】
實現效果
1.登錄系統後可在各個頁面可以顯示登錄用戶名。
2.當退出系統後,訪問非登錄頁面,顯示“請登錄”超鏈接。
(創建/獲取Session,刪除Session會話數據)
-
概念:Session是服務端會話技術,將數據保存在服務端,以保留了各種跟蹤信息。
提供了一種跨多個頁面請求或訪問網站時識別用戶以及存儲有關用戶信息的方式。 -
使用步驟
-
常用方法
(1)獲取Session
HttpSession session = request.getSession();
(2)設置屬性
session.setAttribute(“key”,value);
(3)獲取屬性
Object value = session.getAttribute(“key”);–根據情況,進行類型轉換
(4)刪除屬性
session.removeAttribute(“key”);
(5)銷燬session
session.invalidate();
3.3 隱藏的表單域
3.4 URL重寫
4.JSP
【案例1 查詢案例】
實現效果
1.讀取數據庫中某張表,展示數據庫中的數據到頁面。
JSP的實質是Servlet.
JSP = HTML(模板數據) + JAVA(元素)
JSP的組成:(1)靜態內容(2)指令(3)Java腳本
以下重點講解,指令和java腳本。
4.1 指令
- page: <%@ page language=”java” import=”java.util.*” contentType=“text/html; charset=utf-8” %>
- include <%@ include file=”url” %>
- taglib <%@ taglib uri=”” prefix=”” %> 作用:是減少jsp頁面中的java代碼。
4.2 小腳本
- 聲明:<%! 聲明變量/方法 %> //全局變量
- 腳本段:<% java代碼 %> //局部變量
- 表達式:<%= 表達式 %> //輸出到頁面
//jsp轉換成的Servlet的部分關鍵代碼
class scriptlets_jsp
{
//聲明的變量(全局)
int count1 = 1;
//聲明的方法(全局)
public String getTime(){
return "";
}
//每次請求,都會調用的方法
public void _jspService(request,response){
//腳本段中聲明的變量(局部)
int count2 = 1;
}
}
4.3 註釋
- Java註釋
(1)// 單行註釋
(2)/* 多行註釋 /
(3)/* 文檔註釋 */ - Html註釋
<!—Html註釋(用戶可以從瀏覽器的源代碼中查看) --> - Jsp註釋
<%-- JSP特有的註釋 --%>
瞭解:Web.xml文件配置通用的錯誤頁面。
4.4 隱式對象
九個隱式對象:
序號 | 對象名 | 描述 |
---|---|---|
1 | request | HttpServletRequest 接口的實例 |
2 | response | HttpServletResponse 接口的實例 |
3 | out | JspWriter類的實例,用於把結果輸出至網頁上 |
4 | session | HttpSession類的實例 |
5 | application | ServletContext類的實例,與應用上下文有關 |
6 | config | ServletConfig類的實例 |
7 | pageContext | PageContext類的實例,提供對JSP頁面所有對象以及命名空間的訪問 |
8 | page | 類似於Java類中的this關鍵字 |
9 | Exception | Exception類的對象,代表發生錯誤的JSP頁面中對應的異常對象 |
5.EL和JSTL
5.1 EL
核心作用:
減少jsp中的java代碼[注意:el只能用在jsp中]
語法:${表達式}
表達式分類:
(1) 普通表達式
(2) 讀取單值(基本數據類型)
(3) 讀取多值(對象)
EL的隱含對象:
(1) pageContext,通過pageContext可以訪問ServletContext,Request,Response,Session等
(2) pageScope
(3) requestScope
(4) sessionScope
(5) applicationScope
(6) param
(7) paramValues
(8) cookie
(9) initParam
(10) header
(11) headerValues
EL的運算符:
(1) 算術運算符
(2) 關係運算符
(3) 邏輯運算符
(4) Empty運算符
(5) 條件運算符
5.2 JSTL
使用方法:
(1) 在頁面中導入taglib指令
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
(2) 使用jstl的各種標籤
Jstl標籤分類:
(1)c:out 在頁面輸出變量值
(2)c:set 定義變量或者給已有變量賦值
(3)c:remove
(4)c:if(單分支)
(5)c:choose,c:when,c:otherwise(多分支)
(6)c:forEach
6.過濾器
概述:
過濾器,顧名思義,就是在源數據和目的數據之間起過濾作用的中間組件。filter是對客戶端訪問資源的過濾,符合條件放行,不符合條件不放行,並且可以對目標資源訪問前後進行邏輯處理。
過濾器要實現的接口是Filter(javax.servlet包中)
過濾器的三個重要方法:
(1) Init(FilterConfig config)
(2) doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
chain.doFilter(request,response);//將請求傳給下一個過濾器或目標資源。
(3) destory()
過濾器的配置:
(1)xml配置
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.ambow.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(2)註解配置
在Servlet3.0之後,可以使用註解進行配置
@WebFilter( filterName = "LoginFilter",urlPatterns = { "/jsps/cart/*", "/jsps/order/*" }, servletNames = { "CartItemServlet", "OrderServlet" })
public class LoginFilter implements Filter {
...
}
重點應用:
統一字符編碼
統一權限驗證