javascript
springmvc跳转html_SpringMVC基础(三)
本篇文章主要整理了數(shù)據(jù)處理、亂碼處理和Json的相關(guān)知識(shí)。參考的狂神說(shuō)的公眾號(hào)以及視頻。所有代碼親測(cè)有效。
數(shù)據(jù)處理主要包括處理提交的數(shù)據(jù)以及將數(shù)據(jù)顯示到前端。
處理提交的數(shù)據(jù)一般有三種情況:
(1)提交的域的名稱和方法的參數(shù)名稱一致時(shí):
@RequestMapping("/name") public String test2(Model model,String name){ System.out.println(name); model.addAttribute("msg","name"); return "hehe"; }(2)提交的域的名稱和方法的參數(shù)名稱不一致時(shí):
修改代碼:在參數(shù)前加入@RequestParam注解,強(qiáng)制域名稱和方法參數(shù)名一致。
@RequestMapping("/name") public String test2(Model model,@RequestParam("username")String name){ System.out.println(name); model.addAttribute("msg","name"); return "hehe"; }(3)如果提交的是一個(gè)對(duì)象,則域名稱要和對(duì)象的屬性對(duì)應(yīng)。
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"; }將數(shù)據(jù)顯示到前端一般有三種方式:
(1)在SpringMVC基礎(chǔ)一中的Demo采用的是ModelAndView :
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { //ModelAndView 模型和視圖 ModelAndView mv = new ModelAndView(); //封裝對(duì)象,放在ModelAndView中。Model mv.addObject("msg","HelloSpringMVC!"); //封裝要跳轉(zhuǎn)的視圖,放在ModelAndView中 mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp return mv; }(2)處理提交的數(shù)據(jù)時(shí)Demo中用到的Model
(3)ModelMap:可以封裝顯示到視圖的數(shù)據(jù)
@RequestMapping("/hello") public String test4(@RequestParam("username") String name, ModelMap model){ //封裝要顯示到視圖中的數(shù)據(jù) //相當(dāng)于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"; //跳轉(zhuǎn)到test頁(yè)面顯示輸入的值 }}解決方法一:自定義過(guò)濾器
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()?{ }}配置過(guò)濾器
<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自帶的過(guò)濾器,在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>解決!
最后介紹一下關(guān)于JSON的知識(shí)。JSON簡(jiǎn)單卻十分重要!
JSON(JavaScript Object Notation, JS 對(duì)象標(biāo)記)是一種輕量級(jí)的數(shù)據(jù)交換格式。
采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)。
簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語(yǔ)言。
易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。
在 JavaScript 語(yǔ)言中,一切都是對(duì)象。因此,任何JavaScript 支持的類型都可以通過(guò) JSON 來(lái)表示,例如字符串、數(shù)字、對(duì)象、數(shù)組等??纯此囊蠛驼Z(yǔ)法格式:
對(duì)象表示為鍵值對(duì),數(shù)據(jù)由逗號(hào)分隔
花括號(hào)保存對(duì)象
方括號(hào)保存數(shù)組
JSON 鍵值對(duì)是用來(lái)保存 JavaScript 對(duì)象的一種方式,JSON 是 JavaScript 對(duì)象的字符串表示法,它使用文本表示一個(gè) JS 對(duì)象的信息,本質(zhì)是一個(gè)字符串。
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); //結(jié)果是 {a: 'Hello', b: 'World'} var json = JSON.stringify({a: 'Hello', b: 'World'}); console.log(json); //結(jié)果是 '{"a": "Hello", "b": "World"}' //編寫一個(gè)js的對(duì)象 var user = { name:"朱琳", age:24, sex:"男" }; //將js對(duì)象轉(zhuǎn)換成json字符串 var str = JSON.stringify(user); console.log(str); //將json字符串轉(zhuǎn)換為js對(duì)象 var user2 = JSON.parse(str); console.log(user2.age,user2.name,user2.sex);script>body>html>解析JSON的工具有Jackson和fastjson。
Jackson
導(dǎo)入依賴,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 { //創(chuàng)建一個(gè)jackson的對(duì)象映射器,用來(lái)解析數(shù)據(jù) ObjectMapper mapper = new ObjectMapper(); //創(chuàng)建一個(gè)對(duì)象 User user = new User("朱琳1", 24); //將我們的對(duì)象解析成為json格式 String str = mapper.writeValueAsString(user); //由于@ResponseBody注解,這里會(huì)將str轉(zhuǎn)成json格式返回;十分方便 return str;????}}@ResponseBody注解表示不經(jīng)過(guò)視圖解析器。在類上直接使用 @RestController ,這樣子,里面所有的方法都只會(huì)返回 json 字符串。
這里有個(gè)問(wèn)題,IDEA中新建了模塊之后,如果tomcat啟動(dòng)總是報(bào)錯(cuò)代碼沒(méi)問(wèn)題,一般是沒(méi)有將依賴加入lib中,在Project Struture中:
啟動(dòng)tomcat,測(cè)試發(fā)現(xiàn)出現(xiàn)亂碼問(wèn)題!
修改代碼:
//produces:指定響應(yīng)體返回類型和編碼@RequestMapping(value = "/json1",produces = "application/json;charset=utf-8")@ResponseBodypublic String json1() throws JsonProcessingException {}再次測(cè)試,解決!
還有一種解決辦法:Spring配置統(tǒng)一指定。
<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>同樣解決!
再來(lái)測(cè)試一下輸出時(shí)間:
@RequestMapping("/json2") public String json2() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); //不使用時(shí)間戳的方式 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); //自定義日期格式對(duì)象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //指定日期格式 mapper.setDateFormat(sdf); Date date = new Date(); String str = mapper.writeValueAsString(date); return str; }此外,為了方便代碼復(fù)用還可以寫個(gè)工具類:
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(); //不使用時(shí)間差的方式 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); //自定義日期格式對(duì)象 SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); //指定日期格式 mapper.setDateFormat(sdf); try { return mapper.writeValueAsString(object); } catch (JsonProcessingException e) { e.printStackTrace(); } return null; }}這樣,對(duì)之前的代碼進(jìn)行改進(jìn):
@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有三個(gè)主要的類:
JSONObject :代表 json 對(duì)象
JSONObject實(shí)現(xiàn)了Map接口, 猜想 JSONObject底層操作是由Map實(shí)現(xiàn)的。
JSONObject對(duì)應(yīng)json對(duì)象,通過(guò)各種形式的get()方法可以獲取json對(duì)象中的數(shù)據(jù),也可利用諸如size(),isEmpty()等方法獲取"鍵:值"對(duì)的個(gè)數(shù)和判斷是否為空。其本質(zhì)是通過(guò)實(shí)現(xiàn)Map接口并調(diào)用接口中的方法完成的。
JSONArray:代表 json 對(duì)象數(shù)組
內(nèi)部是有List接口中的方法來(lái)完成操作的。
JSON代表 JSONObject和JSONArray的轉(zhuǎn)化
JSON類源碼分析與使用
仔細(xì)觀察這些方法,主要是實(shí)現(xiàn)json對(duì)象,json對(duì)象數(shù)組,javabean對(duì)象,json字符串之間的相互轉(zhuǎn)化。
以一個(gè)Demo測(cè)試fastjson的使用:
public class FastJsonController { public static void main(String[] args) { //創(chuàng)建一個(gè)對(duì)象 User user1 = new User("朱琳1號(hào)", 24); User user2 = new User("朱琳2號(hào)",24); User user3 = new User("朱琳3號(hào)", 24); User user4 = new User("朱琳4號(hào)",24); List list = new ArrayList(); list.add(user1); list.add(user2); list.add(user3); list.add(user4); System.out.println("*******Java對(duì)象 轉(zhuǎn) 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字符串 轉(zhuǎn) Java對(duì)象*******"); User jp_user1=JSON.parseObject(str2, User.class); System.out.println("JSON.parseObject(str2,User.class)==>"+jp_user1); System.out.println("\n****** Java對(duì)象 轉(zhuǎn) JSON對(duì)象 ******"); JSONObject jsonObject1 = (JSONObject) JSON.toJSON(user2); System.out.println("(JSONObject) JSON.toJSON(user2)==>"+jsonObject1.getString("name")); System.out.println("\n****** JSON對(duì)象 轉(zhuǎn) Java對(duì)象 ******"); User to_java_user = JSON.toJavaObject(jsonObject1, User.class); System.out.println("JSON.toJavaObject(jsonObject1, User.class)==>"+to_java_user); }}至此,關(guān)于SpringMVC的基礎(chǔ)知識(shí)介紹完畢。深入了解需要將Mybatis、Spring、SpringMVC即SSM整合。
總結(jié)
以上是生活随笔為你收集整理的springmvc跳转html_SpringMVC基础(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: pytorch模型加载测试_pytorc
- 下一篇: long mode 分页_在Spring