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】