servlet 介紹和簡單使用
1,servle介紹:
html+css+js
Servlet:用來開發動態web的技術
屬於javaee規範
【1】,javaEE Servers建立專案
a,new Dynamic Web Project
2,配置檔案直接點下一步:
3,填寫網站的名稱,內容確定進行建立成功
4,關聯自己的伺服器
完成
2,servle 的使用
【1】手動匯入
servlet使用步驟
[1]寫一個類繼承httpServlet
[2]重寫doGet和doPost方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doget");
PrintWriter writer = resp.getWriter();
writer.println("<html>");
writer.println("<body>");
writer.println("Hello Servlet");
writer.println("</body>");
writer.println("</html>");
}
[3]配置servlet
web.xml中的配置
<!-- 配置Servlet -->
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>類的全類名</servlet-class>
</servlet>
<!-- 配置servlet訪問路徑 -->
<servlet-mapping>
<servlet-name>要與配置的servlet匹配</servlet-name>
<url-pattern>瀏覽器要訪問的路徑</url-pattern>
</servlet-mapping>
【2】自動匯入
new Servle 會自動導包 清單檔案會自動生成
配置訪問檔案
2,取消繼承的方法fhish,檢視清單目錄自動配置
2,servle的執行流程:
servlet執行機制
[1]傳送一個請求 http://localhost:8080/02_range/hello
[2]tomcat解析是哪個應用程式
[3]找到這個應用程式 並且解析 web.xml
[4]解析web.xml裡面的url-pattern 比對成功的話 解析 servlet-name
[5]通過這個servlet-name 找到這個Servlet這個類
利用eclipse提供的Servlet建立Servlet
*處理bug網頁打不開,出現404錯誤
解決方法 重寫類中實現的方法 init doget 一定要去除 doget 和dopost 裡面的super()方法
3,servle的生命週期
[1]構造方法
[2]init方法初始化 只會建立的時候執行一次
[3]處理客戶端對service的呼叫 多次請求 多次呼叫
[4]service
[5]銷燬servlet
doget 和 doPost 構造方法中直接使用。父類執行
servlet有倆種方式 會啟動
1.正常的請求 會啟動servlet
2.讓tomcat啟動的時候就去載入servlet 需要在web.xml裡面配置 很少用因為生命週期太長了
配置以後啟動tomcat 直接呼叫service 方法 service 會按請求方式呼叫doget 或者 dopost方法
<servlet>
<servlet-name>LifeServlet</servlet-name>
<servlet-class>com.heima.life.LifeServlet</servlet-class>
<load-on-startup>1</load-on-startup> 他的級別只有1-9
</servlet>
4,url - pattern 的三種寫法
web.xml 下url路徑更改寫法,依然可以訪問資源
[1]完全路徑匹配 /hello
[2]目錄匹配 /*
[3]副檔名匹配 *.do *.action
注意字串的拼接,不要有兩個//
優先順序:完全路徑匹配>目錄匹配>副檔名匹配
位元組流和字元流不能同時使用
絕對路徑是從伺服器埠號後面開始匹配
相對路徑是從伺服器應用程式後面開始匹配
相對路徑: 相對於當前訪問的路徑 路徑前面 不會加 /
絕對路徑: 一個絕對的路徑 路徑前面 一定要加 /
專案開發常用的是絕對路徑
99乘法表案例:
【1】建立DyNamic Web Project 專案
【2】建立Servlet服務
package com.xiaoshuai;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CfbServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// [1]獲取請求傳遞過來的引數
String str_number = req.getParameter("number");
// [2]將請求過來的引數轉成了int型別
int number = Integer.parseInt(str_number);
// [3]獲取了一個字元流
PrintWriter writer = resp.getWriter(); // 字元流
// resp.getOutputStream();// 位元組流 (字元流和位元組流不能同時出現)
// [4]乘法表
for (int i = 1; i <= number; i++) {
for (int j = 1; j <= i; j++) {
writer.print(i + " * " + j + " = " + i * j + " ");
}
writer.println();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
【3】WebCOntent下建立HTML網頁
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="cfb" method="get">
請輸入一個數:<input type="text" name="number" /> <input type="submit"
value="提交">
</form>
</body>
</html>
問題:
1,web.xml 裡面的<url-pattern>和 命名.html 中 acction 不同無法關聯
2,輸入網址,servlet 中 url 是一個網址 建立的 命名.html 也是一個網址。命名.html關聯url路徑