1. MVC模型
MVC(模型-视图-控制器)模型是区别于过去以页面为中心的模式,SpringMVC使用DispacherServlet(一个Servlet)为控制器,模型采用POJO(Plain Old Java Object),POJO使用javaBean来持有模型状态,并将业务逻辑放到一个Action类中去,一个Action类可以支持多个action,一个action对应一个可执行操作。
2. Servlet控制器
自己实现的可以用来充当控制器的Servlet需要继承javax.servlet.http.HttpServlet类,其中,daGet和doPost方法为其核心。
Servlet处理HttpServletRequest请求的大致流程:
- 获取请求的url与action名
- 执行对应不同对象的业务逻辑(action)
- 转发请求到试图
3. SpringMVC
DispacherServlet——控制器,需要完成的工作:
- 根据url决定调用相应的action
- 实例化控制器类(实现了Conroller的控制器实现类,每一个实现类都只能处理一个动作)
- 更具请求的参数构造表单中的bean
- 调用控制器类的方法
- 跳转视图
3.1 Controller接口
接口中唯一的方法:handleRequest方法
ModelAndView handleRequest(HttpSrevletRequest request,HttpServletResponse reponse)
ModAndView对象包含了视图路径或者视图路径与模型。
SpringMVC的工作流程与Servlet充当控制器的模型基本一致。主要的配置是在web.xml中配置DispacherServlet以及将“/”映射到该servlet,同时还需创建springMVC的xml配置文件,其中主要配置实现的的controller类信息。此外可以配置视图解析器(org.springframework.web.servlet.view.InternalResolver)中的前缀和后缀等的相关信息,简化url中的视图路径。
3.2 基于注解的Controller
基于注解的控制器的优点:
- 一个控制器类可以处理多个动作
- 基于注解的控制器的请求映射不需要手动写入配置文件(@RequestMapping)
最主要的两个注解类型:Controller 和 RequestMapping - Spring使用扫描机制来找到所有的基于注解的控制器类(需要配置包扫描路径)
- RequestMapping映射一个请求与一个方法,可以用来注解一个类或者方法。
- 两个主要参数:value 和 method,只映射一个值是可以省略value,多种method:method = {RequestMethod.POST,RequestMethod PUT}
请求处理方法:
常用的接受参数:
-javax.servlet.http.HttpSrevletRequest或servlet.ServletRequest
-javax.servlet.http.HttpSrevletResponse或servlet.ServletResponse
-javax.servlet.http.HttpSession
-java.io.InputStream或java.io.Reader
-java.io.OutputStream或java.io.Writer
-命令或者表单对象
-被@PathVariable、@RequestParam、@RequesHeader、@RequestBody或@RequestPart注解的对象
常用的返回参数:
-ModelAndView
-Model
-View
-代表逻辑视图名的String
-void
-其他任意类型,Spring会将其视为输出给View的对象
使用@Service和@Autowired进行依赖注入。
重定向要经过客户端,而转发没有,因而转发更快。