1.提交的名称和方法的参数名一致
//localhost:8080/ur/t1?name=xxx;@getmapping("/t1")public string test1(string name, model model){ //1.接收前端参数 system.out.println("接收到前端的参数为:" + name); //2.将返回的结果传递给前端 model.addattribute("msg", name); //3.跳转视图 return "test";}
2.提交的名称和方法的参数名不一致
//加上@requestparam("urname")就知道是从前端baido接收过来localhost:8080/ur/t1?urname=xxx;。此时必须要通过urname识别@getmapping("/t1")public string test1(@requestparam("urname") string name, model model){ //1.接收前端参数 system.out.println("接收到前端的参数为:" + name); //2.将返回的结果传递给前端 model.addattribute("msg", name); //3.跳转视图 return "test";}
3.提交一个对象
//前端接收的是一个对象:id, name, age//localhost:8080/ur/t1?id=1&name=xxx&age=2;/** 1.接收前端用户传递的参数,判断参数的名字,假设名字直接在方法上可以直接使用* 2.假设传递的是一个对象ur,匹配ur对象中的字段名:如果名字一致则ok。否则匹配不到** */@getmapping("/t2")public string test2(ur ur){ system.out.println(ur); //3.跳转视图 return "test";}
使用对象,前端传递的参数名和对象名必须一致,否则为空。
2.1 modelandview
public modelandview handlerequest(httprvletrequest httprvletrequest, httprvletrespon httprvletrespon) throws exception { modelandview modelandview = new modelandview(); modelandview.addobject("msg","controllertest1"); modelandview.tviewname("test"); return modelandview;}
2.2 model
@requestmapping("/t2")public string test(model model){ model.addattribute("msg", "controllertest2"); return "test";}
2.3 modelmap
@getmapping("/t3")public string test3(@requestparam("urname") string name,model map){ map.addattribute("name",name); return "test";}
对比:
modelandview 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。m清北教育odelmap 继承了 linkedhashmap ,除了实现了自身的一些方法,同样的继承 linkedhashmap 的方法和特性;model 少数方法适合用于储存数据,简化了新手对于model对象的操作和理解;大部分情况下直接使用model1.form表单
<%@ page contenttype="text/html;chart=utf-8" language="java" %> <html> <head> <title>title</title> </head> <body> <form action="/encoding/t1" method="post"> <input type="text" name="name"> <input type="submit"> </form> </body> </html>
2.写一个controller
@controllerpublic class encodingcontroller { @postmapping("/encoding/t1") public string test(string name, model model){ model.addattribute("msg",name); return "test"; }}
3.测试结果
前面弄得好好的,结果出了个这
解决办法:
看一下自己tomcat中的是不是设置的utf-8。在自己下载路径下-conf-rver.xml
<connector connectiontimeout="20000" port="8080" protocol="http/1.1" redirectport="8443" urlencoding="utf-8"/>
1)修改提交方式
把提交方式post方法改成get方法
2)spring提供了过滤器,可以在web.xml中直接配置。(这个基本够用)
<!--2.配置 springmvc的乱码过滤--><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>
3)过滤器解决(这个不行,功能不全)
package com.hxl.filter;import javax.rvlet.*;import java.io.ioexception;public class encodingfilter implements filter { @override public void init(filterconfig filterconfig) throws rvletexception { } @override public void dofilter(rvletrequest rvletrequest, rvletrespon rvletrespon, filterchain filterchain) throws ioexception, rvletexception { rvletrequest.tcharacterencoding("utf-8"); rvletrespon.tcharacterencoding("utf-8"); filterchain.dofilter(rvletrequest,rvletrespon); } @override public void destroy() { }}
写完就要去注册(web.xml)
<filter> <filter-name>encoding</filter-name> <filter-class>com.hxl.filter.encodingfilter</filter-class></filter><filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/</url-pattern></filter-mapping>
4)大神自定义过滤器
package com.hxl.filter;import javax.rvlet.*;import javax.rvlet.http.httprvletrequest;import javax.rvlet.http.httprv父母是孩子最好的老师letrequestwrapper;import javax.rvlet.http.httprvletrespon;import java.io.ioexception;import java.io.unsupportedencodingexception;import java.util.map;/** * 解决get和post请求 全部乱码的过滤器 */public class encodingfilter implements filter { @override public void destroy() { } @override public void dofilter(rvletrequest request, rvletrespon respon, filterchain chain) throws ioexception, rvletexception { //处理respon的字符编码 httprvletrespon myrespon=(httprvletrespon) respon; myrespon.tcontenttype("text思想回报/html;chart=utf-8"); // 转型为与协议相关对象 httprvletrequest httprvletrequest = (httprvletrequest) request; // 对request包装增强 httprvletrequest myrequest = new myrequest(httprvletrequest); chain.dofilter(myrequest, respon); } @override public void init(filterconfig filterconfig) throws rvletexception { }}//自定义request对象,httprvletrequest的包装类class myrequest extends httprvletrequestwrapper { private httprvletrequest request; //是否编码的标记 private boolean hancode; //定义一个可以传入httprvletrequest对象的构造函数,以便对其进行装饰 public myrequest(httprvletrequest request) { super(request);// super必须写 this.request = request; } // 对需要增强方法 进行覆盖 @override public map getparametermap() { // 先获得请求方式 string method = request.getmethod(); if (method.equalsignoreca("post")) { // post请求 try { // 处理post乱码 request.tcharacterencoding("utf-8"); return request.getparametermap(); } catch (unsupportedencodingexception e) { e.printstacktrace(); } } el if (method.equalsignoreca("get")) { // get请求 map<string, string[]> parametermap = request.getparametermap(); if (!hancode) { // 确保get手动编码逻辑只运行一次 for (string parametername : parametermap.keyt()) { 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(); } } } } hancode = 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中进行配置
到此这篇关于java解决前端数据处理及乱码问题的文章就介绍到这了,更多相关java数据处理乱码内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 05:33:33,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/8a4b469f919041d56c1d5be38c888053.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Java解决前端数据处理及乱码问题.doc
本文 PDF 下载地址:Java解决前端数据处理及乱码问题.pdf
留言与评论(共有 0 条评论) |