一.
@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