本篇文章主要整理了数据处理、乱码处理和Json的相关知识。参考的狂神说的公众号以及视频。所有代码亲测有效。

数据处理主要包括处理提交的数据以及将数据显示到前端。

处理提交的数据一般有三种情况:

(1)提交的域的名称和方法的参数名称一致时:

@RequestMapping("/name")    public String test2(Model model,String name){        System.out.println(name);        model.addAttribute("msg","name");        return "hehe";    }

(2)提交的域的名称和方法的参数名称不一致时:

修改代码:在参数前加入@RequestParam注解,强制域名称和方法参数名一致。

@RequestMapping("/name")    public String test2(Model model,@RequestParam("username")String name){        System.out.println(name);        model.addAttribute("msg","name");        return "hehe";    }

(3)如果提交的是一个对象,则域名称要和对象的属性对应。

public class User {    private String name;    private int age;}//省略其他方法
@RequestMapping("/user")    public String test3(Model model, User user){        System.out.println(user);        model.addAttribute("msg","user");        return "hehe";    }

将数据显示到前端一般有三种方式:

(1)在SpringMVC基础一中的Demo采用的是ModelAndView :

public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {        //ModelAndView 模型和视图        ModelAndView mv = new ModelAndView();        //封装对象,放在ModelAndView中。Model        mv.addObject("msg","HelloSpringMVC!");        //封装要跳转的视图,放在ModelAndView中        mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp        return mv;    }

(2)处理提交的数据时Demo中用到的Model

(3)ModelMap:可以封装显示到视图的数据

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

接着介绍一下乱码处理。

form.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>formtitle>head><body><form action="/e/t" method="post">    <input type="text" name="name">    <input type="submit">form>body>html>
@Controllerpublic class Encoding {    @RequestMapping("/e/t")    public String test(Model model, String name){        System.out.println(name);        model.addAttribute("msg",name); //获取表单提交的值        return "hehe"; //跳转到test页面显示输入的值    }}

解决方法一:自定义过滤器

public class EncodingFilter implements Filter {    public void init(FilterConfig filterConfig) throws ServletException {    }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        request.setCharacterEncoding("utf-8");        response.setCharacterEncoding("utf-8");        chain.doFilter(request,response);    }    public void destroy() {    }}

配置过滤器

 <filter>        <filter-name>EncodingFilterfilter-name>        <filter-class>com.zhu.filter01.EncodingFilterfilter-class>    filter>    <filter-mapping>        <filter-name>EncodingFilterfilter-name>        <url-pattern>/*url-pattern>    filter-mapping>

解决了!!!

解决方法二:SpringMVC自带的过滤器,在XML中配置:

<filter>        <filter-name>encodingfilter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>        <init-param>            <param-name>encodingparam-name>            <param-value>utf-8param-value>        init-param>    filter>    <filter-mapping>        <filter-name>encodingfilter-name>        <url-pattern>/*url-pattern>    filter-mapping>

解决!

最后介绍一下关于JSON的知识。JSON简单却十分重要!

JSON(JavaScript Object Notation, JS 对象标记)是一种轻量级的数据交换格式。

  • 采用完全独立于编程语言的文本格式来存储和表示数据。

  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

在 JavaScript 语言中,一切都是对象。因此,任何JavaScript 支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:

  • 对象表示为键值对,数据由逗号分隔

  • 花括号保存对象

  • 方括号保存数组

{"name": "zhulin"}{"age": "24"}{"sex": "男"}

JSON 键值对是用来保存 JavaScript 对象的一种方式,JSON 是 JavaScript 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。

Demo:

<html lang="en"><head>    <meta charset="UTF-8">    <title>Titletitle>head><body><script type="text/javascript">    var obj = JSON.parse('{"a": "Hello", "b": "World"}');    console.log(obj);    //结果是 {a: 'Hello', b: 'World'}    var json = JSON.stringify({a: 'Hello', b: 'World'});    console.log(json);    //结果是 '{"a": "Hello", "b": "World"}'    //编写一个js的对象    var user = {        name:"朱琳",        age:24,        sex:"男"    };    //将js对象转换成json字符串    var str = JSON.stringify(user);    console.log(str);    //将json字符串转换为js对象    var user2 = JSON.parse(str);    console.log(user2.age,user2.name,user2.sex);script>body>html>

解析JSON的工具有Jackson和fastjson。

Jackson

导入依赖,web.xml和springmvc-servlet.xml和之前配置类似。

<dependency>            <groupId>com.fasterxml.jackson.coregroupId>            <artifactId>jackson-databindartifactId>            <version>2.9.8version>dependency>
@Controllerpublic class UserController {    @RequestMapping("/json1")    @ResponseBody    public String json1() throws JsonProcessingException {        //创建一个jackson的对象映射器,用来解析数据        ObjectMapper mapper = new ObjectMapper();        //创建一个对象        User user = new User("朱琳1", 24);        //将我们的对象解析成为json格式        String str = mapper.writeValueAsString(user);        //由于@ResponseBody注解,这里会将str转成json格式返回;十分方便        return str;    }}

@ResponseBody注解表示不经过视图解析器。在类上直接使用 @RestController ,这样子,里面所有的方法都只会返回 json 字符串。

这里有个问题,IDEA中新建了模块之后,如果tomcat启动总是报错代码没问题,一般是没有将依赖加入lib中,在Project Struture中:

启动tomcat,测试发现出现乱码问题!

修改代码:

//produces:指定响应体返回类型和编码@RequestMapping(value = "/json1",produces = "application/json;charset=utf-8")@ResponseBodypublic String json1() throws JsonProcessingException {}

再次测试,解决!

还有一种解决办法:Spring配置统一指定。

<mvc:annotation-driven>        <mvc:message-converters register-defaults="true">            <bean class="org.springframework.http.converter.StringHttpMessageConverter">                <constructor-arg value="UTF-8"/>            bean>            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">                <property name="objectMapper">                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">                        <property name="failOnEmptyBeans" value="false"/>                    bean>                property>            bean>        mvc:message-converters> /mvc:annotation-driven>

同样解决!

再来测试一下输出时间:

@RequestMapping("/json2")    public String json2() throws JsonProcessingException {        ObjectMapper mapper = new ObjectMapper();        //不使用时间戳的方式        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);        //自定义日期格式对象        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        //指定日期格式        mapper.setDateFormat(sdf);        Date date = new Date();        String str = mapper.writeValueAsString(date);        return str;    }

此外,为了方便代码复用还可以写个工具类:

package com.zhu.utils;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializationFeature;import java.text.SimpleDateFormat;public class JsonUtils {    public static String getJson(Object object) {        return getJson(object,"yyyy-MM-dd HH:mm:ss");    }    public static String getJson(Object object,String dateFormat) {        ObjectMapper mapper = new ObjectMapper();        //不使用时间差的方式        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);        //自定义日期格式对象        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);        //指定日期格式        mapper.setDateFormat(sdf);        try {            return mapper.writeValueAsString(object);        } catch (JsonProcessingException e) {            e.printStackTrace();        }        return null;    }}

这样,对之前的代码进行改进:

@RequestMapping("/json3")    public String json3() throws JsonProcessingException {        Date date = new Date();        String json = JsonUtils.getJson(date);        return json;    }    @RequestMapping("/json4")    public String json4() throws JsonProcessingException {        User user = new User("朱琳4", 24);        String json = JsonUtils.getJson(user);        return json;    }

fastjson

fastjson有三个主要的类:

JSONObject :代表 json 对象

  • JSONObject实现了Map接口, 猜想 JSONObject底层操作是由Map实现的。

  • JSONObject对应json对象,通过各种形式的get()方法可以获取json对象中的数据,也可利用诸如size(),isEmpty()等方法获取"键:值"对的个数和判断是否为空。其本质是通过实现Map接口并调用接口中的方法完成的。

JSONArray:代表 json 对象数组

  • 内部是有List接口中的方法来完成操作的。

JSON代表 JSONObject和JSONArray的转化

  • JSON类源码分析与使用

  • 仔细观察这些方法,主要是实现json对象,json对象数组,javabean对象,json字符串之间的相互转化。

以一个Demo测试fastjson的使用:

public class FastJsonController {    public static void main(String[] args) {        //创建一个对象        User user1 = new User("朱琳1号", 24);        User user2 = new User("朱琳2号",24);        User user3 = new User("朱琳3号", 24);        User user4 = new User("朱琳4号",24);        List list = new ArrayList();        list.add(user1);        list.add(user2);        list.add(user3);        list.add(user4);        System.out.println("*******Java对象 转 JSON字符串*******");        String str1 = JSON.toJSONString(list);        System.out.println("JSON.toJSONString(list)==>"+str1);        String str2 = JSON.toJSONString(user1);        System.out.println("JSON.toJSONString(user1)==>"+str2);        System.out.println("\n****** JSON字符串 转 Java对象*******");        User jp_user1=JSON.parseObject(str2, User.class);        System.out.println("JSON.parseObject(str2,User.class)==>"+jp_user1);        System.out.println("\n****** Java对象 转 JSON对象 ******");        JSONObject jsonObject1 = (JSONObject) JSON.toJSON(user2);        System.out.println("(JSONObject) JSON.toJSON(user2)==>"+jsonObject1.getString("name"));        System.out.println("\n****** JSON对象 转 Java对象 ******");        User to_java_user = JSON.toJavaObject(jsonObject1, User.class);        System.out.println("JSON.toJavaObject(jsonObject1, User.class)==>"+to_java_user);    }}

至此,关于SpringMVC的基础知识介绍完毕。深入了解需要将Mybatis、Spring、SpringMVC即SSM整合。

springmvc跳转html_SpringMVC基础(三)相关推荐

  1. Django基础三之视图函数

    Django基础三之视图函数 一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML ...

  2. CTFHUB http协议题目 学习笔记 详细步骤 请求方式 302跳转 cookie 基础认证 响应源代码

    CTFHUB http协议题目 学习笔记 详细步骤 请求方式 302跳转 cookie 基础认证 响应源代码 WEB-HTTP协议 1-请求方式 2-302跳转 3.cookie 4.基础认证 5.响 ...

  3. day 53-1 Django基础三之视图函数

    Django基础三之视图函数 本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Djang ...

  4. [GO语言基础] 三.变量声明、数据类型、标识符及编程练习12题

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Go的编译运行 ...

  5. C++学习基础三——迭代器基础

    C++学习基础三--迭代器基础 迭代器分为两种:一种是iterator,另一种是const_iterator. 两者都可进行访问容器中的元素,不同之处是: (1)const_iterator类型只能用 ...

  6. 【蓝鸥Unity开发基础三】课时14 刚体

    [蓝鸥Unity开发基础三]课时14 刚体 一.刚体 物理引擎: 物理引擎能够真实的模拟物理效果 Unity中使用的是NVIDIA的PhysX物理引擎 在Unity中使用Rigidbody让游戏对象受 ...

  7. asp.net服务器端跳转页面的三种方法

    asp.net服务器端跳转页面的三种方法 1.Response.Redirect这个跳转页面的方法跳转速度不快,因为它要走2次回发(postback). 它可以跳转到任何页面,没有站点页面限制(可以由 ...

  8. 【蓝鸥Unity开发基础三】课时3 Terrain地形系统【未完】

    [蓝鸥Unity开发基础三]课时3  Terrain地形系统[未完] 推荐视频讲师博客:http://11165165.blog.51cto.com/ 一.Terrain地形系统 Terrain地形系 ...

  9. TCP/IP基础(三)

    文章目录 TCP/IP基础(三) -- IP协议相关技术 DNS 域名的构成 DNS查询 ARP ARP的工作机制 ICMP ICMP消息类型 NAT NAT定义 NAT的工作机制 NAT的潜在问题 ...

最新文章

  1. 样式集(11)注册页面样式,全部代码附效果图
  2. mysql 索引 normal_mysql索引类型 normal, unique, full text
  3. LA2678最短子序列
  4. jar包和war包区别及理解
  5. 在Spring Boot中实现相关ID(用于SOA /微服务中的分布式跟踪)
  6. java 通过id获取html代码_Maven私服安装配置,java通过私服下载代码,并打包后上传到私服(Nexus)...
  7. 谷歌这波操作,预警了什么信号??
  8. 【Jmeter篇】Jmeter分布式调度压测部署
  9. Saltstack常用模块及API
  10. 通用的日志处理类(分享)
  11. iOS中nil,Nil,NULL的区别
  12. servlet (七)javaBean
  13. 20181027 考试记录
  14. Ubuntu18.04开机后图像界面消失解决(千万不要使用autoremove卸载软件!!!)
  15. 数据治理之数据发现-元数据-DataHub
  16. HTTP_REFERER的用法及伪造
  17. item在C语言中是什么意思中文,单词item中文表达的是什么意思
  18. oracle rac告警,oracle11.2.0.4 RAC 日志总有告警
  19. UltraLAB台式图形工作站(海量计算王者~高性能计算工作站 EX620介绍)
  20. ca根证书校验 java_JAVA-Android-根据CA证书验证X509Certificate(颁发者证书)

热门文章

  1. 牛客16494 生活大爆炸版石头剪刀布
  2. Leetcode--90. 子集Ⅱ
  3. php grepmatch,linux最快的文本搜索神器ripgrep(grep的最好代替者)
  4. 17福师《计算机应用基础,福师17春秋学期《计算机应用基础》在线在线作业一.doc...
  5. postgresql修炼之道_PostgreSQL的TOAST技术
  6. Ubuntu16版本安装截图软件Flameshot
  7. OpenCV学习笔记(十三):霍夫变换:HoughLines(),HoughLinesP(),HoughCircles( )
  8. 李航《统计学习方法》-----支持向量机
  9. HttpClient实现客户端与服务器的通信
  10. Python 爬虫学习 系列教程