14 个 Spring MVC 顶级技巧

通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求 。然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序Servlet解析,以呈现结果或输出 。
这样就完成了典型的请求-响应周期的往返 。
今天整理了一下编写Spring MVC控制器的14个技巧,你今天get到了吗?(≧▽≦)/
1.使用@Controller构造型这是创建可以处理一个或多个请求的控制器类的最简单方法 。仅通过用构造型注释一个类@Controller,例如:
import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMApping;@Controllerpublic class HomeController {    @RequestMapping("/")    public String visitHome() {        return "home";    }}如你所见,visitHome()方法通过重定向到名为home的视图来处理来自应用程序上下文路径(/)的请求 。

注意:@Controller原型只能在Spring的配置文件中启用注解驱动时使用:
<annotation-driven />启用注释驱动时,Spring容器自动在以下语句指定的包下扫描类:
<context:component-scan base-package="net.codeJAVA.spring" />由@Controller 注释注释的类被配置为控制器 。这是最可取的,因为它很简单:无需在配置文件中为控制器声明bean 。
注意:通过使用@Controller 注解,您可以拥有一个多动作控制器类,该类能够处理多个不同的请求 。例如:
@Controllerpublic class MultiActionController {    @RequestMapping("/listUsers")    public ModelAndView listUsers() {    }    @RequestMapping("/saveUser")    public ModelAndView saveUser(User user) {    }    @RequestMapping("/deleteUser")    public ModelAndView deleteUser(User user) {    }}正如你可以在上面的控制器类看,有处理三种不同的请求3种处理方法 /listUsers,/saveUser,和/deleteUser分别 。
2.实现控制器接口在Spring MVC中创建控制器的另一种(也许是经典的)方法是让类实现 Controller 接口 。例如:
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.Controller;public class MainController implements Controller {    @Override    public ModelAndView handleRequest(HttpServletRequest request,            HttpServletResponse response) throws Exception {        System.out.println("Welcome main");        return new ModelAndView("main");    }}实现类必须重写该 handleRequest() 方法,当匹配请求进入时,该方法将由Spring调度程序Servlet调用 。此控制器处理的请求URL模式在Spring的上下文配置文件中定义如下:
<bean name="/main" class="net.codejava.spring.MainController" />但是,此方法的缺点是控制器类无法处理多个请求URL 。
3.扩展AbstractController类如果要轻松控制受支持的HTTP方法,会话和内容缓存 。扩展你的控制器 AbstractController 类是理想的选择 。
请考虑以下示例:
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.AbstractController;public class BigController extends AbstractController {    @Override    protected ModelAndView handleRequestInternal(HttpServletRequest request,            HttpServletResponse response) throws Exception {        System.out.println("You're big!");        return new ModelAndView("big");    }}这将创建具有有关受支持的方法,会话和缓存的配置的单动作控制器,然后可以在控制器的bean声明中指定这些配置 。例如:


推荐阅读