SpringMVC笔记

来源:互联网 发布:好看便宜围巾 知乎 编辑:程序博客网 时间:2024/06/16 00:09


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

原创粉丝点击