简介:在MVC框架中,用户的请求直接与 C(控制器)交互,控制器再把请求进行分发,分发给 M(模型,也可以说是数据),再选择V(视图)把用户要获取的数据展示出来
0.web应用的目录树:
红色是要关注的地方。
1.SpringMVC中的DispatcherServlet(用于调度控制 用户请求)
在许多 MVC框架中,都包含一个用于调度控制的Servlet。Spring MVC也提供了一个名为 org.springframework.web.servlet.DispatcherServlet 的 Servlet 充当前端控制器。所有的请求都围绕这个 DispatcherServlet 来分派。
DispatcherServlet 是一个Servlet (它继承自 HttpServlet基类),因此使用时需要把它配置在 Web 应用的 web.xml文件中。
下面是 web.xml的配置:
*由上图:本工程的 spring配置文件的名字为: srpingmvc-config.xml
2. 基于Controller接口的 Handle 的编写:
DispatcherServlet 在 Spring 当中充当一个前端控制器的角色,它的核心功能是分发请求。请求会被分发给对应处理的 Java类,Spring MVC中称为 Handle。
开发一个 Handle 的方法是 实现 org.springframework.web.servlet.mvc.Controller接口
的
而实现 Controller接口 就必须实现一个handleRequest 方法:
ModelAndView handleRequest(HttpServletRequest request,HttpServletRespone)throws Exception
(Controller接口的实现类)可以通过 handleRequest方法传递的参数 来 访问对应请求 HttpServletRequest 和 HttpServletRespone 对象。处理完请求后,必须返回一个
包含模型对象和视图路径的 ModelAndView 对象。
3.Spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置 Handle,映射“/hello”请求 -->
<bean name="/hello" class="com.springmvc.HelloController"></bean>
<!-- (处理映射器)将(上面)bean的name作为url进行查找,需要再配置Handle时指定name(即url) -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- SimpleControllerHandlerAdapter是一个(处理适配器),所有处理适配器都要实现HandleAdapter接口 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
</beans>
第12,15,18行是固定的。作用是配置 处理映射器,处理适配器,视图解析器。
第9 行是配置自己写的Handle也即控制器(即 HelloController)
4.控制器(MVC中的C)
HelloController.java:
package com.springmvc;
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 HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
/*创建返回的 ModelAndView对象,该对象通常包含了(返回视图名)和(模型的名称),以及模型对象*/
ModelAndView mv = new ModelAndView();
/*添加模型数据*/
mv.addObject("message", "HelloWorld!");
/*设置(逻辑视图名),视图解析器会根据该名字解析到具体的视图页面*/
mv.setViewName("/WEB-INF/content/welcome.jsp");
return mv;
}
控制器必须实现 (Controller接口)里的 handleRequest 方法。
第20行:往控制器里加信息(可被调用的对象)
23行:设置此控制器 调用的界面(View)。此处为放在目录 /WEB-INF/content/ 下的 welcome.jsp
5.视图(View)
welcome.jsp:
红框处为KL表达式。作用为打印 message的值。
启动服务器后,输入服务器地址 (http://localhost/XXX/XXX/XXX) 后的结果: