JAVA基礎程式設計109——Servlet
tomcat伺服器
1. 目錄結構
bin:
二進位制可執行檔案存放的目錄conf:
配置檔案存放的目錄webapps:
專案釋出目錄work:
工作目錄log:
日誌檔案存放目錄
2. tomcat釋出專案的三種方式
- 直接將web專案丟到
webapps
下 web war 專案名稱就是訪問專案的虛擬目錄/web
- 修改
conf/server.xml
新增一個虛擬目錄<Context path="" docBase="" /> <Context path="" docBase="" />
- 在
/conf/Catalina/localhost
<?xml version="1.0" encoding="UTF-8"?> <Context docBase="" />
Servlet : 一個java小程式 web程式的入口
1. 建立Servlet
- 建立一個類實現Servlet介面
- 實現其中的方法
簡化方案: 建立一個類繼承 HttpServlet 類,重寫 doGet/doPostservcie(ServletReuqest request,ServletResponse response) servcie(ServletReuqest request,ServletResponse response) inti
2. 配置Servlet HelloServlet
- xml配置
<servlet> <serlvet-name>HelloServlet</servlet-name> <servlet-class>com.itheima.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <serlvet-name
2. 註解配置
@WebServlet
替換web.xml中servlet的配置value
配置訪問路徑urlPatterns
配置訪問路徑
3. servlet訪問路徑的配置
- 完全匹配
/*
訪問路徑 和servlet的url-parttern配置完全一致的情況 url:http://localhost:8080/web/hello
url-parttern :/hello
- 目錄匹配
/* /hello/*
訪問路徑 和servlet的url-parttern配置匹配一部分 url:http://localhost:8080/web/hello/abc
url-parttern :/hello/*
- 副檔名匹配
*.html
訪問路徑的副檔名 和servlet的url-parttern配置匹配一部分 url:http: /localhost:8080/web/hello.html
url-parttern :*.html
4. Servlet細節
-
生命週期
- 建立 : 預設使用者第一次訪問servlet的時候會建立servlet物件,執行其中
init()
方法完成初始化操作 執行一次 - 執行 : 每一次的使用者請求都會執行其中的
service()
方法 - 銷燬 : 伺服器關閉或者專案被移除了,銷燬servlet 執行
destroy()
方法,執行一次
- 建立 : 預設使用者第一次訪問servlet的時候會建立servlet物件,執行其中
-
servlet體系結構
- Servlet介面
- GenericServlet 類
- HttpServlet 類
HTTP協議 : 規定了瀏覽器和伺服器互動的資料格式
1. 請求
- 請求行 : 請求方式 請求路徑 協議版本
- 請求頭 :
key
:value1,value2referer
: 請求的來源User-Agent
: 客戶機資訊 - 請求體 : GET請求沒有請求體,POST請求的引數 username=zs&password=123
2. 響應
-
響應行 : 協議 狀態碼 狀態嗎描述
200:
請求成功302:
重定向304:
查詢本地快取404:
請求路徑錯誤405:
請求方式不被允許500:
伺服器內部異常 -
響應頭 :
key
:value1,value2Content-type
: 響應內容的資料格式Content-disposition
: attachment;filename=xxx 以附件的形式開啟響應location
: 指定重定向的地址 -
響應體 : 輸出的資料
3. HttpServletRequest物件 請求傳送到伺服器之後,由伺服器建立的物件,封裝的是http協議的請求資訊
-
獲取請求訊息資料
String method = request.getMethod(); //get/post String requestURI = request.getRequestURI(); // /web10/user StringBuffer requestURL = request.getRequestURL(); //http://localhost:8080/web10/user String header = request.getHeader("User-Agent");// 客戶機資訊
-
獲取請求引數資料
//獲取請求引數 String username = request.getParameter("username"); //zs String[] hobbies = request.getParameterValues("hobby"); //[play,sleep] //獲取所有的請求引數 Map<String, String[]> map = request.getParameterMap(); //{username:[zs],hobby:[play,sleep]}
-
作為域物件存取資料 : 一次請求範圍
//作為域物件存取資料 request.setAttribute("username","zs"); String un = (String) request.getAttribute("username"); request.removeAttribute("username");
-
實現頁面跳轉 轉發
//1. 獲取請求轉發器 RequestDispatcher dispatcher = request.getRequestDispatcher("/login.jsp"); //2. 轉發 dispatcher.forward(request,response); //鏈式程式設計~~ request.getRequestDispatcher("/login.jsp").forward(request,response);
-
獲取SerlvetContext物件
//獲取SerlvetContext物件 ServletContext servletContext = request.getServletContext();
4. HttpServletResponse物件
請求傳送到伺服器之後,由伺服器建立的物件,封裝的是http協議的響應資訊
- 設定響應訊息資料
//解決中文亂碼問題 response.setContentType("text/html;charset=utf-8"); //設定響應狀態嗎 response.setStatus(200); //設定響應頭資訊 response.setHeader("Content-Type","text/html;charset=utf-8"); //設定響應體資訊 : 位元組流和字元流不能同時進行使用 //字元流設定 response.getWriter().write("hello"); //位元組流設定 response.getOutputStream().write("hello".getBytes("UTF-8"));
- 頁面跳轉
// 重定向: 如果request攜帶資料進行跳轉,那麼不能使用重定向只能頁面轉發 //重定向的本質 response.setStatus(302); response.setHeader("location",request.getContextPath()+"/login.jsp"); //重定向的簡化方案 response.sendRedirect(request.getContextPath()+"/login.jsp");
- 檔案下載 : 設定一個流 二個頭
- 目標資原始檔的輸入流
- 設定
Content-Type:
型別 - 設定
Content-Disposition:
開啟方式
5. SerlvetContext物件
-
獲取SerlvetContext物件
//獲取SerlvetContext物件 ServletContext servletContext = request.getServletContext(); ServletContext servletContext = this.getServletContext();
-
獲取檔案的型別
String mimeType = sc.getMimeType("aaa.txt");
-
讀取web專案下的資原始檔
//獲取檔案的磁碟路徑 String realPath = sc.getRealPath("/bb.txt"); //web目錄下 String realPath1 = sc.getRealPath("/WEB-INF/bb.txt"); //WEB-INF目錄下 String realPath2 = sc.getRealPath("/WEB-INF/classes/bb.txt"); //直接讀取檔案到記憶體 InputStream is = sc.getResourceAsStream("/WEB-INF/classes/bb.txt");
-
作為域物件存取資料 : 整個web專案
//作為域物件存取資料 sc.setAttribute("username","zs"); String un = (String) sc.getAttribute("username"); sc.removeAttribute("username");
6. Cookie : 客戶端會話技術 儲存少量不敏感資料在客戶端
- 建立Cookie
Cookie cookie = new Cookie(String name,String value)
- 向客戶端寫Cookie
response.addCookie(cookie)
- 獲取客戶端傳送到伺服器的所有的Cookie
Cookie[] cookies = request.getCookies()
- Cookie細節
- 瀏覽器可以儲存多個cookie
- cookie的儲存時間
- 預設瀏覽器關閉cookie銷燬
- 設定cookie持久化到硬碟 setMagAge(int second)
正數:
持久化的時間負數:
預設值,瀏覽器關閉cookie銷燬0:
刪除cookie
- 設定cookie的訪問路徑
cookie.setPath(String path)
- 設定cookie的有效域名
cookie.setDomain("baidu.com")
- 記住使用者上次訪問時間
7. Session : 伺服器會話技術
可以儲存大量的任意型別的的資料到伺服器
- 作用範圍: 一次會話,多次請求(每一個客戶端都會有自己的session區域)
- 獲取session
//獲取session HttpSession session = request.getSession();
- 操作session
//作為域物件存取資料 session.setAttribute("username","zs"); String un = (String) session.getAttribute("username"); session.removeAttribute("username");
- session細節
- 伺服器不關閉,客戶端關閉,二次獲取的session是否是同一個 不是
- 伺服器關閉,客戶端不關閉,二次獲取的session是否是同一個 不是 資料有可能是同一份(正常關閉伺服器)
- session過期
- 伺服器非正常關閉
- 呼叫session的
session.invalidate()
; - session過期(30分鐘)
8. JSP : java伺服器頁面 HTML+java程式碼+JSP本身
- JSP指令: <%@page %>, <%@include %>, <%@taglib %>
- 指令碼標籤: <% %>, <%! %>, <%= %>
- JSP註釋:<%-- --%>
- 內建物件:
物件 <=======>真實型別
pageContext
<=======> PageContextrequest
<=======> HttpServletRequestsession
<=======> HttpSessionapplication
<=======> ServletContext- response <=======> HttpServletResponse
- out <=======> JspWiter
- page <=======> Object
config
<=======> ServletConfig- exception <=======> Throwable
9、EL表示式
-
執行運算子
- 算術運算子:+,-,*,/,%
- 比較運算子:>,<,>=,<=,!=,==
- 邏輯運算子:&&,||,!
- 三元運算子 :3>4?“false”:true
-
.獲取資料 獲取四個域中的資料
${域範圍.鍵}
:從指定域中獲取資料${鍵}
:從四個域中從小到達依次查詢,找到返回pageContext
,request
,session
,application