第一章 WEB概述
1.WEB簡介
- Javaweb: 用Java技術(shù)來解決相關(guān)web互聯(lián)網(wǎng)領(lǐng)域的技術(shù)總和。web包括:web服務(wù)器和web客戶端兩部分.簡而言之: 用java制作網(wǎng)頁,JavaEE應(yīng)用軟件前端展示界面.
2.WEB通信
WEB采用B/S通信模式,通過超文本傳送協(xié)議(HTTP, Hypertext transport protocol)進(jìn)行通信.
通過瀏覽器地址欄編寫URL,向服務(wù)器發(fā)送一個請求,服務(wù)器端根據(jù)請求進(jìn)行相應(yīng)的處理,處理完成之后,會向瀏覽器作出一個響應(yīng),及將服務(wù)器端資源發(fā)送給瀏覽器
3.WEB資源介紹
靜態(tài)資源:指web頁面中供人們?yōu)g覽的數(shù)據(jù)始終是不變。比如:HTML、CSS、JS、圖片、多媒體。
動態(tài)資源:指web頁面中供人們?yōu)g覽的數(shù)據(jù)是由程序產(chǎn)生的,不同時間點訪問web頁面看到的內(nèi)容各不相同。
比如:JSP/Servlet、ASP、PHP
4.常見的WEB服務(wù)器:
(WEB服務(wù)器對JavaEE規(guī)范部分或全部支持(實現(xiàn)),也就是WEB服務(wù)器實現(xiàn)部分或全部接口。)
- Tomcat:Apache組織提供一個免費(fèi)的小型的服務(wù)器軟件。支持Servlet和JSP規(guī)范。(免費(fèi),開源,性能高)
- WebLogic:Bea公司的一個收費(fèi)的大型的服務(wù)器軟件,后被Oracle收購。支持EE的所有的規(guī)范
- WebSphere:IBM公司的一個收費(fèi)的大型的服務(wù)器軟件,支持EE的所有的規(guī)范。
- JBoss:是一個基于J2EE的開放源代碼的應(yīng)用服務(wù)器。JBoss是一個管理EJB的容器和服務(wù)器,JBoss核心服務(wù)不包括支持servlet/JSP的WEB容器,一般與Tomcat或Jetty綁定使用。
5.URL請求路徑
前言: 在我們訪問網(wǎng)站時,我們通過瀏覽器輸入網(wǎng)址,訪問目標(biāo)網(wǎng)址應(yīng)用程序。
接下來我們詳細(xì)解析網(wǎng)址組成部分:
如下:URL (Uniform Resource Locator) ,統(tǒng)一資源定位符是對互聯(lián)網(wǎng)上資源位置的一種表示,互聯(lián)網(wǎng)上的每個文件都有一個唯一的URL。
書寫完整格式如下
協(xié)議://域名:端口號/資源位置?參數(shù)=值
協(xié)議,http、https、ftp等
域名,域名或IP地址,都可以訪問WEB資源
端口號,程序必須使用端口號,才可以讓另一個計算機(jī)訪問。
http協(xié)議的默認(rèn)端:80
資源位置,用于描述WEB資源再服務(wù)器上的位置
參數(shù)=值,瀏覽器和服務(wù)器交互傳遞的數(shù)據(jù)
例如:常見路徑http://www.itcast.cn:80/apps/index.html
搜索路徑:https://www.baidu.com/apps?name=lisi&pwd=123
小結(jié): 通過url資源地址,我們可以通過瀏覽器訪問服務(wù)器上指定的資源!
第二章 Tomcat
1.Tomcat概述
Tomcat 服務(wù)器是一個免費(fèi)的開放源代碼的Web 應(yīng)用服務(wù)器,屬于輕量級應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP 程序的首選。
支持Servlet和JSP 規(guī)范,且最新的Servlet 和JSP 規(guī)范總是能在Tomcat 中得到體現(xiàn)
2. Tomcat版本
Tomcat 目前存在很多版本,不同版本的規(guī)范技術(shù)可能不同。
官網(wǎng)地址
:http://tomcat.apache.org/whichversion.html
Tomcat版本 | Servlet版本 | JDK版本 |
---|---|---|
8.0x | 3.0 | 1.8 |
7.0x | 2.5/3.0 | 1.6/1.7 |
6.0x | 2.5 | 1.5 |
JavaEE規(guī)范版本 必須要和服務(wù)器版本匹配才能運(yùn)行
JavaEE1.3 (Servlet2.3/JSP1.2) ========= tomcat4.1
JavaEE1.4 (Servlet2.4/JSP2.0) ========= tomcat5.0
JavaEE5.0 (Servlet2.5/JSP2.1) ========= tomcat5.5/6.0
JavaEE6.0 (Servlet3.0/JSP2.2) ========= tomcat7.0
JavaEE7.0 (Servlet3.0/JSP2.2) ========= tomcat8.0+
3. Tomcat安裝
官網(wǎng)下載:http://tomcat.apache.org/
3.1 下載文件說明:
- tar.gz 文件 是linux操作系統(tǒng)下的安裝版本
- exe文件是window操作系統(tǒng)下的安裝版本
- zip文件是window操作系統(tǒng)下壓縮版本(我們選擇zip文件)
3.2 Tomcat目錄結(jié)構(gòu)
bin:腳本目錄
啟動腳本:startup.bat
停止腳本:shutdown.bat
conf:配置文件目錄 (config /configuration)
核心配置文件:server.xml
用戶權(quán)限配置文件:tomcat-users.xml
所有web項目默認(rèn)配置文件:web.xml
lib:依賴庫,tomcat和web項目中需要使用的jar包
logs:日志文件.
localhost_access_log..txt tomcat記錄用戶訪問信息,星表示時間。
例如:localhost_access_log.2017-04-28.txt
temp:臨時文件目錄,文件夾內(nèi)內(nèi)容可以任意刪除。
webapps:默認(rèn)情況下發(fā)布WEB項目所存放的目錄。
work:tomcat處理JSP的工作目錄。
3.3配置JAVA_HOME環(huán)境變量:
3.4Tomcat啟動和訪問
- tomcat解壓目錄/bin/startup.bat 雙擊運(yùn)行啟動tomcat
訪問路徑、瀏覽器
輸入:http://localhost:8080
3.5Tomcat常見問題
- JAVA_HOME的配置
如果沒有配置JAVA_HOME環(huán)境變量,在雙擊“startup.bat”文件運(yùn)行tomcat時,將一閃立即關(guān)閉。
解決方式:需要正確配置JAVA_HOME環(huán)境變量,指向JDK的安裝目錄 - 端口號沖突
控制臺將出現(xiàn)大量異常信息,描述的是3個端口被占用(8080、8009、8005 )
解決方式: 通過修改tomcat目錄下conf/server.xml配置文件修改端口號
1.我們需要做的是查看本地端口使用情況,關(guān)閉占用端口的程序:
2.在dos窗口中輸入 netstat –nao 就可以查看 當(dāng)前端口的占用情況
3.使用任務(wù)管理器---->選擇詳細(xì)信息---->查看pid為11604(查詢出來的 值),關(guān)閉結(jié)束進(jìn)程即可
4.修改tomcat啟動端口 Tomcat服務(wù)器的配置文件,全部都在tomcat的安裝目錄下conf目錄下:
server.xml:服務(wù)器端口配置、服務(wù)器自身配置文件 打開server.xml,
修改服務(wù)器端口:
修改服務(wù)器端口.png
修改tomcat的端口為9090:
修改完server.xml文件必須重啟服務(wù)器才能有效。 通過瀏覽器的地址欄訪問測試:http://localhost:9090
3.6 idea發(fā)布web項目
-
啟動tomcat8,瀏覽器訪問index.html頁面
1530520517786.png
3.7 Tomcat與nginx的區(qū)別
- 設(shè)計目的: Tomcat是一個免費(fèi)的開源的Servlet容器,實現(xiàn)了JAVAEE規(guī)范,遵循h(huán)ttp協(xié)議的的服務(wù)器 Nginx是一款輕量級 的電子郵件(電子郵件遵循IMAP/POP3協(xié)議)代理服務(wù)器,后來又發(fā)展成可以部署web應(yīng)用程序和進(jìn)行反向 代理的服務(wù)器
- 存放內(nèi)容: tomcat可以存放靜態(tài)和動態(tài)資源 nginx可以存放靜態(tài)資源
- 應(yīng)用場景: tomcat用來開發(fā)和測試javaweb應(yīng)用程序 nginx用來做負(fù)載均衡服務(wù)器
第三章 Servlet(web動態(tài)資源)
1.什么是Servlet
- Servlet 運(yùn)行在服務(wù)端的Java小程序,是sun公司提供一套規(guī)范,用來處理客戶端請求、響應(yīng)給瀏覽器的動態(tài)web資源。Servlet是JavaWeb三大組件之一(Servlet、Filter、Listener),是最重要的組件。
2.Servlet的請求和處理
獲取客戶端請求數(shù)據(jù)——>處理業(yè)務(wù)請求——>客戶端響應(yīng)
3.Servlet的入門開發(fā)(XML)
3.1Servlet接口元源碼如下
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
3.2Servlet實現(xiàn)類的編寫,編寫一個普通的java類實現(xiàn)Servlet接口。
// 創(chuàng)建類實現(xiàn)Servlet接口
package cn.itcast.web;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* Servlet implementation class FirstServlet
*/
public class DemoServlet implements Servlet {
private static final long serialVersionUID = 1L;
@Override
public void destroy() {
//TODO Auto-generated method stub
System.out.println("-----servlet被銷毀 該方法會執(zhí)行----");
}
@Override
public ServletConfig getServletConfig() {
//TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
//TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
// Servlet對象 tomcat服務(wù)器在接受客戶端發(fā)送請求 對象被創(chuàng)建
System.out.println("-----servlet被創(chuàng)建 該方法會執(zhí)行----");
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
// 每發(fā)送一次請求 該方法執(zhí)行一次...
System.out.println("-----接受一次請求----");
}
}
3.3. 配置web.xml,客戶瀏覽器發(fā)送請求,配置Servlet接受客戶端的請求。
web.xml配置又被稱為,訪問Servlet的請求映射,一個客戶端請求對應(yīng)一個servlet配置,在每一個工程的web目錄下有一個WEB-INF目錄下,有一個web.xml 雙擊打開
// 編寫web.xml 標(biāo)簽配置
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>cn.itheima.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/firstServlet</url-pattern>
</servlet-mapping>
啟動項目,瀏覽器訪問項目url路徑
localhost:8080/demoServlet
3.4 Servlet的執(zhí)行的流程詳解
3.5 web.xml中Servlet訪問路徑的編寫規(guī)范
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>cn.itheima.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/firstServlet</url-pattern>
</servlet-mapping>
說明: <url-pattern>/FirstServlet</url-pattern> 標(biāo)簽配置的靈活性。
可以配置有幾種方式: 不同的編寫,請求的路徑的訪問方式不同。
正確的書寫方式:
- /*
- *.xxx
- /a/b
- /a/*
- /a
錯誤的編寫: 不可以有 /.xxx 的寫法!
總結(jié)如下:
url-pattern配置方式共有三種:
1.完全路徑匹配 :以 / 開始
例如: /ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6
2.目錄匹配 :以 / 開始需要以 * 結(jié)束.
例如: / (所有) ,/aaa/* (aaa目錄下的所有) ,/aaa/bbb/*
3.擴(kuò)展名匹配 :不能以 / 開始以 * 開始的. 例如: .do ,.action 、.jsp 、.jpg
錯誤的寫法 : /*.do
4.缺省路徑 /
通常情況訪問 html頁面時,首先從當(dāng)前web項目的web.xml文件尋找匹配路徑,如果如果沒有找到,再從tomcat默認(rèn)的web.xml匹配,將使用缺省servlet
tomcat獲得匹配路徑時,優(yōu)先級順序:1 >2 > 3 > 4
在web.xml中在<servlet></servlet>標(biāo)簽內(nèi)部中配置:
<load-on-startup>2</load-on-startup> 1 2 3 4 5 --- 傳入正整數(shù),整數(shù)越小,被創(chuàng)建的優(yōu)先級就越高.
3.6 Servlet編程優(yōu)化
3.7Servlet生命周期
1.瀏覽器第一次訪問servlet,此時將執(zhí)行Servlet接口的初始化方法:init(ServletConfig)
詳見:GenericServlet.java里面的init
public void init(ServletConfig config) throws ServletException {
this.config = config;// 進(jìn)行一些對象的初始化操作
this.init();// 自定義的servlet可以重寫給方法,擴(kuò)展初始化操作。
}
2.客戶端每一次訪問Servlet,都將執(zhí)行service(ServletRequest,ServletResponse)方法
// 該方法主要是用來處理具體的業(yè)務(wù)邏輯
3.服務(wù)器正常關(guān)閉,自動調(diào)用 destroy()方法,在GenericServlet里面
public void destroy() {
}
// 此方法是給自定義的Servlet 復(fù)寫使用,主要是做一些資源回收處理。
Servlet生命周期小結(jié): servlet后續(xù)開發(fā)中 ,一般不會設(shè)置成員對象!
單例、在客戶端訪問到具體的servlet時,才會被初始化對象,在服務(wù)器正常關(guān)閉時,servlet對象被銷毀。
3.8服務(wù)器啟動,立刻加載Servlet對象
此時的業(yè)務(wù)場景,我們需要在web.xml文件中給指定的Servlet添加一個標(biāo)簽<load-on-startup>
此時的Servlet對象一般不做業(yè)務(wù)邏輯處理,而是做項目啟動初始化數(shù)據(jù)使用。
實現(xiàn)步驟:在web.xml中在<servlet></servlet>標(biāo)簽內(nèi)部中配置:
<load-on-startup>2</load-on-startup> 1 2 3 4 5 --- 傳入正整數(shù),整數(shù)越小,被創(chuàng)建的優(yōu)先級就越高.
Servlet初始化代碼:
public class SecondServlet extends GenericServlet{
@Override
public void init() throws ServletException {
// 初始化方法。。。。
System.out.println("two------------------two");
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello servlet two");
}
}
啟動服務(wù)器tomcat8 會發(fā)現(xiàn)該Servlet會立刻被初始化
控制臺:
3.9 Servlet3.0注解開發(fā)(***)
Servlet3.0相較于Servlet2.5: 目前快捷開發(fā),主流使用注解技術(shù)
- 3.0注解簡化的javaweb代碼開發(fā),可以省略web.xml配置文件
- 支持異步處理(多線程技術(shù))
- 支持可插性特性(書寫的代碼編譯后生成的class文件可以直接部署到其他項目的,自動加載執(zhí)行)
-
基于idea模板 template 快速創(chuàng)建Servlet對象:
1530412277705.png
// name 屬性 相當(dāng)于以前的 <servlet-name>
// urlPatterns 編寫訪問servlet的路徑 類似于 <url-pattern>
@WebServlet("/hello")
public class DemoServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("hello servlet3 ");
}
}