接收的參數為日期類型
在springmvc的controller控制層接收日期參數時,如果不加以設置,服務器開啟后,進入不了頁面中,會報錯。這個錯誤就是日期在頁面傳入到springmvc的controller中的時候沒有轉化。就會引起錯誤
解決的方法是,在controller類中加一個方法,如下:
@InitBinder public void initBinder(ServletRequestDataBinder binder){ //只要網頁中傳來的數據格式為yyyy-MM-dd 就會轉化為Date類型 binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true)); }
這里必須要有注解,才能起到轉化的作用。
controller進行數據的保存
在springmvc的controller中進行數據保存跟以前的servlet中保存數據是同一個原理,把數據保存到request、session中,當數據保存到request中的時候,有下面的方法:
寫一個方法返回類型是ModelAndView,那么這種保存方式必須在方法里面重新new一個新的ModelAndView的類,然后調用里面的方法,實現保存和跳轉的作用,如圖:
@Controller public class MyController1 { @RequestMapping("/list.do") public ModelAndView list() { Users u=new Users(); u.setName("張三"); u.setAge(16); u.setSex("男"); u.setPhone(12332313); ModelAndView mv=new ModelAndView(); mv.setViewName("login"); mv.addObject("user", u); return mv; } }
我這里在項目里創建一個Users的實體類,然后給實體類賦值,將數據賦值給以這個實體類為數據類型的一個對象里,然后把這個對象保存到ModelAndView中,這個是以request方式保存的
mv.addObject("user", u);是以ModelAndView的方式添加對象的或者添加字符串的還有集合。
mv.setViewName("login");這個方法是頁面的跳轉到login這個頁面中,將對象保存到里面然后隨着請求轉發將數據發送給頁面中,從而頁面就可以得到相應的數據了
以Model的方法保存,這個方法的返回值類型還是字符串類型的。
@RequestMapping("b") public String Model(Model model){ UserBean bean = new UserBean(); bean.setName("admin"); bean.setPwd("admin"); model.addAttribute("admin", bean); return "login";
Model也是一種request的存儲方式,在同一個請求中被調用里面的參數,
model.addAttribute("admin", bean);Model中添加的方法是addAttribute(),括號里面可以是文本,對象,集合。
還有使用Map的方法保存數據,返回的數據類型還是字符串類型
@RequestMapping("a") public String Map(Map<String, Object> Map){ UserBean bean = new UserBean(); bean.setName("劉備"); bean.setPwd("張飛"); Map.put("admin", bean); return "login";
同上,唯一不同的就是,它添加數據的是put()的方法,它是map集合中特有的存放數據的方法
還有最原始的存儲方式就是用request,那就得用HttpServletRequest 來調用request了,本人覺得還是最原始的方法用的舒服
@RequestMapping("a") public String request(HttpServletRequest request){ UserBean bean = new UserBean(); bean.setName("張三"); bean.setPwd("123"); request.setAttribute("b", bean); return "login";
session的保存方式:
@RequestMapping("/a") public String session(HttpSession session){ UserBean bean = new UserBean(); bean.setName("曹操"); bean.setPwd("周瑜"); session.setAttribute("b", bean); return "login"; }
request和session在controller中和在servlet中使用的方法都是一樣的,之前的講的除了session是保存在session中的,其余的都是保存在request中的,
如果想使用上面的幾種方法保存到session中那么就使用注解了 ,在類外使用@SessionAttributes(names={key1,key2})這個方法。
controller中進行重定向調轉
請求轉發和重定向跳轉的區別,1.第一個差別點,就是重定向是兩次請求,轉發是一次請求,因此轉發的速度要快於重定向。2.第二個差別點也很明顯,重定向之后地址欄上的地址會發生變化,變化成第二次請求的地址,轉發之后地址欄上的地址不會變化,還是第一次請求的地址,那么在springmvc的controller中想用重定向跳轉頁面,只需要在要跳轉的頁面前面加上redirect就ok了。
方式一:使用ModelAndView
return new ModelAndView("redirect:/login");
這樣可以重定向到toList這個方法
方式二:返回String
return "redirect:/ login ";
靜態資源的映射
從上面的圖片可以看出web.xml的攔截條件是*.do 那么靜態資源就不會攔截,我們想讓靜態資源被攔截,就要改成:
寫成/是對所有的文件都進行了攔截,因為在controller中找不到靜態資源的相應的servlet,所以圖片什么效果就不會顯示出來的,這個時候就需要在springmvc的配置文件中釋放資源了
用springmvc完成ajax功能
創建一個jsp文件,里面引入jquery文件,然后里面寫入ajax代碼
ajax的實現有三種方式$.get(url,data,callback,type);其中url:服務器的路勁 data:請求參數 callback:回調函數 type: 響應數據的類型。(html,json)
$.post()和get一樣 $.ajax({url:(服務器的路徑),data:(請求參數),type:(響應的數據類型),success:(回調函數),Error:(錯誤),Async:(同步),datatype:(請求數據類型)})
在以前學的servlet中響應文本的時候直接Out.print()響應過去,當響應的是對象的時候需要借助gson jar包。把Java對象轉化為json對象,
但在controller中需要加入jackson的jar包,在響應的方法上加上@ResponseBody這個注解,就能把Java對象轉化為json對象了
方法的返回值可以是對象的集合,字符串。
jsp頁面
ajax操作,當加載頁面的時候,從controller中響應數據到頁面上,然后彈出來,測試一下。
當頁面控制器響應一個中文的話,頁面接收到會發現是亂碼,解決的方法是:
@RequestMapping(value="Ajax",produces = "text/html;charset=UTF-8" ) @ResponseBody public String a(String name) { System.out.println(name); return "張三"; }
在括號里面加上:produces = "text/html;charset=UTF-8",這些代碼就解決了,還有就是在springmvc的配置文件中添加標簽來修改源代碼來從新設置響應的編碼。