springmvc跳转html_SpringMVC基础(三)
本篇文章主要整理了数据处理、乱码处理和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基础(三)相关推荐
- Django基础三之视图函数
Django基础三之视图函数 一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML ...
- CTFHUB http协议题目 学习笔记 详细步骤 请求方式 302跳转 cookie 基础认证 响应源代码
CTFHUB http协议题目 学习笔记 详细步骤 请求方式 302跳转 cookie 基础认证 响应源代码 WEB-HTTP协议 1-请求方式 2-302跳转 3.cookie 4.基础认证 5.响 ...
- day 53-1 Django基础三之视图函数
Django基础三之视图函数 本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Djang ...
- [GO语言基础] 三.变量声明、数据类型、标识符及编程练习12题
作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Go的编译运行 ...
- C++学习基础三——迭代器基础
C++学习基础三--迭代器基础 迭代器分为两种:一种是iterator,另一种是const_iterator. 两者都可进行访问容器中的元素,不同之处是: (1)const_iterator类型只能用 ...
- 【蓝鸥Unity开发基础三】课时14 刚体
[蓝鸥Unity开发基础三]课时14 刚体 一.刚体 物理引擎: 物理引擎能够真实的模拟物理效果 Unity中使用的是NVIDIA的PhysX物理引擎 在Unity中使用Rigidbody让游戏对象受 ...
- asp.net服务器端跳转页面的三种方法
asp.net服务器端跳转页面的三种方法 1.Response.Redirect这个跳转页面的方法跳转速度不快,因为它要走2次回发(postback). 它可以跳转到任何页面,没有站点页面限制(可以由 ...
- 【蓝鸥Unity开发基础三】课时3 Terrain地形系统【未完】
[蓝鸥Unity开发基础三]课时3 Terrain地形系统[未完] 推荐视频讲师博客:http://11165165.blog.51cto.com/ 一.Terrain地形系统 Terrain地形系 ...
- TCP/IP基础(三)
文章目录 TCP/IP基础(三) -- IP协议相关技术 DNS 域名的构成 DNS查询 ARP ARP的工作机制 ICMP ICMP消息类型 NAT NAT定义 NAT的工作机制 NAT的潜在问题 ...
最新文章
- 样式集(11)注册页面样式,全部代码附效果图
- mysql 索引 normal_mysql索引类型 normal, unique, full text
- LA2678最短子序列
- jar包和war包区别及理解
- 在Spring Boot中实现相关ID(用于SOA /微服务中的分布式跟踪)
- java 通过id获取html代码_Maven私服安装配置,java通过私服下载代码,并打包后上传到私服(Nexus)...
- 谷歌这波操作,预警了什么信号??
- 【Jmeter篇】Jmeter分布式调度压测部署
- Saltstack常用模块及API
- 通用的日志处理类(分享)
- iOS中nil,Nil,NULL的区别
- servlet (七)javaBean
- 20181027 考试记录
- Ubuntu18.04开机后图像界面消失解决(千万不要使用autoremove卸载软件!!!)
- 数据治理之数据发现-元数据-DataHub
- HTTP_REFERER的用法及伪造
- item在C语言中是什么意思中文,单词item中文表达的是什么意思
- oracle rac告警,oracle11.2.0.4 RAC 日志总有告警
- UltraLAB台式图形工作站(海量计算王者~高性能计算工作站 EX620介绍)
- ca根证书校验 java_JAVA-Android-根据CA证书验证X509Certificate(颁发者证书)
热门文章
- 牛客16494 生活大爆炸版石头剪刀布
- Leetcode--90. 子集Ⅱ
- php grepmatch,linux最快的文本搜索神器ripgrep(grep的最好代替者)
- 17福师《计算机应用基础,福师17春秋学期《计算机应用基础》在线在线作业一.doc...
- postgresql修炼之道_PostgreSQL的TOAST技术
- Ubuntu16版本安装截图软件Flameshot
- OpenCV学习笔记(十三):霍夫变换:HoughLines(),HoughLinesP(),HoughCircles( )
- 李航《统计学习方法》-----支持向量机
- HttpClient实现客户端与服务器的通信
- Python 爬虫学习 系列教程