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

译文:blog.csdn.net/Summer_Lyf/article/details/102911215
原文:dzone.com/articles/14-tips-for-writing-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的配置文件中启用注解驱动时使用:
启用注释驱动时 , 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 {@Overridepublic ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {System.out.println("Welcome main");return new ModelAndView("main");}}实现类必须重写该 handleRequest() 方法 , 当匹配请求进入时 , 该方法将由Spring调度程序Servlet调用 。 此控制器处理的请求URL模式在Spring的上下文配置文件中定义如下:
但是 , 此方法的缺点是控制器类无法处理多个请求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 {@Overrideprotected ModelAndView handleRequestInternal(HttpServletRequest request,HttpServletResponse response) throws Exception {System.out.println("You're big!");return new ModelAndView("big");}}