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,一经查实,立即删除!

相关文章

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

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

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;移动窗口函数也会…

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

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

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

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

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…

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

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

java filter过滤器 网站访问量_Servlet过滤器实现网站访问计数器功能

实现网站在线访问计数器功能&#xff0c;网站的初始值设置为1000(1)创建CountFilter的类&#xff0c;实现javax。servlet.Filter接口&#xff0c;是一个过滤器对象&#xff0c;通过过滤器实现统计网站人数功能&#xff1a;package com.lixiyu;import java.io.IOException;impor…

js立即执行函数_《JS 函数的执行时机》

1 、为什么如下代码会打印 6 个 6let i 0 for(i 0; i<6; i){setTimeout(()>{console.log(i)},0) }那是因为setTiout函数的意义是‘做完当前的事情&#xff0c;再去执行’0代表时间&#xff0c;表示做完循环立刻打印i的值&#xff0c;所以 i的值经过for循环已经循环到6&…

postscript怎么打开_怎么把在学习中用的Adobe PDF文件转换成Microsoft office Word

现在我们普遍用的都是Adobe PDF格式的文件&#xff0c;可是Microsoft office Word&#xff08;.doc,.docx&#xff09;文档也是我们经常要用的&#xff0c;所以就需要将Adobe PDF转换Microsoft office Word&#xff08;.doc,.docx&#xff09;文档了&#xff0c;怎么将Adobe PD…

vector父类类型可以存放子类吗_拼夕夕三轮面经:被问到反射和泛型的bug,你踏空了吗?...

点击上方“JavaEdge”&#xff0c;关注公众号设为“星标”&#xff0c;好文章不错过&#xff01;1 当反射遇见方法重载重载grade方法&#xff0c;入参分别为int、Integer。若不通过反射这种高级编程方式&#xff0c;选用哪个重载方法自然很清晰&#xff0c;比如传666走int参数重…

雨林木风系统封装工具封装xp_如何用小丸工具大幅度压缩视频且画质损失较小?...

如何大幅度把视频体积压下去&#xff0c;并保持清晰度&#xff0c;就只有用比视频原本低的码率&#xff0c;降低分辨率和压缩音频这三种方法。降低码率可以使用CRF来控制&#xff0c;值越大码率越小&#xff0c;成反比。一些录屏和直播的视频产生的码率都很高&#xff0c;文件体…

java 变量作用域 c语言_C语言深入理解 - 常量与变量

《C语言深入理解系列 - 常量与变量》查看其它博文请关注原创作者。本文系本站原创,欢迎转载! 转载请注明出处:常量与变量正所谓静中有动&#xff0c;动中有静&#xff0c;常量与变量亦是如此&#xff0c;它们之前相互依赖&#xff0c;相互影响。关于常量与变量&#xff0c;很多…

数据可视化demo_为更快读懂报表,我们将数据可视化了

将数据可视化后&#xff0c;即使是复杂难懂的数据也会瞬间变得简单易懂&#xff0c;难就难在怎么快速将海量数据中的复杂数据信息提取&#xff0c;不同场景下该用那种方式展示数据更直观易懂。而这些&#xff0c;在奥威BI数据可视化软件上都有了答案。在常用图表的基础上&#…

swift for循环_Swift | 实战一个简单的素数计算器demo

Swift实战一个简单的素数计算器demo本期我们来介绍如何用storyboard来实现一个素数计算器demo&#xff0c;storyboard可以明确地知道界面上的组件与代码的关系&#xff0c;而且比起仅用代码写要方便不少。No.1制作一个简单的界面制作一个简单的界面我们首先要使用storyboard来绘…

java文件传输连接方式_Java 学习笔记 网络编程 使用Socket传输文件 CS模式

Socket的简单认识Socket是一种面向连接的通信协议&#xff0c;Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点。 Socket是连接运行在网络上的两个程序间的双向通讯端点。Socket通信原理Server服务端的输入流相当于Client客户端的输出…

创建线程的三种方法_Netty源码分析系列之NioEventLoop的创建与启动

前言前三篇文章分别分析了 Netty 服务端 channel 的初始化、注册以及绑定过程的源码&#xff0c;理论上这篇文章应该开始分析新连接接入过程的源码了&#xff0c;但是在看源码的过程中&#xff0c;发现有一个非常重要的组件&#xff1a;NioEventLoop&#xff0c;出现得非常频繁…

java正则表达式匹配xml标签_用正则表达式匹配HTML\XML等文件中的标签

测试用HTML源文件&#xff1a;View Code《完美世界&#xff1a;天界的召唤》缤纷圣诞总动员[ 中华网 1小时前]经过了平安夜和圣诞节&#xff0c;节日的气氛被推到了最高点&#xff01;《完美世界&#xff1a;天界的召唤》为玩家准备了精彩纷呈的圣诞节活动&#xff0c;而玩家也…