先看看最简单,最基础的SpringMVC的小示例,就是输出一段文字。
以下是整个流程:
发出一个hello.from的请求-->执行SpringMVC的流程--->最后显示hello.jsp页面
客户端发出方位hello.jsp请求-->DispatcherServlet--> HandlerMapping-->HelloController-->返回ModelAndView-->ViewResolver(调用hello.jsp)-->输出响应
1. 创建一个Web工程,并导入SpringMVC所需要的jar包。
2. 在WEB-INF目录下,创建lib,将jar包放在这里。
3. 在WEB-INF目录下, 创建一个jsp的目录,并创建一个hello.jsp的文件,在body体内写入要输出的内容"Spring MVC入门示例"。
4. 在web.xml中配置DispatchServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<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:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.from</url-pattern>
</servlet-mapping>
</web-app>
此处需要注意的是,inti-param中param-name中必须要写成contextConfigLocation
由于将applicationContext.xml文件放在src目录下,所以在这里直接写成classpath: applicationContext.xml。 如果放的目录不同,要填写上实际存放的路径。
5. 创建HelloController.java, 该类要实现Controller接口,并重写handleRequest方法。
handleRequest()需要返回ModelAndView类型的值。
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//直接设置试图名字,不用加.jsp的后缀。
ModelAndView modelAndView = new ModelAndView("hello");
modelAndView.getModel().put("msg","模型信息");//设置要传递的模型数据相当于request.setAttribute("msg","");
return modelAndView;
}
}
6. 在applicationContext.xml中,配置Controller, HandlerMapping和ViewResolver。
HandlerMapping组件
通过HandlerMapping组件,DispatcherServlet控制器可以将客户HTTP请求映射到Controller组件上
Spring提供的以下几个典型的HandlerMapping组件
1. BeanNameUrlHandlerMapping
将收到的HTTP请求直接映射到Controller定义的名称上
2. SimpleUrlHandlerMapping
维护一个HTTP请求和Controller映射关系列表,根据列表对应关系调用Controller
VeiwResolver组件
所有Controller组件都返回一个ModelAndView实例, 封装了视图名。 Spring中的视图已名字为标识,视图解析器ViewResolver通过名字来解析视图。
常用的视图解析器:
UrlBasedViewResolver:
将视图名直接解析成对应的URL, 不需要显示的映射定义。如果你的视图名和视图资源的名字是一致的,就可以使用该解析器, 而无需进行映射。
InternalResourceViewResolver:
UrlBasedViewResolver的子类,它支持InternalResourceView(对servlet和JSP的包装), 以及其子类jstlView和TilesView响应类型。
<!--配置HandlerMapping-->
<bean id="handlermapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello.form">helloController</prop>
</props>
</property>
</bean>
<!--配置Controller-->
<bean id="helloController" class="com.test.controller.HelloController"></bean>
<!--配置viewresolver-->
<bean id="viewresolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
配置完成后,启动服务器,访问http://localhost:808/hello.from
到此,最简单一个入门示例就成功啦!