一:SpringMVC简介:它时一种设计模式或者称为设计规范,M既Model层,模型层,主要对应Javaweb时的Dao和service,V即View层,视图层,主要对应Javaweb时的jsp/HTML,C即Controller层,控制层,主要对应Javaweb时的servlet。
1.Model:包含数据(Dao)和行为(Service),提供要展示的数据、模型数据查询、数据更新等功能。
2.View:负责模型的展示,也就是我们可以看到的前端界面
3.Controler:接收用户请求,委托给模型进行处理,处理完毕后将结果返回给视图,相当于调度员。
4.流程图:以前Javaweb时,都是先创建Dao层连接数据库,然后service层去调用dao层执行一些具体的业务,再然后servlet层,这一层负责接收前端的数据,把这些数据交给service层去处理,处理完毕后获取service层处理后的结果,并将结果返回给前端model层:负责编写业务逻辑、保存数据状态、连接数据库等操作
二:职责分析:
1.controller层:取得表单数据、负责调用业务逻辑、转向指定页面
2.model层:负责链接数据库(dao),业务逻辑编写(service)
3.view层:负责展示数据
三:向SpringMVC的过渡_一个简单的servlet程序
-
<dependencies> <dependency> <groupId>junitgroupId> <artifactId>junitartifactId> <version>4.12version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-webmvcartifactId> <version>5.1.9.RELEASEversion> dependency> <dependency> <groupId>javax.servletgroupId> <artifactId>servlet-apiartifactId> <version>2.5version> dependency> <dependency> <groupId>javax.servlet.jspgroupId> <artifactId>jsp-apiartifactId> <version>2.2version> dependency> <dependency> <groupId>javax.servletgroupId> <artifactId>jstlartifactId> <version>1.2version> dependency> dependencies>
- 删掉项目中的src文件夹,方便后期创建多个子项目,右键SpringMVC项目,新建一个module,命名为Study01_Servlet,导入相关依赖
<dependencies> <dependency> <groupId>javax.servletgroupId> <artifactId>servlet-apiartifactId> <version>2.5version> dependency> <dependency> <groupId>javax.servlet.jspgroupId> <artifactId>jsp-apiartifactId> <version>2.2version> dependency> dependencies>
- 右键Study01_Servlet子项目,选择Add Framework Support,添加框架支持,在打开的界面中选择web,点击应用。
- 编写一个servlet:在java文件夹,右键->新建->类->命名为com.xiaoma.servlet->HelloServlet,继承HttpServlet类,重写doGet和doPost方法,添加一下代码
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取前端请求参数
String method = req.getParameter("method");
if (method.equals("add")) {
req.getSession().setAttribute("msg","执行了add方法");
}
if (method.equals("delete")) {
req.getSession().setAttribute("msg","执行了delete方法");
}
//调用具体的业务类
//转发或者重定向页面
req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
-
写完servlet就去web.xml文件去配置servlet
<servlet> <servlet-name>testHelloServletservlet-name> <servlet-class>com.xiaoma.servlet.HelloServletservlet-class> servlet> <servlet-mapping> <servlet-name>testHelloServletservlet-name> <url-pattern>/userurl-pattern> servlet-mapping>
<session-config> <session-timeout>60session-timeout>session-config>
6. 6. 在WEB-INF文件夹下编写一个jsp页面,命名为jsp/test.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Titletitle> head> <body> ${msg} body> html>
7. 配置tomcat并启动,然后访问:(注意:这里配置tomcat的时候,我的Delopment里边的Application context是/,默认是Study01_Servlet_war_exploed)
7. -
localhost:8080/user?method=add (结果为:跳转页面并显示”执行了add方法”)
- localhost:8080/user?method=delete (结果为:跳转页面并显示”执行了delete方法”)
- 程序执行流程:首先用户通过浏览器访问url连接并携带参数,然后根据请求链接会找到程序中对应的servlet-mapping对应的url-pattern,这个url-pattern有个对应的servlet-name,这个servlet-name是和servlet中的servlet-name对应的,servlet根据不同的servlet-name去寻找对应的servlet类,servlet类中去处理请求及其参数,执行不同的操作,最后根据不同的条件去寻找不同的视图文件(jsp/html),并将结果返回给对应的视图界面,视图界面将数据取出并展示。
四:初识SpringMVC
1.Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。查看官方文档:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/web.html#spring-web
2.简单的springmvc案例及其解析:
1.首先创建一个子模块命名为Study02_helloMVC,无需添加依赖
2.右键Study02_helloMVC子项目,选择Add Framework Support,添加框架支持,在打开的界面中选择web,点击应用。
3.在web/WEB-INF/web.xml文件中添加以下代码
springmvc
class>org.springframework.web.servlet.DispatcherServletclass>
springmvc
/
4.在web/WEB-INF文件夹下新建jsp/hello.jsp文件,添加如下代码
"text/html;charset=UTF-8" language="java" %>
Title
${msg}
5.在Java文件夹下新建com.xiaoma.controller.HelloController的类文件,添加如下代码,添加完毕后,hello.jsp文件中对应的msg信息就能匹配到了
package com.xiaoma.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Author:xiaoma
* FileName:HelloController
* Data:2022/4/24 10:10
*/
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("msg","HellospringMVC");
//封装要跳转的视图,放在ModelAndView中,最终匹配的视图对象是前缀+setViewName.后缀
//这里就是/WEB-INF/jsp/hello.jsp
mv.setViewName("hello");
return mv;
}
}
6.在resources文件夹下创建springmvc-servlet.xml文件
"1.0" encoding="UTF-8"?>
"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">
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
"prefix" value="/WEB-INF/jsp/"/>
"suffix" value=".jsp"/>
"/hello1" class="com.xiaoma.controller.HelloController"/>
7.配置并启动tomcat,访问localhost:8080/hello1测试效果(这里的hello1正好对应着springmvc-servlet.xml注册的那个Controller文件,这里配置tomcat的时候,我的Delopment里边的Application context是/,默认是Study02_helloMVC_war_exploed),最后界面输出HelloController里的msg信息。
8.注意:有可能会出现404的情况,点击idea菜单栏的file-》project structure-》Artifacts,选择Study02这个项目,看看再WEB-INF下是否又lib文件夹,如果没有则新建一个lib文件夹并添加全部依赖
9.执行流程:
1.用户在浏览器输入localhost:8080/hello1
2.因为springmvc-servlet.xml文件中配置了BeanNameUrlHandlerMapping和SimpleControllerHandlerAdapter这两个bean,而这两个bean是根据浏览器中的url寻找对应的controller文件的,再这个springmvc-servlet.xm文件中我们还配置了一个bean,其中id为/hello1,其对应的类就是我们的HelloController类,程序就会去找到这个HelloController类
3.HelloController类被执行,再这个类里有个setViewName方法,里边的参数是”hello”,程序就会根据这个参数结合再web.xml中配置的前后缀,找到这个WEB-INF/jsp/hello.jsp文件,并跳转到这个视图中。这个类里边还有个addObject方法,这个里边存放了视图中显示的数据,是一个kv的形式,k用来让前端jsp视图通过${k}取出对应的v。
10.程序运行后访问url出现的问题:报错500,错误内容为java.io.FileNotFoundException:Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml],解决方案为下边的第二张图片
五:SpringMVC执行原理
图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。
- DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。 我们请求的url为 : http://localhost:8080/SpringMVC/hello1 如上url拆分成三部分: http://localhost:8080 服务器域名 SpringMVC部署在服务器上的web站点 hello表示控制器 通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。
- HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。
- HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello1。
- HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
- HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
- Handler让具体的Controller执行。
- Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
- HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
- DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
- 视图解析器将解析的逻辑视图名传给DispatcherServlet。
- DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
- 最终视图呈现给用户。
Original: https://www.cnblogs.com/XiaoMaGuai/p/16172814.html
Author: XiaoMaGuai
Title: SpringMVC(1)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/592499/
转载文章受原作者版权保护。转载请注明原作者出处!