數據回寫:在作數據更新的時候服務端查詢的數據自動填寫到表單中javascript
@RequestMapping("/doLogin") public String doLogin(String username, String password, Model model) { if ("zhangsan".equals(username) && "123".equals(password)) { return "index"; } model.addAttribute("username", username); model.addAttribute("password", password); return "forward:/login"; }
頁面中回寫html
<form action="/doLogin" method="post"> <table> <tr> <td>用戶名</td> <td><input type="text" name="username" value="${username}"></td> </tr> <tr> <td>密碼</td> <td><input type="password" name="password" value="${password}"></td> </tr> <tr> <td><input type="submit" value="登陸"></td> </tr> </table> </form>
若是使用對象去接收客戶端傳來的數據,那麼對象默認會被自動放到model中,在前端頁面能夠直接使用對象中的數據。 表單代碼以下:前端
/** * * 請求地址: * http://localhost:8080/SpringMVC-06-backvalue/ * add1?username=a13&password=11111 */ @RequestMapping("/add1") public String add1(Book book) { System.out.println(book); return "/user.jsp"; }
頁面java
<form action="add1" method="post"> <table> <tr> <td>用戶名</td> <td><input type="text" name="username" value="${book.username }"></td> </tr> <tr> <td>用戶密碼</td> <td><input type="text" name="password" value="${book.password }"></td> </tr> <tr> <td><input type="submit" value="註冊"></td> </tr> </table> </form>
@RequestMapping("/add") public String fun(@ModelAttribute("a") Book book) throws Custom{ System.out.println(book); book.setName("sd"); return "/user.jsp"; }
頁面jquery
<form action="update1" method="post" > 書名:<input type="text" value="${a.name}"/></br> 年齡:<input type="text" value="${a.age} "/></br> <input type="submit" value="註冊"></br> </form>
package com.sxt; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import com.sxt.bean.Book; import com.sxt.bean.Custom; import sun.management.resources.agent; @Controller public class Conreoller { @RequestMapping("/add") public String fun(@ModelAttribute("a") Book book) throws Custom{ System.out.println(book); book.setName("sd"); return "/user.jsp"; } @ModelAttribute("as") public List<String>fun2(){ List<String> as = new ArrayList<>(); as.add("深圳"); as.add("廣州"); as.add("海口"); return as; } }
頁面中獲取web
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 獲取配置全局返回的信息:${as } <form action="update1" method="post" > 書名:<input type="text" value="${a.name}"/></br> 年齡:<input type="text" value="${a.age} "/></br> <input type="submit" value="註冊"></br> </form> </body> </html>
項目中對於異常須要統一處理,須要提早準備好一個錯誤頁面,當項目出現異常,就將該頁面展現給用戶看ajax
package com.sxt.bean; public class Custom extends Exception{ private String message; public Custom(String message) { super(message); this.message = message; } @Override public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
package com.sxt.thows; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; /** * 自定義異常處理器 * @author Administrator * */ @Component public class MyThows implements HandlerExceptionResolver{ @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { System.out.println(ex.getMessage()); ModelAndView view = new ModelAndView(); view.setViewName("/index.jsp"); return view; } }
對於Gson和jackson這兩個json處理依賴,直接添加便可。 除此以外,其餘的json解析器如fastjson都須要手動配置HttpMessageConverter. 實際上,在SpringMVC中,是由一個名叫HttpMessageConverter的類來提供對象到JSON字符串的轉換的。而SpringMVC默認就提供了Gson和Jackson的HttpMessageConverter,分別是org.springframework.http.converter.json.GsonHttpMessageConverter和MappingJackson2HttpMessageConverter。對於其餘的JSON解析器,只須要開發者手動配置一下HttpMessageConverter便可。 本案例使用 jackson處理spring
package com.sxt; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.catalina.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.sxt.bean.Book; /** * 響應json數據 * @author Administrator * */ @Controller public class Conreoller { /** * 對象 * @return */ @GetMapping("/fun") @ResponseBody public Book getbook(){ Book book = new Book(); book.setName("dpd"); book.setAge(12); return book; } /** * list集合 * @return */ @GetMapping("/fun1") @ResponseBody public List<Book> list(){ List<Book> book = new ArrayList<>(); for (int i = 0; i < 10; i++) { Book e = new Book(); e.setName("zhangsan:" + i); e.setAge(12 + i); book.add(e); } return book; } /** * 數組 * @return */ @GetMapping("/fun2") @ResponseBody public String[] getstring(){ return new String[]{"aa", "bb", "cc"}; } /** * map * @return */ @GetMapping("/fun3") @ResponseBody public Map<String, Object> getmap(){ Map<String, Object> map=new HashMap<>(); Book book = new Book(); book.setName("dpd"); book.setAge(12); Book book1 = new Book(); book1.setName("dpd"); book1.setAge(12); map.put("book", book); map.put("book1", book1); map.put("total", 2); return map; } }
額外說明: 默認狀況下,JSON處理的HttpMessageConverter在org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter類中,若是當前項目的classpath下有jackson或者gson的依賴,則會被該類自動加載,而後,建立相應的HttpMessageConverter。 對於fastjson,因爲系統未提供自動支持,所以須要開發者手動配置fastjson的HttpMessageConverter,配置方式以下: 1.引入fastjson依賴 2.加入配置:apache
<mvc:annotation-driven validator="validatorFactoryBean"> <mvc:message-converters> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean> </mvc:message-converters> </mvc:annotation-driven>
HttpMessageConverter承擔兩個事: 1.將請求結果轉爲json 2.將瀏覽器發送來的json轉爲對象json
注意:json只能是在請求體中,所以,json只能放在post或者put請求中,注意,請勿使用get/delete請求去測試json參數傳遞。 示例代碼以下:
package com.sxt; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseBody; import com.sxt.bean.Book; @Controller public class Conreoller { @PostMapping("fun1") @ResponseBody public void getbook(@RequestBody Book book){ System.out.println(book); } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="js/jquery.min.js"></script> </head> <body> <input type="button" value="提交JSON數據" onclick="fun1();"> <script type="text/javascript"> function fun1(){ $.ajax({ type: 'POST', url: "fun1", contentType: "application/json",//若是想以json格式把數據提交到後臺的話,這個必須有,不然只會當作表單提交 data: JSON.stringify({"name":"lisi","age":"12"}),//JSON.stringify()必須有,不然只會當作表單的格式提交 dataType: "json",//期待返回的數據類型 success: function(data){ alert("success:"+data); }, error:function(data){ alert("error"+data); } }); } </script> </body> </html>
在springmvc中,直接接收json參數,若是參數中有日期的話,不須要定義日期類型轉換器,日期的轉換由gson/jackson/fastjson來提供。
<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
這樣就算接受提交的json數據是中文也不會出現亂碼問題了