SpringMvc下

发布于:2025-09-03 ⋅ 阅读:(19) ⋅ 点赞:(0)

( 一、HTTP 请求方式与 RESTful 风格

1. RESTful 风格请求方式
a.GET  查询资源 获取服务器端数据 
b. POST 创建资源  向服务器提交新数据 增删改都可以
c. PUT  更新资源 全量更新服务器数据 主要是更新
d. DELETE  删除资源 移除服务器端数据 

2. 请求方式指定

通过 `@RequestMapping` 注解的 `method` 属性指定:

@RequestMapping(value = "/save", method = RequestMethod.POST)

二、参数接收注解方式

@RequestParam - 绑定请求参数到方法参数
示例:
public String save(@RequestParam("username") String name)

@PathVariable - 获取URL路径中的参数(RESTful风格)
示例:
@RequestMapping("/user/{id}")
public String findById(@PathVariable("id") Integer userId)

@RequestHeader - 获取请求头信息
示例:
public String getHeader(@RequestHeader("User-Agent") String userAgent)

@CookieValue - 获取Cookie值
示例:
public String getCookie(@CookieValue("JSESSIONID") String sessionId)

@RequestBody - 接收JSON格式的请求体
示例:
public String saveUser(@RequestBody User user)

 三、响应数据和结果视图

 1. Controller 方法返回值类型

(1)String 类型

指定逻辑视图名称,由视图解析器解析为物理视图:

@RequestMapping("/save1.do")
public String save1() {
    return "suc"; // 对应/pages/suc.jsp
}

 (2)void 类型

需手动处理响应,可通过请求转发或重定向跳转:

@RequestMapping("/save2.do")
public void save2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 请求转发
    request.getRequestDispatcher("/pages/suc.jsp").forward(request, response);
    
    // 或直接响应数据
    response.getWriter().print("hello");
}


 

(3)ModelAndView 对象

同时携带数据和视图信息:

@RequestMapping("/save3.do")
public ModelAndView save3() {
    ModelAndView mv = new ModelAndView();
    mv.addObject("msg", "用户名或密码已存在"); // 存储数据
    mv.setViewName("suc"); // 设置视图
    return mv;
}


 

(4)JSON 数据

结合 `@ResponseBody` 注解返回 JSON 格式数据:

@RequestMapping("/save6.do")
@ResponseBody
public User save6(@RequestBody User user) {
    return user; // 自动转换为JSON
}


 

 2. 请求转发与重定向

(1)请求转发(Forward)

服务器内部跳转,地址栏不变
 共享 request 域中的数据,会携带参数

发送一次请求

实现方式:

// 方式1:返回字符串
return "forward:/pages/suc.jsp";

// 方式2:通过request对象
request.getRequestDispatcher("/pages/suc.jsp").forward(request, response);

 (2)重定向(Redirect)

客户端跳转,地址栏改变
不共享 request 域中的数据

发送两次请求

实现方式:

// 方式1:返回字符串
return "redirect:/pages/suc.jsp";

// 方式2:通过response对象
response.sendRedirect(request.getContextPath() + "/pages/suc.jsp");


 

 3. 返回 JSON 数据的两种方式

(1)在方法上添加 @ResponseBody 注解

@RequestMapping("/getUser")
@ResponseBody
public User getUser() {
    User user = new User();
    user.setUsername("test");
    user.setAge(20);
    return user;
}


 

 (2)在类上添加 @RestController 注解

相当于 `@Controller + @ResponseBody` 的组合:

@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/getUser")
    public User getUser() {
        // 方法返回值自动转为JSON
    }
}

(3)在具体的变量上加@RequestController

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.0</version>
</dependency>


 

四、文件上传

1. 准备工作

(1)导入依赖
 

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

(2)配置文件上传解析器(springmvc.xml)

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="8388608" /> <!-- 8M -->
</bean>


 

(3)编写上传表单

<form action="/fileupload.do" method="post" enctype="multipart/form-data">
    选择文件:<input type="file" name="upload" /><br/>
    <input type="submit" value="上传" />
</form>


 

2. 两种接收文件的方式

(1)使用 MultipartFile 对象(推荐)

@RequestMapping("/fileupload.do")
public String upload(MultipartFile upload, HttpServletRequest request) throws IOException {
    // 获取上传路径
    String realPath = request.getSession().getServletContext().getRealPath("/uploads");
    File file = new File(realPath);
    if (!file.exists()) {
        file.mkdirs();
    }
    
    // 处理文件名(避免重复)
    String filename = upload.getOriginalFilename();
    String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();
    filename = uuid + "_" + filename;
    
    // 上传文件
    upload.transferTo(new File(file, filename));
    return "suc";
}

(2)通过 HttpServletRequest 转型

@RequestMapping("/fileupload2.do")
public String upload2(HttpServletRequest request) throws IOException {
    // 转型为MultipartHttpServletRequest
    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    // 获取文件
    MultipartFile upload = multipartRequest.getFile("upload");
    // 后续处理同上...
    return "suc";
}


网站公告

今日签到

点亮在社区的每一天
去签到