【Spring篇02】对于SpringMVC核心原理的理解 & @Controller和@RequestMapping注解

之前在【Web篇08】中提到,SpringMVC的核心就是优化了B/S结构(浏览器-服务器),简化了Servlet的创建;

浏览器可以查找的路径:WebContent目录下的jsp文件,一般在这个目录下创建个index.jps作为首页
服务器可以查找的路径:WEB-INF目录下的jsp文件;

初学Web时,浏览器发送动态请求的响应过程如下:

  1. 浏览器首先通过url,查找到WebContent目录下的首页index.jsp页面,将其响应给浏览器后;
  2. 用户点击超链接等访问动态页面,再次发送请求,这一次请求需要发送给TomCat服务器;
  3. 再由TomCat发给特定的Servlet,
    (一个url对应一个index.jsp文件,在这个文件中,通过href=“Servlet”,指定一个特定的Servlet,来处理该url请求);
  4. 这个特定的Servlet去WEB-INF目录下,查找写好的jsp文件,将其响应给浏览器;
  5. 浏览器接收jsp文件,显示页面,完成动态请求的响应。

这个模式的弊端是,一个url需要对应一个Servlet,再由Servlet进行转发和重定向处理;这样不同的页面我们就需要在src目录下new不同的Servlet,并且每一个Servlet都需要重写代码;

那么有没有一种方式可以简化这个流程呢?

★ SpringMVC就是为简化这个流程而设计的!

★ 通过SpringMVC的设计模式,有效地把不同的Servlet转化成了同一个java文件下的@Controller注解类中不同的@RequestMapping注解方法,一个注解方法相当于一个Servlet服务器,简化了流程。

MVC,即model模型(service层和Dao层)、view视图(jsp页面)、controller控制器(Servlet);
一个典型的SpringMVC工程如下图所示:
在这里插入图片描述

~~下面依据浏览器发送url请求的逻辑顺序,整理各文件的含义和流程思路如下:

1. index.jsp
首页文件,其中有一个超链接,
其中==${pageContext.request.contextPath}==,指绝对路径,即等同于http://localhost:8080/SpringMVC02-wx,
后面的/hello,hello是映射
即,浏览器接收响应index.jsp后,点击超链接,再次发送请求,通过该绝对路径去找,当前Web工程SpringMVC02-wx,下的hello映射;

<a href="${pageContext.request.contextPath }/hello">Hello SpringMVC</a>

2. pom.xml
<dependency各种依赖的配置文件,作用是基于GAV路径导入jar包,
SpringMVC中需要导入的jar包有context的jar包和spring-webmvc的jar包;

3. web.xml
配置DispatcherServlet(前端控制器),并且指定配置SpringMVC的配置文件的路径是springmvc.xml;
这样DispatcherServlet就会将url请求,去找具有相同映射的服务器处理;

4. SpringMVCHandler.java
在当前类上加==@Controller注解==,表明该类作为一个控制器,等同于Servlet服务器;
在类中写一个有String类型返回值的方法,对方法加注解@RequestMapping("/hello");
@RequestMapping是一个用来处理请求地址url映射的注解,hello是其映射与上面jsp页面超链接中的hello映射相对应

5. springmvc.xml
首先设置,要自动扫描的包的路径,com.atguigu.springmvc,扫描包中的java文件,将java文件创建对象,放置在IOC容器中,以后需要的时候再调用;
然后配置,视图解析器InternalResourceViewResolver,在其中设置前缀prefix为/WEB-INF/views
后缀suffix为.jsp;

6. 在SpringMVCHandler.java文件中,@Controller注解类等同于Servlet,处理url请求,找到映射同样为hello的@RequestMapping注解方法中的返回值"success";

7. 然后与springmvc.xml中的前缀后缀拼接,得到/WEB-INF/views/success.jsp,即url为通过服务器查找WEB-INF目录下的views目录中的success.jsp页面;

8. 最终将success.jsp页面响应给浏览器。

~~最后,整理一下上面url发送动态请求(映射为hello)后的过程:

首先,web.xml中的前端控制器DispatcherServlet,将不同的url,通过index.jsp超链接中的映射hello,去找SpringMVCHandler.java中@Controller注解类(等同于Servlet)下,映射同样为hello的@RequestMapping注解方法;

然后,通过注解方法的String类型返回值"success",与springmvc.xml中的前缀、后缀拼接,得到查找路径,即/WEB-INF/views/success.jsp;

最终,将写好的success.jsp文件响应给浏览器;

猜你喜欢

转载自blog.csdn.net/wx1528159409/article/details/83593727