Web前端(九)-建立SpringBoot專案、web伺服器(WebServer、Servlet、Controller)、SpringBoot介紹(處理靜態、動態資源請求、客戶端發出請求的幾種方式、獲取客戶端傳遞引數的方式)
-
-
第二步:設定Group(域名反寫)、Artifact、選擇jdk版本(JDK8)
-
第三步:選擇Web,勾選 Spring Web(預設Tomcat伺服器),然後下一步完成即可!
注意:
-
工程建立完之後如果報錯, 進入到boot1-1裡面的pom.xml,重新整理maven ;
-
如果還是不行,檢查maven是否配置正確
-
如果確定maven配置沒問題 , 把.m2下的repository資料夾刪除,然後再次重新整理maven,直到工程中不報錯為止。
老師SpringBoot地址:https://gitee.com/teduliu/springboot05.git
伺服器
-
伺服器就是一臺高效能電腦
web伺服器
-
就是在一臺高效能電腦上面安裝了web服務軟體(WebServer)
-
傳奇老師帶大家寫的WebServer工程不僅包含了WebServer相關的功能,還包含了一些業務功能
WebServer做了哪些事兒?
-
負責建立了底層的網路連線
-
負責根據客戶端請求的靜態資源地址找到對應的靜態資原始檔,並返回給客戶端
j舉例:http://localhost:8088/myweb/login.html,webServer負責找到login.html檔案返回給客戶端
-
負責根據客戶端請求的動態資源路徑找到對應的Servlet,並執行
什麼是Servlet?
-
WebServer是一個容器, WebServer本身不具備任何業務功能, 而Servlet是用於擴充套件WebServer業務功能的元件, Servlet就是用來實現具體業務功能的元件。
什麼是Controller?
-
SpringMVC框架引入的Controller控制器的概念, 可以將多個有相關性的Servlet進行整合, 整合到一個Controller中, 可以大大提高開發效率
-
舉例: RegServlet、LoginServlet、SelectServlet ,可以將以上三個Servlet整合到一個UserController中
-
SpringBoot
-
SpringBoot是目前主流的開發框架, 使用此框架可以非常便捷的將目前常用的一些其它框架引入到自己的工程中,省去了大量配置工作;
-
SpringBoot的核心思想: 約定大於配置 , 程式設計師不需要關心每一個框架具體的配置過程,直接使用SpringBoot所約定好的內容即可.
-
我們常說的SSM三大框架指的是 Spring, SpringMVC, Mybatis 這三個框架, 使用SpringBoot框架是為了更便捷的將三個框架引入到自己的工程之中, 使用SpringBoot引入這三個框架省去了很多配置操作。
處理靜態資源請求
-
把靜態資原始檔放到工程的src/main/resources/static目錄下, 啟動工程,不需要新增任何程式碼,static裡面的檔案都可以被客戶端訪問到。
處理動態資源請求
-
在cn.tedu.boot11包下面建立controller包,並在裡面建立HelloController
-
在類名上面新增 @Controller註解
-
在類裡面建立一個hello方法,通過RequestMapping註解進行修飾,程式碼如下:
package com.example.boot11.controller;
import com.example.boot11.entity.Emp;
import com.example.boot11.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
執行工程時提示埠被佔用
-
如果當前執行著一個web工程,此時再執行另外一個web時會報錯, 關閉另外一個工程後再執行即可;
-
當工程異常關閉時也可能出現埠被佔用, 此時沒有可關閉的工程,有三種解決辦法:
-
重啟電腦
-
修改當前工程的埠號, 不再使用預設被佔用的8080埠
-
找到application.properties配置檔案
-
在裡面新增 server.port=808x ,注意後面不要加“;”
-
-
可以百度查詢 "8080埠被佔用",找到如何檢視佔用8080埠的程序id,然後殺掉該程序(不推薦)
-
客戶端發出請求的幾種方式
-
在瀏覽器的位址列中輸入請求地址
-
在html頁面中通過超連結發出請求
-
相對路徑:相對的是頁面當前所處位置
舉例: 比如超連結存在於 http://localhost:8080/a/b/c/index.html 頁面中
如果href="hello" 則表示的地址為 http://localhost:8080/a/b/c/hello
-
絕對路徑:
舉例:比如超連結存在於 http://localhost:8080/a/b/c/index.html 頁面中
如果href="/hello" 則表示的地址為 http://localhost:8080/hello
-
在html頁面中通過form表單發出請求
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首頁</title>
</head>
<body>
<h1>Hello SpringBoot!</h1>
<!--相對路徑-->
<a href="hello">相對路徑</a>
<!--絕對路徑-->
<a href="/hello">絕對路徑1</a>
<!--只有訪問站外資源時才推薦使用下面這種方式-->
<a href="http://localhost:8080/hello">絕對路徑2</a>
<h3>通過form表單發請求</h3>
<form action="/hello">
<input type="text" name="info">
<input type="submit">
</form>
</body>
</html>
獲取客戶端傳遞引數的幾種方式
-
通過HttpServletRequest物件獲取引數
String info = request.getParameter("info");
-
SpringMVC框架提供的方式:
-
直接在處理請求的方法引數列表位置宣告傳遞過來的引數名的方式
-
將傳遞過來的引數直接封裝到物件中
-
@ResponseBody
-
此註解是SpringMVC中提供的註解, 作用: 可以以返回值的方式給客戶響應資料,相比較PrintWriter要簡單很多。
package com.example.boot11.controller;
import com.example.boot11.entity.Emp;
import com.example.boot11.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;