springmvc跳转html_SpringMVC基础(三)

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

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

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

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

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

ac6fa6bb097d980eb096fef69b9872de.png

59ee589702dd0d305a19196807477a96.png

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

6d1e9c49fcd9c2b85209b5743abd5916.png

2ba73d1b045be80bf1e84d77c8d4787e.png

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

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

5c189b7c5263d8912b73fac721326dd7.png

b621297a561a90167f0d0c1efcc4ede3.png

(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";    }

5fcf93791ae4095b8977f34420f3d7d8.png

d6ba31144ca8628e2afe6c7d6a9022f0.png

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

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

ce033d92da72298f3215de49ef08c8e5.png

(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";    }

2a6fbd1317e88145bef4622683c344a5.png

6fa13610b1fcaf343d42ca12e2a0306f.png

接着介绍一下乱码处理。

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页面显示输入的值    }}

5bc7d31c059859cae7581c5365b2b749.png

47f634359c1d6f07a8532b0a2d5bd91c.png

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

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>

827a09bbdd5cf6274d9f53a22c6bafec.png

解决了!!!

解决方法二: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>

de6e03f14e91d338918b4ffd91e773e1.png

解决!

最后介绍一下关于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>

070ed77237fa5eeb4139c24b676af8ff.png

解析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中:

9ed7680bc5aceed61111acf3f0790f6c.png

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

cd456eddd20e148a72799a07991465a3.png

修改代码:

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

再次测试,解决!

d737e6a3c60c57794d5b9c1e2cff3ce7.png

还有一种解决办法: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>

d8181176931ff659fba338ba013a6176.png

同样解决!

再来测试一下输出时间:

@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;    }

5f3b9fb6063271d4076d69111a1bf9a7.png

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

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;    }

845de5afe32ffe1af4acb8830de11825.png

825548fcf823fb5de8e453feb2f4cdf4.png

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);    }}

cbfb56ab0f2dc6932d6a5e640738a1f2.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql-5.7.24初始化数据库_MySQL5.7.28 初始化数据库

1)初始化随机密码 mysqld --initialize[roothost-172-16-61-102 bin]# ./mysqld --initialize2020-02-15T07:01:38.309015Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documenta…

查看本机所有请求_【松勤教育】Fiddler抓包-只抓APP的请求

fiddler抓手机app的请求&#xff0c;估计大部分都会&#xff0c;但是如何只抓来自app的请求呢&#xff1f;把来自pc的请求过滤掉&#xff0c;因为请求太多&#xff0c;这样会找不到重要的信息了。环境准备&#xff1a;1.电脑上已装fiddler2.手机和电脑在同一局域网一、设置1.fi…

ubuntu18.04升级python_Ubuntu18.04一次性升级Python所有库的方法步骤

pip是什么pip 是 Python 包管理工具&#xff0c;该工具提供了对Python 包的查找、下载、安装、卸载的功能。升级pip版本默认Ubuntu自带的pip (pip 9.0.1)是基于Python2.7的版本我们需要重新安装基于Python3的pip&#xff1a;sudo apt-get install python3-pip升级pip3版本&…

icmp报文格式_TCP/IP(二):IP报文格式详解

1. IP 报文格式0bit是指位于最左边的最高位&#xff0c;31bit是指位于最右边的最低位&#xff0c;4个字节的32bit按照 bigendian(大端格式&#xff1a;低字节位于高地址)字节序传输&#xff1a;首先是0~7bit&#xff0c;其次 8~15bit&#xff0c;然后 16~23bit&#xff0c;最后…

java多线程交替打印_java实现多线程交替打印

本文实例为大家分享了java实现多线程交替打印的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下notifywait实现import org.junit.Test;import java.util.concurrent.*;public class TestThreadLocal {Object o new Object();CountDownLatch cnew CountDownLatch(2);T…

plot函数_时间序列:python移动窗口函数前言

一起学习&#xff0c;一起成长&#xff01;在移动窗口(可以带有指数衰减权数)上计算的各种统计函数也是一类常见于时间序列的数组变换。它们称为移动窗口函数&#xff0c;其中还包括那些窗口不定长的函数(如指数加权移动平均)。跟其他统计函数一样&#xff0c;移动窗口函数也会…

织梦检测环境不支持mysql_本地测试织梦dedeCMS 安装环境

本地测试织梦dedeCMS 安装环境2018-08-21 134织梦好多想本地测试织梦DEDECMS网站&#xff0c;今天介绍如何在本地安装测试环境&#xff0c;安装织梦系统。第一&#xff1a;环境测试 DedeAMPZ 织梦官方测试软件DedeAMPZ 是直接整合PHP Apache MySql 的服务器环境管理软件&…

一页纸项目管理模板_项目管理职场必备读物!这一次全部送给你!

“大圣&#xff0c;此去欲何&#xff1f;”“踏南天&#xff0c;碎项目。”“若一去不归...”“便一去不复返归&#xff01;”hello~hello~大家好上一次找到的一篇项目管理书籍送给大家毫无意外地大家纷纷在后台留言要求我还有没有更多的书籍答应你们&#xff0c;这次一次性全部…

浏览器无法运行java_window_浏览器无法运行JAVA脚本的解决方法,1、浏览器无法运行JAVA脚本的 - phpStudy...

浏览器无法运行JAVA脚本的解决方法1、浏览器无法运行JAVA脚本的解决方法。rundll32.exe advpack.dll /DelNodeRunDLL32 %systemroot%System32dacui.dllrundll32.exe advpack.dll /DelNodeRunDLL32 %systemroot%Catrooticatalog.mdbregsvr32 /s comcat.dllregsvr32 /s asctrls.o…

python android自动化_python在Android下的自动化测试用法

# This Python file uses the following encoding: utf-8from com.android.monkeyrunner import MonkeyRunner,MonkeyDevicefrom com.android.monkeyrunner.easy import EasyMonkeyDevice #提供了根据ID进行访问from com.android.monkeyrunner.easy import By #根据ID返回PyObj…

第五届蓝桥杯校内选拔赛试题java组_第五届蓝桥杯校内选拔赛试题java组

第五届“蓝桥杯”全国软件和信息技术专业人才大赛校内选拔赛试题(Java组)第一部分&#xff1a;准备工作&#xff1a;1、在D&#xff1a;盘中建立一个以自己“学号姓名”命名的考生文件夹。如&#xff1a;学号&#xff1a;123456&#xff0c;姓名&#xff1a;张三&#xff0c;则…

nfs需要开通什么端口_创业板开通需要什么条件?开通创业板门槛,要怎么样开通创业板?...

开通创业板需要什么条件&#xff0c;创业板要怎么开通&#xff1f;根据这两个问题进行详细分析创业板股票开通的条件和具体怎么开通&#xff0c;开通创业板之前必须要满足创业板开通条件。一、旧创业板开通条件就得创业板开通是非常简单的&#xff0c;只要满足以下两点&#xf…

java自学报告_Vi,Java,Ant和Junit自学报告

vi自学报告概述vi 编辑器是所有 Unix 及 Linux 系统下最基本的编辑器&#xff0c;它直接以命令行窗口作为显示界面。vim是vi的升级版&#xff0c;完全兼容vi并提供了一些新的特性。因为vi、vim完全脱离鼠标而使用纯键盘控制&#xff0c;所以熟练以后能大大提高编辑效率。vi的模…

java开发文档怎么写_程序员该不该写技术文档,怎么写文档,易懂又能提升自己...

最近公司项目的调用量突然涨了一大波&#xff0c;很多系统都纷纷扛不住了&#xff0c;于是需要对系统进行优化&#xff0c;系统优化的第一步&#xff0c;便是梳理业务&#xff01;在这个过程中&#xff0c;经常出现了这样一些情况&#xff0c;发现数据库的某些字段&#xff0c;…

java矩阵类_java矩阵类,矩阵的乘法

问题如下我采用的是3重循环&#xff0c;先计算的列的结果&#xff0c;应该还可以先计算行的结果&#xff0c;然后求出矩阵的乘法。没有过多的技巧&#xff0c;就是循环的使用。相关的codepackage day20180728;import java.util.Scanner;class Matrix{private int m,n;private i…

python个人网站系统_利用基于Python的Pelican打造一个自己的个人纯静态网站

其实呢这么多年以来我一直建议每个有技术追求的开发者都要有写技术博客记笔记的良好习惯&#xff0c;一来可以积累知识&#xff0c;二来可以帮助别人&#xff0c;三来可以把开发中遇到的问题记录用来自省&#xff0c;第四可以通过交换友链来结识更多的技术领域的同仁。之前我曾…

java 编译宏_java – 制作一个“宏”命令来运行程序

(编辑&#xff1a;根据您的评论,让我展开以添加更多情况)如果您的目标是让其他人运行您没有安装Java的程序,并且您不希望让他们在运行您的应用程序之前安装Java运行时环境,那么您需要的是一个转换.class或.jar的程序将文件转换为您正在使用的平台的本机可执行文件.其他问题涉及…

python在工厂中的运用_在python中使用元类实现工厂设计模式

我很乐意听到人们对此的评论&#xff0c;但我认为这是你想做什么的一个例子class FactoryMetaclassObject(type):def __init__(cls, name, bases, attrs):"""__init__ will happen when the metaclass is constructed:the class object itself (not the instanc…

java多线程教程_java 基础教程之多线程详解及简单实例

java 多线程详解在这篇文章里&#xff0c;我们关注多线程。多线程是一个复杂的话题&#xff0c;包含了很多内容&#xff0c;这篇文章主要关注线程的基本属性、如何创建线程、线程的状态切换以及线程通信。线程是操作系统运行的基本单位&#xff0c;它被封装在进程中&#xff0c…

多个for语句嵌套执行顺序_阿里真实面试题解析之实现多个线程顺序执行的几种方式...

前几天有一位同事在阿里一面的时候被问到这么一个多线程问题&#xff1a;如何保证多个线程的顺序执行。当时他没有回答上来&#xff0c;所以为了避免大家以后遇到同样的面试题还是回答不上来&#xff0c;今天我们就来分析解答下这个问题。问题缘由由于线程执行是靠CPU分时间片来…