14个编写Spring MVC控制器的实用小技巧(吐血整理)

发布时间:2019-11-19 16:05 来源:互联网 当前栏目:网站服务器

本文介绍了编写Spring MVC框架的控制器(controller)的基础技巧和最佳操作。在Spring MVC框架中,编写控制器类通常是为了处理用户提出的请求。

编写完成后,控制器会调用一个业务类来处理业务相关任务,进而重定向客户到逻辑视图名。Springdispatcher servlet会对逻辑视图名进行解析,并渲染结果或输出。这就是一个典型的“请求—响应”的完整流程。

1.使用@controllerstereotype

创建一个能够处理单个或多个请求的控制器类,最简单的方法就是使用@controllerstereotype注解一个类,如:

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
@Controller 
publicclassHomeController { 
  @RequestMapping("/") 
  publicString visitHome() { 
    // do something before returning view name 
    return"home"; 
  } 
}

如上所示,visitHome()方法通过重定向跳转到视图名home来处理应用程序内容路径(/)收到的请求。

注意:只有在Spring配置文件中启用了注解驱动,才能使用@controllerstereotype。

启用注解驱动后,Spring的容器(container)会自动扫描如下包中的类:

带有@controller注解的类会被标记成控制器。由于其简单方便,且不再需要对配置文件中的控制器声明beans,这一方法非常实用。

注意:使用@controller注解可以创建一个多动作控制器类,可同时处理多个不同的请求。如:

@Controller 
publicclassMultiActionController { 
  @RequestMapping("/listUsers") 
  public ModelAndView listUsers() { 
  } 
  @RequestMapping("/saveUser") 
  public ModelAndView saveUser(User user) { 
  } 
  @RequestMapping("/deleteUser") 
  public ModelAndView deleteUser(User user) { 
  } 
}

如上所示,有三个处理器(handler)在分别处理三个请求,/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; 
publicclassMainControllerimplements Controller { 
  @Override 
  public ModelAndView handleRequest(HttpServletRequest request, 
      HttpServletResponse response) throws Exception { 
    System.out.println("Welcome main"); 
    returnnew ModelAndView("main"); 
  } 
}

实现类必须重写handleRequest()方法(当收到相匹配的请求时,Spring dispatcher servlet会调用handleRequest)。由该控制器处理的请求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; 
publicclassBigControllerextends AbstractController { 
  @Override 
  protected ModelAndView handleRequestInternal(HttpServletRequest request, 
      HttpServletResponse response) throws Exception { 
    System.out.println("You're big!"); 
    returnnew ModelAndView("big"); 
  } 
}

        
 
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、