首页 > 作文

Java解决前端数据处理及乱码问题

更新时间:2023-04-04 05:33:35 阅读: 评论:0

目录
一、数据处理1. 处理提交数据2. 数据显示到前端二、乱码问题

一、数据处理

1. 处理提交数据

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. 数据显示到前端

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对象的操作和理解;大部分情况下直接使用model

二、乱码问题

1.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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图