SpingWebMVC

发布 | 2024-09-08 | JAVA

开发模式

前后端不分离

视图层由服务端渲染

前后端分离

视图层由用户端渲染

HelloWorld
package xin.links.framework.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * ClassName: SpringFramework
 * Package: xin.links.framework.springmvc.contriller
 * Description:
 *
 * @author Jane
 * @version 1.0
 * @since 2024/9/3 10:12
 */



//@RequestMapping的路径通配符
//    ?:匹配一个字符
//    *:匹配任意字符
//    **:匹配任意字符,包括路径中的“/”
//    精确匹配
//
//    各级优先级
//    精确匹配 > ? > * > **


@Controller
public class HelloController {

    @ResponseBody
    @RequestMapping("/hello")//    @RequestMapping的value属性指定请求路径
    public String hello() {
        return "hello页面";
    }

}
注解@RestController

@Controller@ResponseBody注解的组合,意味着这个类的所有方法返回值都会直接用作响应体。

请求响应处理
请求首行
  • 请求方式:GET、POST、PUT、DELETE等
  • 请求路径:/hello、/index.html等
  • 请求协议:HTTP/1.1等
请求头
  • 键值对:Host: www.example.com等
  • 每对之间用换行符分隔
请求体
  • 发送给服务器的内容
  • 在POST请求中携带大量数据
  • GET请求通常在URL中携带数据
响应首行
  • 响应状态码:200、404、500等
  • 响应描述:OK、Not Found、Internal Server Error等
  • 响应协议:HTTP/1.1等
响应头
  • 键值对:Content-Type: text/html; charset=utf-8等
  • 每对之间用换行符分隔
响应体
  • 服务器返回的内容
  • 可以是一个HTML页面、JSON数据等

@RequestMapping取出参数值

路径映射(@RequestMapping

@RequestMapping 注解支持丰富的映射规则,可以对路径、请求方法、参数、请求头、数据类型等进行细粒度控制。

基础映射和通配符使用
@Controller
public class BasicMappingController {

    // 简单路径映射
    @RequestMapping("/hello")
    public String helloWorld() {
        return "hello";
    }

    // 使用单个通配符
    @RequestMapping("/users/*/profile")
    public String userProfile() {
        return "userProfile";
    }

    // 使用多级通配符
    @RequestMapping("/documents/**")
    public String handleDocuments() {
        return "documents";
    }
}

* 匹配单层路径,** 匹配多层路径。

请求方法限定
@RequestMapping(value = "/submit", method = RequestMethod.POST)
public String handleSubmit() {
    return "submitSuccess";
}

支持多种请求方法:GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH 等。

请求参数和请求头限定

请求参数限定:

@RequestMapping(value = "/search", params = "type=advanced")
public String handleAdvancedSearch() {
    return "advancedSearch";
}

请求头限定:

@RequestMapping(value = "/upload", headers = "Content-Type=multipart/form-data")
public String handleFileUpload() {
    return "uploadSuccess";
}
请求数据类型(consumes)和响应数据类型(produces

请求数据类型:

@RequestMapping(value = "/json", consumes = "application/json")
public String handleJsonRequest(@RequestBody MyObject obj) {
    return "jsonProcessed";
}

响应数据类型:

@RequestMapping(value = "/getJson", produces = "application/json")
@ResponseBody
public MyObject getJsonResponse() {
    return new MyObject();
}

请求处理

普通变量、@RequestParam 和 POJO

普通变量收集请求参数:

@RequestMapping("/greet")
public String greetUser(@RequestParam("name") String name) {
    return "Hello, " + name;
}
使用 @RequestParam 明确指定参数:
@RequestMapping("/show")
public String showUserInfo(@RequestParam(name = "id", required = true) int userId) {
    return "User ID: " + userId;
}
使用 POJO 封装请求参数:
public class User {
    private String name;
    private int age;
    // getters and setters
}

@RequestMapping("/register")
public String registerUser(User user) {
    return "User registered: " + user.getName();
}
获取请求头和 Cookie 值

获取请求头:

@RequestMapping("/info")
public String getInfo(@RequestHeader("User-Agent") String userAgent) {
    return "User-Agent: " + userAgent;
}

获取 Cookie 值:

@RequestMapping("/cookie")
public String getCookieValue(@CookieValue("JSESSIONID") String sessionId) {
    return "Session ID: " + sessionId;
}

JSON 字符串和文件上传处理

接受 JSON 字符串并转换为对象:

@RequestMapping(value = "/addUser", consumes = "application/json")
public String addUser(@RequestBody User user) {
    return "User added: " + user.getName();
}

文件上传:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
    return "File uploaded: " + file.getOriginalFilename();
}
获取完整请求对象和使用原生 API

获取完整请求对象(HttpEntity):

@RequestMapping("/fullRequest")
public String getFullRequest(HttpEntity<String> httpEntity) {
    return "Request Body: " + httpEntity.getBody();
}

使用原生 Servlet API 对象:

@RequestMapping("/nativeApi")
public String handleNative(HttpServletRequest request) {
    return "Request URL: " + request.getRequestURL();
}

响应处理

返回 JSON 数据
@RequestMapping(value = "/getJsonData", produces = "application/json")
@ResponseBody
public User getJsonData() {
    return new User("Alice", 30);
}
文件下载
@RequestMapping("/download")
public ResponseEntity<Resource> downloadFile() {
    // 实现文件下载功能
    return ResponseEntity.ok()
                         .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=file.txt")
                         .body(resource);
}
使用 Thymeleaf 渲染视图

通过 Thymeleaf 模板引擎将数据渲染到 HTML 页面中:

<p th:text="'Hello, ' + ${name}">Hello, user!</p>

标签
没有标签

© 著作权归作者所有

本文由 趣代码Blog 创作,采用 知识共享署名4.0 国际许可协议进行许可,本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。

评论关闭