SpringMVC初见
现在就正式开始学习 SpringMVC 了!
1. SpringMVC简介
SpringMVC 是 Spring Framework 的一部分,是基于 Java 实现 MVC 的轻量级 Web 框架,本质上相当于 Servlet!
SpringMVC 的优点
- 轻量级框架,简洁灵活
- 基于请求响应的 MVC 框架,高效
- 与 Spring 无缝衔接!
也没啥好介绍的了,SpringMVC 和 Spring 已经是绑定的了,学习的理由自不必说,直接开始行动!
2. HelloSpringMVC
在研究 SpringMVC 执行的流程和原理之前,先对着教程写一个 HelloSpringMVC 程序,感受一下流程(学习流程,开发还会简化)!
-
创建 SpringMVC-02-Hello 项目,为项目添加 Web 的框架,配置 Tomcat(创建 Artifact 时把前一个项目的包给删了,后面也这么干)。
-
配置 web.xml,注册
DispatcherServlet
( SpringMVC 的核心!)<!-- web.xml 中--> <!--注册 DispatcherServlet --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--关联 springmvc 的配置文件:[servlet-name]-servlet.xml--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <!--启动级别-1--> <load-on-startup>1</load-on-startup> </servlet> <!--/ 匹配所有的请求(不包括.jsp)--> <!--/* 匹配所有的请求(包括.jsp)--> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
其中有一个 SpringMVC 的配置文件需要关联。
-
在 resources 目录下创建 SpringMVC 的配置文件,名称格式为
[servletname]-servlet.xml
(官方建议)<!--约束就是标准的 Spring 约束!--> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>
-
在配置文件中,添加处理器映射
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
这没有 id 的 bean 一看就知道要自动装配了!
-
在配置文件中,添加处理适配器
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
这个 bean 也没有 id。
-
在配置文件中,添加视图解析器
<!--视图解析器 给 DispatcherServlet 的 ModelAndView 都会经过这里 --> <!-- 1.获取 ModelAndView 的数据--> <!-- 2.解析 View 的名字--> <!-- 3.拼接视图名字,找到对应的视图--> <!-- 4.把 Model 渲染到 View 上!--> <bean id="InternalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/WEB-INF/jsp/"/> <!--后缀--> <property name="suffix" value=".jsp"/> </bean>
也不知道是干什么用的,后面再说。不过可以知道前缀和后缀用于和请求进行拼接,如请求为 hello,就能拼接成
/WEB-INF/jsp/hello.jsp
。 -
在 com.qiyuan.controller 包下编写操作业务的 HelloController 类,实现了 Controller 接口,它就是一个 Controller(或者注解!)
// 这里先使用 Controller 接口实现 public class HelloController implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { // ModelAndView 模型和视图 ModelAndView mv = new ModelAndView(); // 封装对象,放在ModelAndView中。Model mv.addObject("msg","HelloSpringMVC!"); // 封装要跳转的视图,放在ModelAndView中 // 由于设置了前缀和后缀,相当于 /WEB-INF/jsp/hello.jsp mv.setViewName("hello"); return mv; } }
-
将 Controller 类交给 Spring 管理,注册对应的 bean
<!--Handler--> <bean id="/hello" class="com.qiyuan.controller.HelloController"/>
这里也是写在 springmvc-servlet.xml 中的。
-
好了,差不多了,把要跳转的页面 hello.jsp 写了
<%-- /WEB-INF/jsp/hello.jsp --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Qiyuanc</title> </head> <body> ${msg} </body> </html>
-
启动项目,请求
http://localhost:8080/SpringMVC_02_Hello/hello
,成功输出HelloSpringMVC!
!
注意:这里可能会出现请求的页面找不到(404)的情况,原因为项目中的 jar 包在 Tomcat 中找不到!
解决方法:可以把项目的 jar 包全丢进 Tomcat 的 lib 下,但这太暴力了