14 个 Spring MVC 顶级技巧( 四 )


// 检查登录状态....if (!isLogin) {    return new ModelAndView("redirect:/login");}// 返回用户列表在上面的代码中,/login 如果未登录,用户将被重定向到该 URL 。
10.处理表格提交和表格验证通过提供@ModelAttribute 用于将表单字段绑定到表单支持对象的注解以及BindingResult 用于验证表单字段的界面,Spring使处理表单提交变得容易 。下面的代码片段显示了一种典型的处理程序方法,该方法负责处理和验证表单数据:
@Controllerpublic class RegistrationController {    @RequestMapping(value = "/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作为基础的多部分解析器 。Java:实现文件批量导入导出实践
以下代码段显示了从客户端上传文件有多么容易
@RequestMapping(value = "/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.在控制器中自动装配业务类控制器应将业务逻辑的处理委托给相关的业务类 。为此,您可以使用@Autowired 注解让Spring自动将业务类的实际实现注入控制器 。
考虑以下控制器类的代码段:
@Controllerpublic class UserController {    @Autowired    private 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<User> list();    void save(User user);    void checkLogin(User user);}有关@Autowired 注解的更多信息,请参见 注释类型自动装配 。
13.访问HttpServletRequest和HttpServletResponse在某些情况下,您需要直接 在处理程序方法中访问 HttpServletRequest 或 HttpServletResponse对象 。
通过Spring的灵活性,只需在处理方法中添加相关参数即可 。例如:
@RequestMapping("/download")public String doDownloadFile(        HttpServletRequest request, HttpServletResponse response) {    // 访问请求    // 访问响应    return "DownloadPage";}


推荐阅读