当前位置: 首页 > ops >正文

SpringMvc下

( 一、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 {// 转型为MultipartHttpServletRequestMultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;// 获取文件MultipartFile upload = multipartRequest.getFile("upload");// 后续处理同上...return "suc";
}

http://www.xdnf.cn/news/19026.html

相关文章:

  • log4jshell CVE-2021-44228 复现
  • 智能标签分类:新一代任务管理工具的进化方向
  • LangChain如何使用通义千问的向量模型
  • 【C语言入门级教学】sizeof和strlen的对⽐
  • Java使用apache.commons.math3的DBSCAN实现自动聚类
  • HTML 核心标签全解析:从文本排版到媒体嵌入
  • vue3中安装tailwindcss
  • C++函数继承
  • docker 搭建zookper集群,快照虚拟机多机模拟
  • 园区智慧水电管理系统:让能源管理从“成本黑洞”变“利润引擎”
  • 【实时Linux实战系列】实时数据可视化技术实现
  • 【机器学习】 12 Latent linear models
  • 【拍摄学习记录】03-曝光
  • 解决通过远程桌面访问ubuntu20.04出现的异常问题
  • IDA-pro-mcp 的核心功能 常用的prompt
  • 【机器学习入门】3.1 关联分析——从“购物篮”到推荐系统的核心逻辑
  • 【CanRun】Python终端[颜色文字]输出
  • 代理IP服务器平台推荐,企业级动态住宅IP资源哪里找?
  • 每周AI看 | 微软开源VibeVoice-1.5B、OpenAI历史性交棒、网易云商出席AICon全球人工智能开发与应用大会
  • windows下安装kafka
  • LoRA三种不同训练流程在配置和保存权重的差异(64)
  • Ubuntu 服务器 KERNEL PANIC 修复实录
  • 开源vs商用美颜sdk:美白滤镜功能在直播中的优劣对比
  • gdb打印长字符产变量信息
  • CST混合求解任务的场路联合仿真(下)
  • ACID分别如何实现
  • 【C/C++】柔性数组
  • 科学融智学引领人机协同教育新范式
  • C# 生成器模式(一个投资跟踪程序)
  • 高效接入:Suno API 与主流编程语言的结合