导图社区 狂神说SSM系列文章 知识点整合
根据狂神说SSM的系列文章整合的知识框架。SSM框架是大家最低工作要求了吧,至少要熟练掌握完毕,才能在工作项目中好好的使用,学完SSM,SpringBoot也是必不可少的。
编辑于2021-04-11 17:37:20狂神ssm
主题
主题
SpringMVC
展望
SpringMVC+VUE+SpringBoot+SpringCloud+Linux
学习重点
SpringMVC的执行流程
回顾
什么是MVC?
MVC是一种架构模式 (不是设计模式)
模型
视图
控制器
MVC的主要作用是降低视图和业务逻辑之间的双向耦合 也就是一个解耦合的过程
Servlet回顾
准备工作
1 创建一个Object-父工程
2 将第一个工程作为父工程
3 导入公共的依赖
4 新建一个Module-子工程
5 子工程标记为web项目
右击
Add Framework Support (添加框架支持)
勾选添加web框架的支持
结构
web包
可见
WEB-INF
用户不可见
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.lele.Servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/svl</url-pattern> </servlet-mapping> </web-app>
Servlet
package com.lele.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1 获取前端参数 在以前的操作中,我们需要接受前端的method参数,来决定要进行的操作 //测试(代替表单传参)http://localhost:8080/SpringMVC_01_Servlet_war_exploded/svl?method=add String method = req.getParameter("method"); if (method.equals("add")){ req.getSession().setAttribute("msg" ,"执行了add方法"); } if (method.equals("delete")){ req.getSession().setAttribute("msg" ,"执行了delete方法"); } //2 调用业务层 //3 视图转发/重定向 msg数据可能被转发到jsp req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);//resp.sendRedirect(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp);//通过这种方式实现复用 } }
初见SpringMVC
SpringMVC
是Spring的一部分,是基于java实现的MVC的轻量级web框架 (底层还是Servlet)
特点
轻量级,简单易学
高效,基于响应
与Spring兼容性强
可以将其中所有要用到的bean注册进Spring
约定优于配置
约定至上,必须按照规定
功能强大,RESTful、数据验证、格式化、本地化、主题等
简洁灵活
核心
DispatcherServlet(调度Servlet)
将请求分发到处理器,提供了controller的基于 注解声明方式
请求都会经过一个doService方法
开始
1 注册一个Module,添加web的支持
2 确定导入了SpringMVC的依赖
3 配置web.xml,注册DispatcherServlet
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>
4 写关联的配置文件
5 添加处理映射器
6 添加处理器适配器
7 添加视图解析器
<?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 https://www.springframework.org/schema/beans/spring-beans.xsd"> <!--添加处理映射器 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!--添加处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!--添加视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp"/> <!-- 后缀 --> <property name="suffix" value =".jsp"/> </bean> </beans>
8 写业务
用来讲解原理,真实开发比这个简单
存放东西不再需要Session或者request承载
只需要文件名,路径的前后缀名自动拼接
package com.lele.controller; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloController implements Controller { public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { //模型和视图 ModelAndView mv = new ModelAndView(); //封装对象,放在ModelAndView中 mv.addObject("msg","HelloSpringMVC"); //封装要跳转的视图,放在ModelAndView中 mv.setViewName("hello");//此处的视图默认加上配置中的前后缀:/WEB-INF/jsp/hello.jsp return mv; } }
9将自己写的类交给SpringIOC注册
<?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 https://www.springframework.org/schema/beans/spring-beans.xsd"> <!--添加处理映射器 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!--添加处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!--添加视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp"/> <!-- 后缀 --> <property name="suffix" value =".jsp"/> </bean> <bean id = "/hello" class ="com.lele.controller.HelloController"/> </beans>
tomcat问题集合
每个module都可以单独配置Application context,代表相对路径 更新过下面要在server startup重新导
没有lib——会找不到资源(本例中出现)
没有蓝色那个
切到module项目中下面通知点击fix,重新编辑结构
总结
模型和视图——给的hello经过视图解析器获得要跳转的实际页面 也就是写一个controller类就可以了,不需要再去设置其他servlet
执行原理
原理图
上图中每一个实箭头SpringMVC都提供了实现,而虚线部分需要自己实现
1
DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心,用户发出请求,DispatcherServlet接收并且拦截请求
假设请求的url为:
http://localhost:8080/SpringMVC/hello
如上url拆分为三部分
http://localhost:8080服务器域名
SpringMVC在服务器上部署的web站点
控制器hello
2
HandlerMapping为处理器映射。DIspatcherServlet调用HandlerMapping, HandlerMapping根据请求url查找Handler
3
HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如 上url被查找控制器为:hello
4
HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器 映射等
5
HandlerAdapter表示处理器适配器,按照特定的规则对Handler加以执行
6
Handler让具体的Controller执行
7
Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView
8
HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet
9
DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名
11
DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图
12
最终视图展现给用户
主题