温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring mvc怎样实现数据处理

发布时间:2021-02-01 10:54:19 来源:亿速云 阅读:171 作者:小新 栏目:编程语言

小编给大家分享一下Spring mvc怎样实现数据处理,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

处理提交数据

1、提交的域名称和处理方法的参数名一致

提交数据 : http://localhost:8080/hello?name=xiaohua

处理方法 :

@RequestMapping("/hello") public String hello(String name){   System.out.println(name);   return "hello"; }

后台输出 : xiaohua

2、提交的域名称和处理方法的参数名不一致

提交数据 : http://localhost:8080/hello?username=xiaohua

处理方法 :

//@RequestParam("username") : username提交的域的名称 . @RequestMapping("/hello") public String hello(@RequestParam("username") String name){   System.out.println(name);   return "hello"; }

后台输出 : xiaohua

3、提交的是一个对象

要求提交的表单域和对象的属性名一致 , 参数使用对象即可

实体类

public class User {   private int id;   private String name;   private int age;   //构造   //get/set   //tostring() }

提交数据 : http://localhost:8080/mvc04/user?name=xiaohua&id=1&age=15

处理方法 :

@RequestMapping("/user") public String user(User user){   System.out.println(user);   return "hello"; }

后台输出 : User { id=1, name='xiaohua', age=15 }

说明:如果使用对象的话,前端传递的参数名和对象名必须一致,否则就是null。

数据显示到前端

第一种 : 通过ModelAndView

我们前面一直都是如此 . 就不过多解释

public class ControllerTest1 implements Controller {   public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {     //返回一个模型视图对象     ModelAndView mv = new ModelAndView();     mv.addObject("msg","ControllerTest1");     mv.setViewName("test");     return mv;   } }

第二种 : 通过ModelMap

ModelMap

@RequestMapping("/hello") public String hello(@RequestParam("username") String name, ModelMap model){   //封装要显示到视图中的数据   //相当于req.setAttribute("name",name);   model.addAttribute("name",name);   System.out.println(name);   return "hello"; }

第三种 : 通过Model

Model

@RequestMapping("/ct2/hello") public String hello(@RequestParam("username") String name, Model model){   //封装要显示到视图中的数据   //相当于req.setAttribute("name",name);   model.addAttribute("msg",name);   System.out.println(name);   return "test"; }

对比

  • Model 只有寥寥几个方法只适合用于储存数据,简化了对于Model对象的操作和理解;

  • ModelMap 继承了 LinkedMap ,除了实现了自身的一些方法,同样的继承 LinkedMap 的方法和特性;

  • ModelAndView 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。

乱码问题

SpringMVC给我们提供了一个过滤器 , 可以在web.xml中配置 .

修改了xml文件需要重启服务器

<filter>   <filter-name>encoding</filter-name>   <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>   <init-param>     <param-name>encoding</param-name>     <param-value>utf-8</param-value>   </init-param> </filter> <filter-mapping>   <filter-name>encoding</filter-name>   <url-pattern>/</url-pattern> </filter-mapping>

有些极端情况下.这个过滤器对get的支持不好 .

处理方法 :

修改tomcat配置文件 : 设置编码!

<Connector URIEncoding="utf-8" port="8080" protocol="HTTP/1.1"       connectionTimeout="20000"       redirectPort="8443" />

自定义过滤器

package com.xiaohua.filter; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Map; /**  * 解决get和post请求 全部乱码的过滤器  */ public class GenericEncodingFilter implements Filter {   @Override   public void destroy() {   }   @Override   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {     //处理response的字符编码     HttpServletResponse myResponse=(HttpServletResponse) response;     myResponse.setContentType("text/html;charset=UTF-8");     // 转型为与协议相关对象     HttpServletRequest httpServletRequest = (HttpServletRequest) request;     // 对request包装增强     HttpServletRequest myrequest = new MyRequest(httpServletRequest);     chain.doFilter(myrequest, response);   }   @Override   public void init(FilterConfig filterConfig) throws ServletException {   } } //自定义request对象,HttpServletRequest的包装类 class MyRequest extends HttpServletRequestWrapper {   private HttpServletRequest request;   //是否编码的标记   private boolean hasEncode;   //定义一个可以传入HttpServletRequest对象的构造函数,以便对其进行装饰   public MyRequest(HttpServletRequest request) {     super(request);// super必须写     this.request = request;   }   // 对需要增强方法 进行覆盖   @Override   public Map getParameterMap() {     // 先获得请求方式     String method = request.getMethod();     if (method.equalsIgnoreCase("post")) {       // post请求       try {         // 处理post乱码         request.setCharacterEncoding("utf-8");         return request.getParameterMap();       } catch (UnsupportedEncodingException e) {         e.printStackTrace();       }     } else if (method.equalsIgnoreCase("get")) {       // get请求       Map<String, String[]> parameterMap = request.getParameterMap();       if (!hasEncode) { // 确保get手动编码逻辑只运行一次         for (String parameterName : parameterMap.keySet()) {           String[] values = parameterMap.get(parameterName);           if (values != null) {             for (int i = 0; i < values.length; i++) {               try {                 // 处理get乱码                 values[i] = new String(values[i]                     .getBytes("ISO-8859-1"), "utf-8");               } catch (UnsupportedEncodingException e) {                 e.printStackTrace();               }             }           }         }         hasEncode = true;       }       return parameterMap;     }     return super.getParameterMap();   }   //取一个值   @Override   public String getParameter(String name) {     Map<String, String[]> parameterMap = getParameterMap();     String[] values = parameterMap.get(name);     if (values == null) {       return null;     }     return values[0]; // 取回参数的第一个值   }   //取所有值   @Override   public String[] getParameterValues(String name) {     Map<String, String[]> parameterMap = getParameterMap();     String[] values = parameterMap.get(name);     return values;   } }

然后在web.xml中配置这个过滤器即可!

看完了这篇文章,相信你对“Spring mvc怎样实现数据处理”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI