Spring MVC学习笔记
MVC模式:
按组件职责不同可以将程序中的组件分为Model、View、Controller三部分
- Model模型:负责业务处理和数据封装(如Dao)
- View视图:负责与用户交互界面(如Jsp)
- Controller控制器:接收请求,协调模型和视图,完成处理和相应(如servlet)
Spring MVC主要构成组件:
- DispatcherServlet:主控制器,接收请求,在web.xml中配置
- HandlerMapping:根据请求寻找对应的Controller
- Controller:调用Dao等逻辑处理请求(开发者编写)
- ModelAndView:封装模型和视图信息
- ViewResolver:视图解析器,根据ModelAndView找到对应jsp页面,返回数据
Spring MVC处理流程:
- 浏览器发出请求,请求进入DispatcherServlet
- DispatcherServlet调用HandlerMapping,根据请求寻找Controller组件处理
- Controller处理请求,返回一个ModelAndView对象
- ViewResolver解析ModelAndView信息,找到对应jsp页面,返回数据
例:/hello.form-->DispatcherServlet-->HandlerMapping-->HelloController-->ModelAndView-->ViewResolver-->hello.jsp
Spring MVC配置:
首先在web.xml中配置DispatcherServlet
<!-- Spring MVC 核心控制器 DispatcherServlet 配置 --> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/spring-mvc.xml</param-value> </init-param> <!-- 是否在启动的时候就加载这个servlet --> <!-- 当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet; 当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载 --> <!-- 正数的值越小,该servlet的优先级越高,应用启动时就越先加载。 当值相同时,容器就会自己选择顺序来加载 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
然后按照上面的classpath路径创建配置文件spring-mvc.xml:
<!-- 注解默认扫描的包路径 --> <context:component-scan base-package="com.xzh.ssm.controller" /> <!-- 添加mvc注解驱动(HandlerMapping) --> <mvc:annotation-driven /> <!-- 对模型视图添加前后缀 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF" p:suffix=".jsp" /> <!-- 获取静态资源不拦截 --> <mvc:resources location="/" mapping="/**/*.html" /> <mvc:resources location="/" mapping="/**/*.js" /> <mvc:resources location="/" mapping="/**/*.css" /> <mvc:resources location="/" mapping="/**/*.png" /> <mvc:resources location="/" mapping="/**/*.gif" /> <!-- mvc内捕获指定异常,重定向页面,其他异常到web.xml中配置error-page --> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="java.long.Exception"> /jsp/error </prop> </props> </property> </bean>