添加依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>
添加这一个依赖就可以自动引入其他所有的spring运行环境相关jar和springmvc运行相关jar:
在web.xml中配置核心控制器
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
配置解析:
- dispatcherServlet:前端控制器,主要负责请求的分派。前端的请求由这里分派给指定的处理器。
- load-on-startup:当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。正数的值越小,启动该servlet的优先级越高。
- url-pattern:表示拦截哪些请求, “/” 表示拦截所有请求。也可以如”.do”表示拦截所有以do为扩展名的请求。基本使用是”.do”,在使用rest时用”/”
- dispatcherServlet默认使用WebApplicationContext作为上下文。配置初始化参数contextConfigLocation,可以指定springmvc初始化上下文使用的配置文件。也可以不配置,默认会加载
“/WEB-INF/[servlet名字]-servlet.xm”
上面的配置会在web容器(tomcat)启动的时候启动springmvc容器(WebApplicationContext)
配置springmvc配置文件
1 . 先配置包扫描:
<!-- 扫描@Controller创建bean -->
<context:component-scan base-package="com.springmvc"
use-default-filters="false">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
spring容器是springmvc容器的父容器,父容器可以看到子容器的Bean,子容器中不能看到父容器中的Bean。如果两个容器都配置了包扫描,会有同一个bean被创建两次的情况。最常用的解决方案就是在配置包扫描是进行过滤:
在springmvc配置文件中配置只扫描@Controller注解,spring容器配置排除扫描@Controller注解。
2 . 配置页面解析器:
<!-- 配置页面解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
- 最常用的URL文件应该就是我们的jsp页面了,InternalResourceViewResolver解析器可以解析该资源。其主要职责是:根据处理器的返回值找到资源页面,然后装配页面数据,最后返回给前台。
- prefix和suffix属性可以指定资源页面的前缀和后缀,可以直接把资源位置定位到项目的/WEB-INF/views下面。
InternalResourceViewResolver默认是使用了InternalResourceView作为视图的实现类,如果你想使用JSTL标签的一些功能的话,那就需要用JstlView来替换InternalResourceView了,具体的配置如下:
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
<property name="viewClass" value = "org.springframework.web.servlet.view.JstlView"></property>
</bean>
如果处理器返回值为”success”,则前端控制器会去配置中找viewResolver,根据配置定位页面为:/WEB-INF/views/success.jsp,定位到文件后,装配数据,然后将之返回给前端。
3 . 创建处理器
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/helloWorld")
public class HelloWorldController {
@RequestMapping("/sayHello.do")
public String sayHello(){
System.out.println("helloWorld...");
return "success";
}
}
- 首先用@Controller注册bean,将之交给springmvc容器管理。
- 然后配置@RequestMapping处理请求地址映射。
- 关于@RequestMapping: @RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@RequestMapping 除了修饰方法, 还可来修饰类 : 类定义处: 提供初步的请求映射信息。相对于 WEB
应用的根目录; 方法处: 提供进一步的细分映射信息。 相对于类定义处的 URL。 若类定义处未标注
@RequestMapping,则方法处标记的URL相对于 WEB 应用的根目录
上面定义的处理器sayHello()可以处理下面的请求:
http://localhost:8080/springmvc-demo/helloWorld/sayHello.do
返回页面/WEB-INF/views/success.jsp
- 测试
index.jsp:
<a href="helloWorld/sayHello.do">HelloWorld!</a>