Hello World
- 新建动态web工程, 导入jar包(Spring核心模块, 支持注解 与 web模块)
- 配置前端控制器:DispatcherServlet
<servlet>
<servlet-name>springDispatcherServlet</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>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
contextConfigLocation: 指定SpringMVC配置文件路径, 不指定springmvc配置文件路径, 默认寻找路径: /WEB-INF/${servlet-name}-servlet.xml
servlet-mapping: 指定要拦截的路径
注意:
'/*' 与'/'都是拦截所有请求 /* 范围更大, 还会拦截到*.jsp请求 一般来说: *.jsp的处理是交给tomcat的 1. 服务器的web.xml中有一个defaultServlet的url-pattern="/", tomcat中用于处理静态资源, 除jsp与servlet的资源. 2. 我们配置的前端控制器url-pattern="/", 我们的配置会覆盖掉DefaultServlet的作用, tomcat会在我们的前端控制器中查找RequestMapping匹配的方法(html,..)
- 配置 springmvc.xml
添加包扫描:
<context:component-scan base-package="…"></context:component-scan>
配置视图解析器(能自动为我们拼接页面地址):
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
- 实现Controller-servlet:
@Controller
public class MyFirstController {
@RequestMapping("/hello")
public String myfirstRequest() {
System.out.println("hello 请求收到, 处理中....");
return "success";
}
}
- 请求页面:
请求hello:
<a href="hello"> SpringMVC project </a>
</body>
SpringMVC执行流程
1. 得到请求
2. 前端控制器收到所有请求
3. 根据@RequestMapping 匹配执行的方法
4. 前端控制器找到目标处理类与目标方法, 直接利用返回执行目标方法
5. 方法执行完成后, 返回要显示的页面
6. 视图解析器解析页面, 得到完整的页面地址
7. 拿到页面地址, 转发到这个页面