springMVC(1)---获取前段数据
首先说明,如果你学过Struts2,那么在学springMVC就会简单很多,我也不最基础的开始写了,我前篇文章搭建了个ssm框架,算是springmvc入门了。
链接:基于maven的ssm框架整合
一. 有哪些绑定数据的注解:
1.@RequestParam,绑定单个请求数据,可以是URL中的数据,表单提交的数据或上传的文件;
2.@PathVariable,绑定URL模板变量值;
3.@CookieValue,绑定Cookie数据;
4.@RequestHeader,绑定请求头数据;
5.@ModelAttribute,绑定数据到Model;
6.@SessionAttributes,绑定数据到Session;
7.@RequestBody,用来处理Content-Type不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;
8.@RequestPart,绑定“multipart/data”数据,并可以根据数据类型进项对象转换;
二.@RequestParam讲解
首先说明,项目的框架和架包我直接用的是smm框架整合的内容,我是在这个基础上进行操作,先看我jsp放置。
(1)先看Controller层
import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; @Controller public class ParamController { /** * GET请求 */ @RequestMapping(value="/jsp/paramdate", method = {RequestMethod.GET}) public ModelAndView paramBind(){ ModelAndView modelAndView = new ModelAndView(); //因为我这边指定是post请求,所以不会走到这里,所以haha.jsp也没有写 modelAndView.setViewName("haha"); return modelAndView; } /** * POST请求 */ @RequestMapping(value="/jsp/paramdate", method = {RequestMethod.POST}) public ModelAndView paramBind(HttpServletRequest request, @RequestParam("urlParam") String urlParam, @RequestParam("formParam")
String formParam, @RequestParam("formFile") MultipartFile formFile){ //通过注解直接获得 ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("urlParam", urlParam); modelAndView.addObject("formParam", formParam); modelAndView.addObject("formFileName", formFile.getOriginalFilename()); //如果不用注解获得数据,我们也可以手动获取 String urlParam1 = ServletRequestUtils.getStringParameter(request, "urlParam", null); String formParam1 = ServletRequestUtils.getStringParameter(request, "formParam", null); MultipartFile formFile1 = ((MultipartHttpServletRequest) request).getFile("formFile"); modelAndView.addObject("urlParam1", urlParam1); modelAndView.addObject("formParam1", formParam1); modelAndView.addObject("formFileName1", formFile1.getOriginalFilename()); //setViewName代表返回界面名称 modelAndView.setViewName("return"); return modelAndView; } }
(2)开始的start.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> </head> <body> <form action="paramdate?urlParam=你好" method="post" enctype="multipart/form-data"> <input type="text" name="formParam" /><br/> <input type="file" name="formFile" /><br/> <input type="submit" value="Submit" /> </form> </body> </html>
界面
(3)返回return.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> </head> <body> 注解获取数据:<br/><br/> ${urlParam}<br/> ${formParam}<br/> ${formFileName}<br/><br/><br/><br/> 手动获取数据:<br/><br/> ${urlParam1}<br/> ${formParam1}<br/> ${formFileName1}<br/> </body> </html>
界面
通过这个小案例,我们通过注解和非注解的方式,把前段界面的值传到后端,在从后端传到前段。
思考:我们在实际开发中,在前段往后段传值的时候,后端一个一个获取值再放到Model实体中,还是太麻烦。别担心,我们不需要把数据绑定到一个个变量然后在对model赋值,只需要把model加入相应的action参数(这里不需要指定绑定数据的注解)Spring MVC会自动进行数据转换并绑定到model对象上,一切就是这么简单。
三.通过实体获取前端值
(1)建立User实体
public class User { private String name; private String password; /*提供set和get方法,toString方法*/ }
(2)建立Controller类
import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.ssm.model.User; @Controller public class UsersController { @RequestMapping("/jsp/loging") public void getUser(HttpServletRequest request, Model model,User user){ User users=user; System.out.println(users.getName()+"--"+users.getPassword()); } }
(3)开始loging.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- 如何要使用SpringMVC标签,那么一定要添加下面这个taglib --> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <!-- 如果你要使用model进行赋值,那就需要指明哪个model,而且id中的值要和下面值一致,不然会报错 --> <!-- Neither BindingResult nor plain target object for bean name 'users' available as request attribute --> <jsp:useBean id="user" class="com.ssm.model.User" scope="request"/> <html> <body> <form:form action="loging" modelAttribute="user" method="post"> 用户名:<form:input path="name"/><br/> 密 码:<form:password path="password"/><br/> <input type="submit" value="Submit" /> </form:form> </body> </html> <!-- 还有如果你的form表单中,path中的名字,在model中没有也会报错,比如我加一个names,当加载页面时报错 --> <!-- Invalid property 'names' of bean class [com.ssm.model.User]: Bean property 'names' is not readable -->
界面 (密码123)
(4)最后我们在后台看我们打印的那条数据
已经成功,直接把属性注入到了user中。
想的太多,做的太少,中间的落差就是烦恼,要么去做,要么别想 少尉【8】