目錄
了解基礎
什麼是伺服器?
Web服務軟體做了哪些事兒?
什麼是Servlet
什麼是Controller
SpringBoot
通過SpringBoot建立工程
靜态資源和動态資源
端口被占用解決方案
代碼操作 1.0
如何處理動态請求?
用戶端送出請求的幾種方式
伺服器端擷取參數的幾種方式
MyBatis架構
@RestController注解
MyBatis架構
如何使用Mybatis架構
代碼操作 2.0
@Mapper注解
@Autowired注解
#{屬性名}
@RestController
了解基礎
什麼是伺服器?
- 伺服器就是一台高性能的電腦, 在這台電腦上安裝了提供xxx服務的軟體,就可以稱為xxx伺服器
- 舉例:
- 郵件伺服器: 在電腦上安裝了提供郵件收發服務的軟體.
- ftp伺服器: 在電腦上安裝了提供檔案上傳下載下傳服務的軟體
- 資料庫伺服器: 在電腦上安裝了MySQL/Oracle...
- Web伺服器: 在電腦上安裝了Web服務軟體(Tomcat)
Web服務軟體做了哪些事兒?
1. 負責搭建底層的網絡連接配接
2. 負責根據用戶端請求的靜态資源位址,找到對應的靜态資源檔案并傳回給用戶端.
3. 負責根據用戶端請求的動态資源位址,找到對應的Servlet并執行個體化運作
什麼是Servlet
- Web服務軟體(Tomcat) 不具備任何的業務功能,Servlet是用于擴充Web服務軟體業務功能的元件, Web服務軟體可以了解為一個容器, 每一個業務都需要對應一個Servlet
什麼是Controller
- SpringMVC架構中出現的Controller, 這個Controller的作用是将多個有相關性的Servlet進行了整合(比如,RegServlet/LoginServlet/AllUserServlet/UpdateServlet/DeleteServlet 使用一個UserController可以将這多個Servlet合并成一個)
SpringBoot
- SpringBoot是Spring公司提供的一個架構,作用是建立工程時能夠非常便捷的引入其它常用架構.
- 為什麼使用SpringBoot?
如果不使用SpringBoot, 從零開始建立一個空工程,在工程中每引入一個架構都需要做大量的配置工作以確定架構正常運作, 這樣開發的過程中需要用到大量的架構,這樣就需要做大量的配置工作, 非常占用時間而且容易出錯,使用SpringBoot架構建立工程,可以非常便捷的引入其它架構,省去了大量的配置工作進而能夠提高開發效率
通過SpringBoot建立工程
- 建立工程時選擇Spring initalizr , 如果下一步時出現timeout 标示請求逾時,換一個路徑
https://start.springboot.io
- 下一步 選擇Web->Spring Web 作用是引入Tomcat容器
- 下一步直到Finish
- 建立完工程後 檢查 Build裡面是否顯示綠色對鈎
- 如果建立完工程後在Build裡面顯示錯誤提示, 進入到maven面闆點選重新整理,如果問題沒有解決删除.m2檔案夾下的repository檔案夾後 再來重新整理,反複操作直到能成功.
靜态資源和動态資源
- 任何用戶端任何時間請求到的内容都是不變的内容稱為靜态資源
- 請求到的内容會根據不同的使用者不同的時間得到不同的資料,這種屬于動态資源
端口被占用解決方案
1. 檢查是否是之前的工程沒有停止導緻,如果是先關閉之前工程即可 90%
2. 電腦上某個軟體占用了8080端口, 修改工程的端口号, 找到工程的application.properties配置檔案 添加以下内容: server.port=xxxx
3. 重新開機電腦也可以解決端口被占用
代碼操作 1.0
在static中建立HTML,通過form表單發送請求,
建立entity.類對象,
在controller包中建立類寫對應代碼
@Controller
public class EmpController {
@RequestMapping("/emp/add")
@ResponseBody //注解作用:以傳回值的方式給用戶端響應資料
public String add(Emp emp){
return "我叫"+emp.getName()+"我的工作是"
+emp.getJob()+"月薪"+emp.getSal();
}
}
如何處理動态請求?
1. 建立controller包以及HelloController.java , controller包一定要建立在cn.tedu.工程名包的下面
2. 使用SpringMVC架構中提供的@Controller注解和@RequestMapping注解修飾Controller類以及Controller中的方法,
@Controller
public class HelloController {
//http://localhost:8080/hello
// 當用戶端向此位址發請求時下面的hello方法會執行
@RequestMapping("/hello")
public void hello(HttpServletResponse response) throws IOException {
System.out.println("接收到了請求!");
//設定相應類型 告訴用戶端響應的内容為什麼類型
response.setContentType("text/html;charset=utf-8");
//得到輸出對象 異常抛出
PrintWriter pw = response.getWriter();
//輸出資料
pw.println("<h1>恭喜你!測試成功!</h1>");
//關閉資源
pw.close();
}
}
用戶端送出請求的幾種方式
- 1. 在浏覽器位址欄中輸入請求位址 送出請求
- 2. 在html頁面中通過超連結送出請求
- - 相對路徑: 實際請求路徑跟頁面所處位置有關系
- - 絕對路徑: 和頁面所處位置沒有關系
- 3. 在html頁面中通過form表單送出請求
- 4. 通過前端架構發出異步請求.
伺服器端擷取參數的幾種方式
1. 通過HttpServletRequest對象擷取
2. 通過在處理請求的方法中直接聲明的方式擷取參數,此種寫法支援類型自動轉換
3. 通過自定義對象的方式接受參數,要求自定義對象的屬性名和前端傳遞過來的參數名一緻
每次在工程中添加新的靜态資源檔案時 點選idea中的Build->ReBuild 重新編譯, 因為idea有時會丢掉新增的檔案進行編譯, 導緻找不到資源 , 重新編譯完之後 還需要重新啟動工程.
MyBatis架構
@RestController注解
- 此注解相當于在每一個處理請求的方法上面都添加一個@Responsebody, 使用此注解後,每個方法都可以通過傳回值的方式給用戶端響應資料
MyBatis架構
- 此架構是目前最流行的資料持久化架構,使用此架構可以完全免去JDBC代碼操作資料(本質上就是把JDBC代碼進行了封裝), 隻需要通過xml配置檔案或注解就可以對資料進行增删改查操作 .
如何使用Mybatis架構
1. 建立工程時需要多勾選兩個
WEB --Spring Web
SQL --Mybatis Framework 和 MySQL Driver
2. 建立完包含MyBatis架構的工程時,必須配置資料庫的連接配接資訊否則工程啟動不了,在application.properties配置檔案中添加以下代碼:
spring.datasource.url=jdbc:mysql://localhost:3306/empdb? characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=賬号
spring.datasource.password=密碼
代碼操作 2.0
@Mapper注解
@Mapper
public interface EmpMapper{
//聲明查詢資料的方法
@Select("select * from newemp")
List<Emp> select();
}
MyBatis架構會根據這個抽象方法和注解的内容幫助我們生成一個執行個體化的對象
在對象中添加了方法的實作類,這個實作類裡面的代碼就是之前所寫的JDBC代碼.
@Autowired注解
自動裝配注解, 是Spring架構提供的注解通過此注解, Spring架構會結合MyBatis架構生成一個Mapper接口口的實作類并執行個體化出一個對象
@Autowired(required = false)
EmpMapper mapper;
#{屬性名}
#{屬性名} 會自動從下面方法的參數清單中查詢對應名稱的變量,如果沒有找到會找對象裡面的屬性
@Insert("insert into hero values(null,#{name},#{type},#{money})")
void insert(Hero hero);
@RestController
相當于每一個處理請求的方法上面都添加一個@Responsebody注解
@RestController //相當于每一個處理請求的方法上面都添加一個@Responsebody注解
public class EmpController {
@RequestMapping("/add")
public String add(Emp emp){...}
@RequestMapping("/select")
public String select(){...}
}