1 SpringMVC是SpringWeb框架的一个部分
2 SpringMVC是一个MVC的Web层框架
3 SpringMVC和Spring是父子容器,浑然天成;而struts2等是需要单独进行整合struts2-spring-plugin插件支持;
下面通过springmvc的组件结构图来详解每一个组件
用户发起请求后由DispatherServlet接收,DispatherServlet接收后将其转发给映射处理器HandlerMapping,由HandlerMapping解析映射,解析后回传给DispatherServlet,DispatherServlet将解析的结果发给HandAdapter 解析适配器,由解析适配器找到调用相应的controller,controller将返回的数据封装到model,将页面的逻辑名封装到view 交给适配器,适配器拿到modelAndview后将其发给DispatherServlet,然后DispatherServlet转发给视图解析器进行渲染,渲染后返回给用户。
用户发出所有请求由DispatcherServlet接收并转发,DispatvherServlet默认带有上下文一些环境,这样
它和Web容器紧密绑定,这样随时我们可以获取上下文问对象,request请求对象,response对象。DispatherServlet是整个springmvc的重要组件,是springmvc的核心分发器。
由于要跟web容器绑定所以它配置在web.xml
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 文件名不是默认时,需要下列配置,一般项目都是将配置文件放在classpath下 -->
<init-param>
<param-name>contextConfigLoaction</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
springmvc由xml和注解两种形式,目前业界最常用的是注解方式。
我们来看一个注解的简单例子
第一步:创建web project
第二步:导入jar
com.springsource.org.apache.commons.logging-1.1.1.jar
commons-collections-3.1.jar
spring-aop-3.2.2.jar
spring-aspects-3.2.2.jar
spring-beans-3.2.2.jar
spring-context-3.2.2.jar
spring-context-support-3.2.2.jar
spring-core-3.2.2.jar
spring-expression-3.2.2.jar
spring-web-3.2.2.jar
spring-webmvc-3.2.2.jar
第三步:创建jsp文件 WEB-INF/pages/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
This is my JSP page. ${message}<br>
</body>
</html>
1.1.4. 第四步:创建一个Controller
package cn.springmvc.web.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller //声明其为controller
public class HomeController {
@RequestMapping("/home") //指定访问的url,可以是多个,也可以指定提交方法
public String goHome(HttpServletRequest request){
System.out.println(request.getRequestURI()); //获取提交过来的url
return "index"; //逻辑名
}
}
第五步:配置文件springmvc-servlet.xml
<!-- 注解驱动 -->
<mvc:annotation-driven/>
<!-- 自动扫描所有的controller 扫描包时,不要路径太宽泛 -->
<context:component-scan base-package="cn.springmvc.web.controller"/>
<!-- 内部资源视图解析器 规则:前缀+逻辑名+后缀 /WEB-INF/pages/index.jsp -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
第六步:在web.xml中声明DispatcherServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>springmvcStart</display-name>
<!-- 核心的分发器 DispatcherServlert -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 文件名不是默认时,需要下列配置,一般项目都是将配置文件放在classpath下 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.action</url-pattern>
<!-- 拦截所有URL ,不能是/* /* action可以定位,无法解析jsp -->
</servlet-mapping>
</web-app>
通过上面的步骤一个简单的springmvc就开发完成。