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放置。

springmvc如何从前台接受数据 springmvc获取前端数据_springmvc如何从前台接受数据

(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>



界面

springmvc如何从前台接受数据 springmvc获取前端数据_spring_02

(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>



界面

springmvc如何从前台接受数据 springmvc获取前端数据_后端_03

通过这个小案例,我们通过注解和非注解的方式,把前段界面的值传到后端,在从后端传到前段。

思考:我们在实际开发中,在前段往后段传值的时候,后端一个一个获取值再放到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)

springmvc如何从前台接受数据 springmvc获取前端数据_java_04

(4)最后我们在后台看我们打印的那条数据

springmvc如何从前台接受数据 springmvc获取前端数据_json_05

已经成功,直接把属性注入到了user中。

 

想的太多,做的太少,中间的落差就是烦恼,要么去做,要么别想 少尉【8】