JavaWeb學習之入門

JavaWeb概述

JavaWeb可以分爲兩個單詞來理解:Java和Web。

Web:即網頁的意思。

Web分類

Web可以分爲靜態web和動態web。

靜態web

  • 靜態的網頁,提供給所有人看的數據始終不會發生變化!
  • 如html,css

動態web

  • 動態的網頁,與靜態網頁相反,提供給所有人看的數據始終會發生變化!所有人在不同的時間、不同的地點看到的數據是不同的。
  • 如淘寶、京東等。現在幾乎所有的網站都是動態web
  • 技術棧:Servlet/JSP,ASP,PHP等

JavaWeb:在Java中,動態web資源開發的技術統稱爲JavaWeb。

Web應用程序

web應用程序:可以提供瀏覽器訪問的程序!

web應用程序如:index.html,a.html等。網站可以將這多個web資源整合起來,這些web資源可以被外界訪問。

我們能訪問到的任何一個頁面或者資源,都存在於這個世界的某一個角落的計算機上。它們對外提供了一個URL,通過URL來進行訪問。

統一的web資源會被放在同一個文件夾下,即web應用程序。我們需要服務器來啓動它。

一個web應用由多部分組成(靜態、動態):

  • html、css、js

  • jsp、servlet

  • java程序

  • jar包

  • 配置文件(Properties)

web應用程序編寫完畢後,若想提供給外界使用,需要一個服務器來統一管理。

靜態web

靜態web是網頁發展最開始的階段。*.html就可以認爲是靜態網頁。

如果服務器一直存在靜態網頁,我們就可以直接進行讀取。

靜態web的獲取:

客戶端通過網絡向服務器發送請求,服務器接收到請求後,在自己的資源中找是否有對應的信息,若有服務器則響應給客戶端。

靜態頁面存在的缺點:

  • web頁面無法動態更新,所有的用戶看到的都是同一個頁面

    所看到的動態是僞動態

    • 使用輪播圖、點擊特效等實現
    • 使用JavaScript實現
    • 使用VBScript實現
  • 無法和數據庫進行交互(數據無法持久化,用戶無法交互)

動態web

頁面會動態展示:Web頁面的展示效果因人而異。

web的獲取:

客戶端向服務器發送請求,若請求的是靜態資源,則在file system中找,找到後通過web server響應給客戶端;若請求的是動態資源,則通過jsp/servlet渲染之後在通過web server響應給客戶端。

缺點:

假如服務器的動態web資源出現了錯誤,我們需要編寫後臺程序,重新分佈

優點:

  • web頁面可以動態更新,所有的用戶看到的都不是同一個頁面
  • 可以和數據庫進行交互(數據持久化)

Web服務器

Web開發技術

web開發的技術有ASP、PHP、JSP等。

ASP:

  • 微軟的,國內最早流行的是ASP
  • 在HTML中嵌入了VB的腳本
  • 在ASP開發中,一個頁面:會在html中嵌套java的代碼。頁面及其混亂。
  • 維護成本高
  • 使用C#

PHP:

  • PHP開發速度很快,功能很強大,跨平臺,代碼簡單
  • 無法承載大訪問量的情況

JSP/Servlet:

  • SUN公司主推的B/S架構
  • 基於Java語言
  • 可以承載三高問題帶來的影響
  • 語法像ASP

Web服務器-Tomcat

服務器是一種被動的操作,用來處理用戶的一些請求和給用戶一些響應。

在進行Web開發時,用到的服務器是Tomcat

Tomcat

Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,最新的Servlet 和JSP 規範總是能在Tomcat 中得到體現,因爲Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛並得到了部分軟件開發商的認可,成爲目前比較流行的Web 應用服務器。

Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。對於一個Java初學web的人來說,它是最佳的選擇

Tomcat 實際上運行JSP 頁面和Servlet。Tomcat最新版本爲9.0。

使用Tomcat發佈網站:

初學Tomcat時,可以模仿着寫一個網站:

將自己寫的網站放到服務器(Tomcat)指定的web應用的文件夾webapps中,就可以訪問了。

除此之外,一個網站應該由的結構如下:

-- webapps : Tomcat服務器的web目錄
   -- ROOT
   -- xxx :網站的目錄名
      -- WEB-INF
         -- classes:java程序
         -- lib:web應用所依賴的jar包
         -- web.xml:網站配置文件
      -- index.html : 默認的首頁
      -- static :靜態資源
         -- css
         -- js
         -- img
      -- ...

HTTP

HTTP:即超文本傳輸協議,是一個簡單的請求-響應協議,它通常運行在TCP之上。

HTTP的端口是80

HTTP經歷了兩個時期:

  • HTTP1.0:客戶端可以與服務器連接後,只能獲得一個web資源

  • HTTP2.0:客戶端可以與web服務器連接後,可以後的多個web資源

HTTP請求:

客戶端向服務器發請求(Request)

以百度爲例:

Request URL:https://www.baidu.com/   請求地址
Request Method:GET    get方法/post方法
Status Code:200 OK    狀態碼:200
Remote(遠程) Address:14.215.177.39:443
Accept:text/html   
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9    語言
Cache-Control:max-age=0
Connection:keep-alive

請求行

請求方式有:GET,POST,HEAD,DELETE,PUT,TRACT等

  • GET:請求能夠攜帶的參數比較少,大小有限制,會在瀏覽器的URL地址欄顯示數據內容、不安全,但高效。
  • POST:請求能夠攜帶的參數沒有限制,大小沒有限制,不會在瀏覽器的URL地址欄中顯示數據內容。安全,但不高效。

請求行中的請求方式爲GET。

消息頭

Accept:告訴瀏覽器,它所支持的數據類型
Accept-Encoding:支持哪種編碼格式  GBK   UTF-8   GB2312  ISO8859-1
Accept-Language:告訴瀏覽器,它的語言環境
Cache-Control:緩存控制
Connection:告訴瀏覽器,請求完成是斷開還是保持連接
HOST:主機....

HTTP響應:

服務器給客戶端進行響應

Cache-Control:private    緩存控制
Connection:Keep-Alive    連接
Content-Encoding:gzip    編碼
Content-Type:text/html   類型

響應體

Accept:告訴瀏覽器,它所支持的數據類型
Accept-Encoding:支持哪種編碼格式  GBK   UTF-8   GB2312  ISO8859-1
Accept-Language:告訴瀏覽器,它的語言環境
Cache-Control:緩存控制
Connection:告訴瀏覽器,請求完成是斷開還是保持連接
HOST:主機....
Refresh:告訴客戶端,多久刷新一次;
Location:讓網頁重新定位;

響應狀態碼

  • 200:請求響應成功
  • 3XX:請求重定向
  • 4XX:找不到資源(資源不存在)404
  • 5XX:服務器代碼錯誤
    • 500:服務器內部錯誤
    • 502:網關錯誤

HTTPS(全稱:Hyper Text Transfer Protocol over SecureSocket Layer):是以安全爲目標的 HTTP 通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性。

HTTPS的端口是443。

Maven

在JavaWeb開發中,需要使用大量的jar包,手動導入jar是比較麻煩且繁瑣的。可以使用Maven自動導入和配置jar。

Maven:可以通過一小段描述信息來管理項目的構建,報告和文檔的項目管理工具軟件。

Maven的核心思想是:約定大於配置。有約束就不要去違反。Maven會規定好該如何去編寫代碼,必須要按照這個規範來執行。

在IDEA中使用Maven

1、啓動IDEA

2、創建一個MavenWeb項目

3、等待項目初始化完畢

4、觀察maven倉庫

項目初始化完畢後,會發現在Maven倉庫中多了一些東西

5、IDEA中Maven的設置

在IDEA項目創建成功後,需要看一眼Maven的配置。

6、至此,Maven在IDEA中的配置和使用就可以了。

創建一個普通的項目

在IDEA中創建一個普通的JavaWeb項目。

不用勾選 Create from archetype。

對比普通的項目和使用Maven模板的項目

使用Maven模板的項目:

普通的項目:

可以發現:

  • Maven模板創建的項目中main下面沒有java和resources。

  • 普通項目中沒有webapp。webapp是只有在web應用下纔會有的。

標記文件夾的功能

在maven模板創建的項目中,在main下創建兩個目錄:java和resources。

將這兩個目錄的屬性進行修改:

修改方式一

將java目錄改爲Sources Root,將resources改爲Resources Root。修改後如下:

修改方式二

在IDEA中配置Tomcat

1、點擊IDEA中的Edit Configurations

解決警告問題

我們訪問一個網站的時候,需要指定一個文件夾名字,不然會出現這樣的問題。所以創建一個文件夾是必要的配置。

2、啓動Tomcat

3、測試

在瀏覽器的地址欄中輸入 http://localhost:8080/

4、關閉Tomcat

pom文件

pom.xml是Maven的核心配置文件。

<?xml version="1.0" encoding="UTF-8"?>

<!--Maven的版本和頭文件-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

    <!--這裏是配置的GAV-->
  <groupId>javaweb</groupId>
  <artifactId>javaweb-maven</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
    <!--packaging:項目打包的方式。
    jar:java項目
    war:JavaWeb項目
    -->

  <name>javaweb-maven Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

    <!--配置-->
  <properties>
      <!--項目的默認構建編碼-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <!--編碼版本-->
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

    <!--項目依賴-->
  <dependencies>
      <!--具體依賴的jar包配置文件-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

    <!--項目構建用的東西-->
  <build>
    <finalName>javaweb-maven</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

Maven的一個高級之處在於,它會自動導入一個jar包所依賴的其他jar包,如:

由於Maven的核心思想是 約定大於配置,我們之後可能會遇到寫的配置文件無法被導出或者生效的問題,解決方案:在pom.xml中的build中配置resources,來防止我們資源導出失敗的問題

<!--在build中配置resources,來防止我們資源導出失敗的問題-->
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

可以通過IDEA查看目錄樹(jar包的關聯聯繫圖):

IDEA中Maven的全局設置

在創建項目的時候,避免每次去設置路徑,可以在IDEA的全局設置中進行配置。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章