一、前言
这一章谈一谈SpringMVC,虽然前面已经写过一篇了,也许又有新的理解呢?温故而知新嘛…
二、SpringMVC概念
1. 什么是SpringMVC
SpringMVC是一个MVC框架,用来简化基于MVC架构的web应用程序的开发。
它是Spring基本架构的一部分,属于SpringFrameWork的后续产品,和Spring无缝衔接,因此在和Spring整合时不需要太多的配置。
2. 什么是MVC
那么上面提到的MVC是什么呢,不知道的可以去看一下我的另一篇文章MVC设计模式
三、五大组件
Spring有五大组件,对于初学者来说,学会这五大组件的运用就学会了SpringMVC。
他们分别是:DispatcherServlet,HandlerMapping,Controller,ModelAndView,ViewResolver
DispatcherServlet
DispatchServlet称为前端控制器。
用于接收请求,根据HandlerMapping的配置调用相应的模型来处理。
HandlerMapping
可以看作是DispatchServlet的小秘书
包含请求路径和模型的对应关系。
Controller
Controller被称为处理器。
用来处理请求的业务逻辑,并将处理结果以ModelAndView的形式返回。
ModelAndView
用来封装处理结果集。
处理结果除了数据,还可能是视图名。
ViewResolver
ViewResolve被称为视图解析器。可以看作是DispatchServlet的第二个秘书。
DispatchServlet根据ViewResolver的解析,调用真正的视图对象来生成相应的页面。
四、代码示例
概念知识差不多了,我们就上手实操了。这里就记录一个使用Eclipse里的maven搭建SpringMVC的流程。
1. DispatchServlet
在web.xml中编写DispatchServlet。代码如下:
<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:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
DispatchServlet启动时会读取初始化参数contextConfigLocation,会加载springmvc的配置。此处配置了该参数,就不用去自己启动Spring了。
2. Controller
写一个处理器,打印一句话,然后返回页面。返回的页面名用ModelAndView封装。
package try01.controller;
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 TestController implements Controller{
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("hello Springmvc");
return new ModelAndView("hello");
}
}
3. HandlerMapping
配置路径和模型之间的对应关系。
其中的helloController是下面Controller处理器的id。
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello.do">helloController</prop>
</props>
</property>
</bean>
<bean id="helloController" class="try01.controller.HelloController"></bean>
4. ViewResolver
prefix为前缀,suffix为后缀。
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
5. 测试
在WEB-INF文件夹下新建一个hello.jsp文件,只打印一句Hello SpringMVC。
请求路径地址:http://localhost:8080/MySpringMVC/hello.do
console打印结果:hello Springmvc
页面显示结果:Hello SpringMVC
测试成功!
五、流程结构图
六、SpringMVC优化
上面的代码已经满足MVC的需求,但是还存在很多弊端,比如每一个处理器都需要实现Controller接口,一个控制器只能处理一个请求。每一个Bean还需要配置。返回结果必须是ModelAndView等等。
接下里将上面的程序进行一定的优化。
@RequestMapping(“hello.do”)是属于mvc的注解,是告诉DispatchServlet请求路径与处理器的对应关系。
controller处理器:
@Controller
public class HelloCon {
@RequestMapping("hello.do")
public String sayHello(){
System.out.println("sayHello");
return "hello";
}
}
springmvc.xml配置
<!-- 组件扫描 -->
<context:component-scan base-package="try01" />
<!-- MVC注解扫描 -->
<mvc:annotation-driven />
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
结束语
至此,SpringMVC框架就搭建完成,下一章介绍一下前后端页面传参的相关知识点。