handler方法分析
/*** TODO: 一個controller的方法是控制層的一個處理器,我們稱為handler* TODO: handler需要使用@RequestMapping/@GetMapping系列,聲明路徑,在HandlerMapping中注冊,供DS查找!* TODO: handler作用總結:* 1.接收請求參數(param,json,pathVariable,共享域等) * 2.調用業務邏輯 * 3.響應前端數據(頁面(不講解模版頁面跳轉),json,轉發和重定向等)* TODO: handler如何處理呢* 1.接收參數: handler(形參列表: 主要的作用就是用來接收參數)* 2.調用業務: { 方法體 可以向后調用業務方法 service.xx() }* 3.響應數據: return 返回結果,可以快速響應前端數據*/
@GetMapping
public Object handler(簡化請求參數接收){調用業務方法返回的結果 (一般都是進行頁面跳轉,或者返回數據給客戶端(json))return 簡化響應前端數據;
}
頁面跳轉控制
開發模式
混合開發模式:指將前端和后端的代碼集成在同一個項目中,對于混合開發,我們就需要使用動態頁面技術,動態展示Java的共享域數據
前后端分離:前端的界面和后端的業務邏輯通過接口分離開發的一種方式,前端開發人員主要負責頁面的呈現和用戶交互,后端開發人員主要負責業務邏輯和數據存儲。前后端通信通過 API 接口完成,數據格式一般使用 JSON 或 XML。
jsp
JSP(JavaServer Pages)是一種動態網頁開發技術,可以在 HTML 文件中嵌入 Java 代碼。它允許將 Java 代碼嵌入到 HTML 頁面中,以便使用 Java 進行數據庫查詢、處理表單數據和生成 HTML 等動態內容。另外,JSP 還可以與 Servlet 結合使用,實現更加復雜的 Web 應用程序開發。
<!-- jsp需要依賴! jstl-->
<dependency><groupId>jakarta.servlet.jsp.jstl</groupId><artifactId>jakarta.servlet.jsp.jstl-api</artifactId><version>3.0.0</version>
</dependency>
建議位置:/WEB-INF/下,避免外部直接訪問!?
轉發和重定向
@RequestMapping("/redirect-demo")
public String redirectDemo() {// 重定向到 /demo 路徑 return "redirect:/demo";
}@RequestMapping("/forward-demo")
public String forwardDemo() {// 轉發到 /demo 路徑return "forward:/demo";
}//注意: 轉發和重定向到項目下資源路徑都是相同,都不需要添加項目根路徑!填寫項目下路徑即可!
注意:在springmvc下,如果是項目下的資源,轉發和重定向都一樣都是項目下路徑!都不需要添加項目根路徑!?
在非springmvc模式下,重定向需要添加項目根路徑
重定向可以連接到外部地址,但是轉發只能轉發項目內部地址
?返回json數據
準備
1/準備json依賴
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.0</version>
</dependency>
2/配置json數據轉化器
json數據處理,必須使用此注解,因為他會加入json處理器
@ResponseBody
@ResponseBody 只直接返回字符串給前端,不要找視圖解析器
表示方法的返回值是要直接返回給客戶端的數據,而不是由視圖解析器來解析并渲染生成響應體
@RequestMapping(value = "/user/detail", method = RequestMethod.POST)
@ResponseBody
public User getUser(@RequestBody User userParam) {System.out.println("userParam = " + userParam);User user = new User();user.setAge(18);user.setName("John");//返回的對象,會使用jackson的序列化工具,轉成json返回給前端!return user;
}
添加@ResponseBody后,轉發和重定向就不生效了
@RestController
@RestController=@ResponseBody+@Controller?
返回靜態資源處理
靜態資源概念:本身就可以直接拿到瀏覽器上使用的程度了,不需要在服務器端做任何運算、處理。
資源本身已經是可以直接拿到瀏覽器上使用的程度了,**不需要在服務器端做任何運算、處理**。典型的靜態資源包括:
- 純HTML文件
- 圖片
- CSS文件
- JavaScript文件等
解決方法:
配置支持找不到handler時去查找有沒有對應的靜態資源