servlet初步認識
超文本傳輸協議:
瀏覽器往服務器發送 ---- 請求
服務器往瀏覽器回寫 ---- 響應
1、請求:(request)
1)請求行:請求信息的第一行
格式:請求方式 訪問的資源 協議/版本 egg:GET /myhtml.html HTTP/1.1
請求方式:get和post
get會把參數放在url的後面 post不會
get參數大小有限制,post請求卻沒有限制
get請求沒有請求體;post請求有請求體 請求參數放在請求體中
2)請求頭:請求信息的第二行到空行結束
常見的請求頭:
Accept: text/html,image/bmp
Accept-Charset: ISO-8859-1 --字符集
Accept-Encoding: gzip --支持壓縮
Accept-Language:zh-cn --語言環境
Host: www.click369.cn:80 --訪問主機
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --緩存文件的最後修改時間
Referer: http://www.click369.com/index.jsp
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Cookie
Connection:Keep-Alive --鏈接狀態
3)請求體:空行以下的內容
只有post才有請求體:放請求參數 egg:username=tom&password=123
2、響應:(response)
1)響應行:響應信息的第一行
格式:協議/版本 狀態碼 狀態碼說明 egg:HTTP/1.1 200 OK
狀態碼:
200 正常響應成功
302 重定向
304 讀緩存
404 用戶操作資源不存在
500 服務器內部異常
2)響應頭:從響應信息的第二行到空行結束
常見的響應頭:
Location: http://www.it315.org/index.jsp --跳轉方向 和302一起使用的
Server:apache tomcat --服務器型號
Content-Encoding: gzip --數據壓縮
Content-Length: 80 --數據長度
Content-Language: zh-cn --語言環境
Content-Type: text/html; charset=GB2312 --數據類型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT --最後修改時間
Refresh: 1;url=http://www.it315.org --定時刷新
Content-Disposition: attachment; filename=aaa.zip --下載
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
Expires: -1 --緩存
Cache-Control: no-cache --緩存
Pragma: no-cache --緩存
Connection: Keep-Alive --連接
3)響應體:空行以下的內容
用戶瀏覽器頁面上展示的內容
二、tomcat服務器
1、常見的JavaEE Web服務器
WebLogic oracle公司 大型的JavaEE服務器 收費
WebSphere IBM 公司 大型的JavaEE 服務器 收費
Resin Caucho公司 中型的JavaEE 服務器 免費的
jBoss 紅帽公司 大型的JavaEE服務器 免費的
tomcat 阿帕奇基金組織 小中型的服務器 免費 純Java語言寫的
2、tomcat服務器
解壓後的目錄
bin:放的是一些可執行文件
con:放的是一些配置文件
lib:核心類庫
logs:放一些日誌文件
temp:存放一些臨時文件
webapps:存放web項目的
work:存放一些運行過程中生成的文件
使用:開啟服務器:bin 裏面有一個 startup.bat 雙擊
正常關閉: bin 裏面有一個 shutdown.bat 雙擊 快捷鍵正常關閉 ctrl+c
強制關閉:點擊叉號 不推薦
3、安裝後可能出現的問題
1)黑窗口一閃而過:正確配置一下 JDK 環境變量 JAVA_HOME
2)起開之後報錯:tomcat 默認的端口8080 被其他進程占用
解決: a、把占用了tomcat端口關掉
b、修改tomcat端口號:con 裏面 server.xml裏面可以修改tomcat默認端口號
三、Servlet概述
1、概述
運行在服務器端的小程序,定義了一個Java類能被瀏覽器所訪問的規則 其實就是一個接口;
2、作用:用來 接收請求 處理請求 響應請求
Servlet 由服務器創建 管理 銷毀 我們只是使用它
3、創建一個Servlet實現類————服務器通過反射的方式 創建Servlet對象,調用其方法
//Servlet是單例的。可能會存在線程安全問題,盡量不要定義成員變量。 public class MyServlet implements Servlet { //當Servlet被創建時調用 而且只調用一次 一般在這個方法裏面,我們會做一些初始化的事情 public void init(ServletConfig config) throws ServletException { System.out.println("Servlet被創建了"); } // 核心方法 對外提供服務 每一次請求會調用該方法 public void service(ServletRequest requst, ServletResponse response) throws ServletException, IOException { System.out.println("請求來了"); } // 當Servlet被銷毀時調用 public void destroy() { System.out.println("Servlet被銷毀了"); } //獲取配置對象的方法 public ServletConfig getServletConfig() { return null; } //獲取 Servlet版本信息 作者等信息 一般不用 public String getServletInfo() { return null; } }
4、Servlet的生命周期
被創建時調用 init()------對外提供服務調用service()-----Servlet銷毀時調用destroy()
1)init()
Servlet第一次被訪問時,被創建,調用init()方法,只執行一次。
2)service()
每一次被訪問時,會調用service()方法提供服務。
3)destroy()
服務器關閉時,servlet被銷毀;服務器正常關閉是,在銷毀Servlet之前,會調用destory()方法。
5、ServletConfig對象————配置對象
ServletConfig是一個接口 在Servlet初始化的時候 由服務器創建其子類對象傳遞給 init()方法
1)獲取web.xml 中配置的初始化參數
String getInitParameter(String name)
Enumeration getInitParameterNames()
//在web.xml裏面進行配置虛擬路徑
<servlet>
<servlet-name>mydemo</servlet-name> //給Servlet配一個別名
<servlet-class>org.westos.servletdemo.MyServlet</servlet-class> //配置Servlet全類名
</servlet>
<servlet-mapping> 配置一個映射
<servlet-name>mydemo</servlet-name>
<url-pattern>/demo</url-pattern> 配置一個虛擬路徑用來作為瀏覽器要訪問的資源路徑
</servlet-mapping>
2)獲取ServletContext全局域上下文對象 //代表了整個web應用,在域的範圍內共享數據
ServletContext getServletContext()
3)獲取servlet配置的名稱 就是在web.xml中給servlet起的名字
String getServletName()
6、JavaWeb中四大域對象
1)ServletContext 全局域對象 統管整個服務器資源,域對象的作用,在一定範圍內可以共享數據
2)session:會話域 可以包含多次請求和多次響應,並且可以在多次請求和多次響應間共享數據,只要不關閉瀏覽器
3)request:請求域 在一次請求間共享數據,重定向後請求域中數據不可用
4)pageContext:頁面域 在一個頁面間共享數據(最小域)
4個域對象 都有下面三個方法
setAttribute("num", "100");//在域中存儲數據
getAttribute("num");//取出域中的數據
removeAttribute("num");//清除域中的數據
ServletContext全局上下文對象作用:
a:在域中的資源間共享數據
b:用來獲取服務器的真實路徑
servletContext.getRealPath("/"); //egg: servletContext.getRealPath("/WEB-INF/a.txt");
ServletContext只能用於web環境。如果是非web環境,則使用ClassLoader來獲取真實路徑
獲取src下的文件"a.txt":
//1.獲取該類對應的類加載器對象
ClassLoader loader = this.getClass().getClassLoader();
//2.獲取文件運行的真實路徑
URL url = loader.getResource("a.txt");
String path = url.getPath();
c:獲取文件類型 getMimeType("真實路徑")
7、request和response對象————由服務器創建,管理,銷毀
1)request請求對象
ServletRequest(接口)<---繼承 HttpServletRequest(接口)<---實現 org.apache.catalina.connector.RequestFacade@6049a827
入門egg:
//接受頁面的傳過來的參數
request.setCharacterEncoding("utf-8");
String value = request.getParameter("key");
2)response響應對象
ServletResponse(接口)<---繼承 HttpServletResponse(接口)<---實現 org.apache.catalina.connector.ResponseFacade@3bec9d4
入門egg:
//響應一段字符串到頁面
response.setContentType("text/html;charset=utf-8");// 設置響應編碼
PrintWriter writer = response.getWriter();//發送字符數據的對象
writer.write("<font color='red' size='7'>Hello Welcome</font>");
// 也可以獲取響應對象中的字節輸出流實現
ServletOutputStream fos = response.getOutputStream();
8、HttpServlet————一般要創建一個Servlet就繼承HttpServlet就可以了
//public abstract class HttpServlet extends GenericServlet implements Serializable public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
servlet初步認識