框架:Spring MVC
框架是围绕DispatcherServlet设计的,它处理所有的HTTP请求和响应。 请求处理工作流如下图所示:
- 在接收到HTTP请求后,DispatcherServlet会查询HandlerMapping以调用相应的Controller。
- Controller接受请求并根据使用的GET或POST方法调用相应的服务方法。 服务方法将基于定义的业务逻辑设置模型数据,并将视图名称返回给DispatcherServlet。
- DispatcherServlet将从ViewResolver获取请求的定义视图。
- 当视图完成,DispatcherServlet将模型数据传递到最终的视图,并在浏览器上呈现。
HandlerMapping对象:客户请求到Controller之间的映射。借助于Spring提供的HandlerMapping定位到具体的Controller。 Spring默认使用BeanNameUrlHandlerMapping。还有SimpleUrlHandlerMapping、CommonsPathMapHandlerMapping
配置
1) web.xml:
初始化时,框架将尝试从位于应用程序的WebContent/WEB-INF目录中的名为[servlet-name]-servlet.xml的文件加载应用程序上下文。
需要通过使用web.xml文件中的URL映射来映射希望DispatcherServlet处理的请求。
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern> <!--拦截所有的请求,注1-->
</servlet-mapping>
注1:*.do 只针对以'.do'结尾的请求进行处理,不再维护静态资源
2)[servlet-name]-servlet.xml映射配置:
用于创建定义的bean,它会覆盖在全局范围中使用相同名称定义的任何bean的定义
表示访问路径/index会交给id=indexController的bean处理; id=indexController的bean配置为类:controller.Controller
<beans······>
<context:component-scan base-package="文件" />
<!--标签用于**Spring MVC注释扫描功能,扫描文件下@Controller和@RequestMapping等注释,把这些类注册为bean-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--定义用于解析视图名称的规则,前缀+后缀-->
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
3)控制类Controller
DispatcherServlet将请求委派给控制器以执行特定于其的功能。 提供方法handleRequest处理请求。 通过 ModelAndView 对象把模型和视图结合在一起
@Controller注释 将类定义为Spring MVC控制器
@RequestMapping注释用于将URL映射到整个类或特定处理程序方法。
@Controller
@RequestMapping("/hello") //aaa@qq.com如果写在此处表示此控制器上的所有处理方法都与/hello路径相关
public class HelloController{
@RequestMapping(value = "/hello", method = RequestMethod.GET) //1.2一般写在此处表示/hello路径GET时触发
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC"); //模型数据是message,内容是“Hello Spring MVC”
return "index"; //返回给视图
}
//Model,ModelMap,ModelAndView三者区别
ModelAndView mav = new ModelAndView("index.jsp"); //表示视图是index.jsp
mav.addObject("message", "Hello Spring MVC");
return mav;
}
}
在类前面加上@Controller 表示该类是一个控制器,不再实现Controller接口
在方法handleRequest 前面加上 @RequestMapping("/hello") 表示路径/hello会映射到该方法上
4)index.jsp
EL表达式显示message的内容:${message}
流程
1. HTTP请求访问 /hello,进入Spring MVC入口
2. web.xml中配置 DispatcherSevlet【Spring MVC的入口,负责将请求分发】;
3. springmvc-servlet.xml配置映射到IndexController类
4. IndexController类:处理来自/index的请求,返回ModelAndView对象给DispatcherServlet;
ModelAndView对象:包含了模型(Model)和视图(View)
5. DispatcherServlet将View对象渲染出的结果返回给index.jsp;
ViewResoler视图解析器:视图定位。在Web应用中查找View对象,从而将响应结果渲染给客户
6. index.jsp:通过EL表达式显示message的内容;
上一篇: 自己手写一个Spring MVC框架
下一篇: Activity创建过程