springMVC參數設置


接收的參數為日期類型

在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的配置文件中添加標簽來修改源代碼來從新設置響應的編碼。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM