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

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.dtcms.com/a/356652.html

相关文章:

  • Oracle SQL 性能调优的基石:深入解读与驾驭执行计划
  • 商家协同生态下的复购革命:跨店收益如何激活12%增量消费
  • 【新启航】3D 逆向抄数的工具技术与核心能力:基于点云处理的扫描设备操作及模型重建方法论
  • 【活动回顾】“智驱未来,智领安全” AI+汽车质量与安全论坛
  • OpenEuler部署LoganaLyzer
  • 【开题答辩全过程】以 基于SpringBootVue的智能敬老院管理系统为例,包含答辩的问题和答案
  • 黑芝麻智能与云深处科技达成战略合作,共推具身智能平台全球市场应用
  • 基于互补素数与最小素因子性质的哥德巴赫猜想证明-陈墨仙
  • ROS2学习打卡表
  • 外卖大战之后,再看美团的护城河
  • vue3获取子组件
  • PostgreSQL15——子查询
  • 采用机器学习的苗期棉株点云器官分割与表型信息提取
  • GPT-Realtime架构与Token成本控制深度解析
  • Linux/UNIX系统编程手册笔记:基本概念
  • Redis面试题--介绍下Redis几种集群模式
  • Shell 秘典(卷二)——号令延展秘术 与 流程掌控心法・if 天机判语篇精解
  • 力扣p1011在D天送达包裹的能力 详解
  • docker-相关笔记
  • 网站加载慢,linux服务器接口请求响应变慢,怎么排查,一般是什么原因
  • 【算法】78.子集--通俗讲解
  • 开源网盘聚合工具Alist:统一管理20+云存储的技术实践
  • vue常见的指令都有哪些,有什么作用
  • 内存页和TLB缓存
  • 计算机专业考研备考建议
  • 前端缓存问题详解
  • CollageIt:简单易用的照片拼贴工具
  • 代理IP服务器平台推荐,企业级动态住宅IP资源哪里找?
  • 在做题中学习(93):最长公共子序列的长度
  • 1.6 GPU Usage简介