第一:写第一个SpringMvc之前先弄了解他究竟是什么?为什么要学习它?
Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。
查看官方文档:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/web.html#spring-web
我们为什么要学习SpringMVC呢?
Spring MVC的特点:
- 轻量级,简单易学
- 高效 , 基于请求响应的MVC框架
- 与Spring兼容性好,无缝结合
- 约定优于配置
- 功能强大:RESTful、数据验证、格式化、本地化、主题等
- 简洁灵活
Spring的web框架围绕DispatcherServlet(实际是一个Servlet) [ 调度Servlet ] 设计。
DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解形式进行开发,十分简洁;
正因为SpringMVC , 简单 , 便捷 , 易学 , 天生和Spring无缝集成(使用SpringIoC和Aop) , 使用约定优于配置 . 能够进行简单的junit测试 . 支持Restful风格 .异常处理 , 本地化 , 国际化 , 数据验证 , 类型转换 , 拦截器 等等......所以我们要学习 。
SpringMvc执行原理图(图从网上搜的)
- 用户发送请求,直接请求到DispatcherServlet
- DispatcherServlet调用HandlerMapping处理映射器,查找匹配相应的Handler
- 解析到相应的Handler后,调用适配器HandlerAdapter。
- HandlerAdapter根据相应的Handler调用真正的处理器(Controller),并执行相应的业务逻辑
- 处理完业务后,HandlerAdapter会将controller的返回值ModelAndView对象,带给DispatcherServlet
- DispatcherServlet调用ViewResolver处理映射,处理解析ModelAndView
- 解析后返回一个具体的view到DispatcherServlet
- DispatcherServlet负责将这个view返回给用户
SpringMVC接口解释:
HandlerMapping:可以完成用户到Controller的映射
HandlerAdapter:帮助DispatcherServlet处理映射请求的
ViewResolver:根据配置解析View,从而将结果渲染给用户
步骤:
1.新建一个web项目,导入SpringMvc依赖
2.在Web.xml文件中注册DispatcherServlet
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 5 version="4.0"> 6 7 <!--1.注册DispatcherServlet--> 8 <servlet> 9 <servlet-name>springmvc</servlet-name> 10 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 11 <!--关联一个spring-mvc的配置文件:springmvc-servlet.xml--> 12 <init-param> 13 <param-name>contextConfigLocation</param-name> 14 <param-value>classpath:springmvc-servlet.xml</param-value> 15 </init-param> 16 <!--启动级别设置为1:运行时启动(数字越小启动越早)--> 17 <load-on-startup>1</load-on-startup> 18 </servlet> 19 20 <!--在spring中:/跟/* 21 /:代表匹配所有,但是不包括jsp文件 22 /*:包括了jsp文件,(如果写了/*,那么运行的时候就会循环调用hello.jsp.jsp.jsp.....) 23 --> 24 <!--所有请求都会被springmvc拦截--> 25 <servlet-mapping> 26 <servlet-name>springmvc</servlet-name> 27 <url-pattern>/</url-pattern> 28 </servlet-mapping> 29 30 </web-app>
3.配置sprinmvc-servlet.xml文件名字跟着官方叫的
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <!--添加映射器:有很多这里先用这个(用bean匹配的映射器)--> 8 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> 9 10 <!--添加处理适配器--> 11 <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> 12 13 <!--添加视图解析器(可变):模板引擎Thymeleaf Freemarker...以后会这些被代替--> 14 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 15 <!--前缀--> 16 <property name="prefix" value="/WEB-INF/jsp/"/> 17 <!--后缀--> 18 <property name="suffix" value=".jsp"/> 19 </bean> 20 21 <!--注册HelloController,因为使用这个BeanNameUrlHandlerMapping,所以要注册bean--> 22 <!--hello:用户访问输入的--> 23 <!--Handler--> 24 <bean id="/hello" class="com.he.controller.HelloController"/> 25 </beans>
4.编写业务Controller,这里先使用接口的方式(方便后面弄清原理)
package com.he.controller; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //导入Controller(控制器)接口 public class HelloController implements Controller { public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { //ModelAndView:视图和模型 ModelAndView mv = new ModelAndView(); //封装对象:将放在ModelAndView中,Model mv.addObject("msg","HelloMVC!"); //封装要跳转的对象:放在ModelAndView中 mv.setViewName("hello");//WEB-INF/JSP/hello.jsp return mv; } }
5.在WEB-INF/jsp/下编写了一个hello.jsp文件以便跳转。
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <html> 3 <head> 4 <title>Title</title> 5 </head> 6 <body> 7 ${msg} 8 </body> 9 </html>
6.启动tomcat进行测试
结果有可能遇到404的问题:
解决方案:在WEB-INF下建立lib文件夹,然后将相关jar包全部导入:如图
总结:创建springmvc项目
1.创建一个maven工程,在WEB-INF下创建一个lib目录导入相应的jar包
2.配置web.xml
3.配置springmvc-servlet.xml文件
4.编写Controller和service
5.运行tomcat