SpringMVC筆記



一.
@requestMapping(value="/list",method=RequestMethod.GET)
public String list(Model model1,Model model2,Model model3,Map<String,Object> map1){//不管幾個model和map 都是同一個Map表
 model1.addAttribute("userList1",userList1);
 model1.addAttribute("userList2",userList2);
 model1.addAttribute("userList3",userList3);


 System.out.println("model1 -->" + model1);
 System.out.println("model2 -->" + model2);
 System.out.println("model3 -->" + model3);

 //三個model的結果是一樣的,三個model放的是同一個Map裏面

 model1.addAttribute("userList",userList1);
 model1.addAttribute("userList",userList2);
 //結果userList1會被userList2覆蓋掉,因爲是同一個Map裏面,key相同,後賦值會覆蓋前面賦的值

 return "user/userlist";
}

二.
return "user/add" 和 return "redirect:/user/userList";的區別:
return "user/add"是返回邏輯視圖名 服務端行爲
return "redirect:/user/userList"是URL,是request請求 客戶端重新發出請求,forward:URL

三.
public String add(@ModelAttribute("user" User user)){}//的意思是:以user爲key放入User對象到model中
等價於:
public String add(User user){model.addAttribute(new User);}
等價於:
public String add(User user)){} //注:springMVC自動將對象名User轉換成開頭字母小寫user作爲key值放入model中
如果改爲prublic String add(User userlist)){}則無法自動綁定

<body>
<!-- 沒有寫action,直接提交給/add -->
 <sf:form method="post" modelAttribute="user">
  UserName:<sf:input path="userName"/><sf:errors path="userName"/><br/>
  password:<sf:password path="password"/><sf:errors path="password"/><br/>
  position:<sf:input path="position"/><br/>
  email:<sf:input path="email"/><sf:errors path="email"/><br/>
  <input type="submit" value="保存"/>
 </sf:form>
</body>
 

四.
//用戶登錄   HttpSession session用於將登陸用戶放到session裏面
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(String userName,String password,HttpSession session){
 if(!userList.containsKey(userName)){
  throw new UserException("用戶名不存在!");
 }
 User _user = userList.get(userName);
 if(!_user.getPassword().equals(password)){
  throw new UserException("密碼不正確!");
 }
 session.setAttribute("loginUser", _user);
 return "redirect:/user/userlist";    //跳轉到URL = /user/userlist中
}

@RequestMapping(value="/userlist",method=RequestMethod.GET)
public String list(Model model){
 model.addAttribute("userlist",userList);
 return "user/list";  //跳轉到user/list.jsp頁面中
}


五.
局部異常
  局部異常處理: @ExceptionHandle
  全局異常處理: SimpleMappingExceptionResolve
使用Servlet API 對象作爲入參
  HttpSession
  HttpServletRequest
  HttpServletResponse

//全局異常處理: SimpleMappingExceptionResolve
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
 <property name="exceptionMappings">
  <props>
   <prop key="cn.bdqn.pojo.UserException">error</prop>
  </props>
 </property>
</bean>

public class UserException extends RuntimeException{}

if(!userList.containsKey(userName)){
 throw new UserException("用戶名不存在!"); //拋出來的異常信息
}

error.jsp裏面寫着  ${exception.message}  獲得拋出來的信息

@responseBody // 用於返回對象(而不是邏輯視圖名)  常用於ajax請求
       // controller 裏的方法返回對象,返回的結果寫入到 http response body的數據區內 一般作異步時候用到


總結:
DispatcherServlet

Handler
 @Controller
 @RequestMapping(value method params)
 @PathVariable
 @RequestParam
 @ResponseBody

 方法的返回值
 ModelAndView
 View
 Model
 String
 Object
 void

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章