14 个 SpringMVC顶级技巧,随时用随时爽( 四 )

同样 , Spring非常灵活 。 你可以Map 在处理程序方法中声明类型的参数。 Spring使用此映射存储模型的对象 。 让我们看另一个例子:
@RequestMapping(method = RequestMethod.GET)public String viewStats(Map model) {model.put("siteName", "CodeJava.net");model.put("pageviews", 320000);return "Stats";}这比使用ModelAndView 对象还要简单。 根据你的喜好 , 可以使用Map 或 使用 ModelAndView 对象 。 在这里要感谢Spring的灵活性 。
9.处理程序方法中的重定向如果你希望在满足条件的情况下将用户重定向到另一个URL , 请redirect:/ 在URL之前追加 。 以下代码段给出了一个示例:
// 检查登录状态....if (!isLogin) {return new ModelAndView("redirect:/login");}// 返回用户列表在上面的代码中 , /login 如果未登录 , 用户将被重定向到该 URL 。
10.处理表格提交和表格验证通过提供@ModelAttribute 用于将表单字段绑定到表单支持对象的注解以及BindingResult 用于验证表单字段的界面 , Spring使处理表单提交变得容易 。 下面的代码片段显示了一种典型的处理程序方法 , 该方法负责处理和验证表单数据:
@Controllerpublic class RegistrationController {@RequestMapping(value = "http://kandian.youth.cn/doRegister", method = RequestMethod.POST)public String doRegister(@ModelAttribute("userForm") User user, BindingResult bindingResult) {if (bindingResult.hasErrors()) {// 表单验证错误} else {// 表单输入没问题}// 注册过程……return "Success";}}从Spring的官方文档中了解有关@ModelAttribute 注释和BindingResult 接口的更多信息:

  • 在方法参数上使用@ModelAttribute
  • 在方法上使用@ModelAttribute
  • 接口绑定结果
11.处理文件上传通过自动将上传数据绑定到CommonsMultipartFile 对象数组 , Spring还使在处理程序方法中处理文件上传变得容易 。 Spring使用Apache Commons FileUpload作为基础的多部分解析器 。
以下代码段显示了从客户端上传文件有多么容易
@RequestMapping(value = "http://kandian.youth.cn/uploadFiles", method = RequestMethod.POST)public String handleFileUpload(@RequestParam CommonsMultipartFile[] fileUpload) throws Exception {for (CommonsMultipartFile aFile : fileUpload){// 存储上传的文件aFile.transferTo(new File(aFile.getOriginalFilename()));}return "Success";}12.在控制器中自动装配业务类【14 个 SpringMVC顶级技巧,随时用随时爽】控制器应将业务逻辑的处理委托给相关的业务类 。 为此 , 您可以使用@Autowired 注解让Spring自动将业务类的实际实现注入控制器 。
考虑以下控制器类的代码段:
@Controllerpublic class UserController {@Autowiredprivate UserDAO userDAO;public String listUser() {// 列出所有用户的处理方法userDAO.list();}public String saveUser(User user) {// 保存/更新用户的处理方法userDAO.save(user);}public String deleteUser(User user) {// 删除用户的处理方法userDAO.delete(user);}public String getUser(int userId) {// 获取用户的处理方法userDAO.get(userId);}}在此 , 与用户管理有关的所有业务逻辑都由该UserDAO 接口的实现提供。 例如:
interface UserDAO {List list();void save(User user);void checkLogin(User user);}有关@Autowired 注解的更多信息 , 请参见 注释类型自动装配 。
13.访问HttpServletRequest和HttpServletResponse在某些情况下 , 您需要直接 在处理程序方法中访问 HttpServletRequest 或 HttpServletResponse对象 。