javascript
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 來表示,例如字符串、數字、對象、數組等。看看他的要求和語法格式:
對象表示為鍵值對,數據由逗號分隔
花括號保存對象
方括號保存數組
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基础(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch模型加载测试_pytorc
- 下一篇: Java程序员的自我修养?