MVC是一种软件架构的思想,将软件按照模型、视图、控制器划分
M:Model,模型层,指工程中的JavaBean,作用是处理数据
Javabean分为两类:
V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据
C:Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器
MVC工作流程:
用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求处理的结果找到相应的View视图,渲染数据后最终响应给浏览器
SpringMVC是Spring的一个后续产品,是spring的一个子项目
SpringMVC是spring为表述层开发(servlet)提供的一个框架,SpringMVC就是封装了servlet
三层架构分为表述层(表示层)、业务逻辑层、数据访问层,表述层表示前台页面和后台servlet
(1)Spring家族原生产品,与IoC容器对接
(2)基于原生的servlet,通过封装的servlet管理控制器DispatcherServlet,对请求和响应进行统一处理
(3)表述层各个细分领域需要解决的问题全方位覆盖,提供全面解决方案
(4)提高开发效率
(5)内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应的组件即可
建议用tomcat10版本以下去测试
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.3.1version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
<version>1.4.5version>
<scope>testscope>
dependency>
<dependency>
<groupId>org.thymeleafgroupId>
<artifactId>thymeleaf-spring5artifactId>
<version>3.0.15.RELEASEversion>
dependency>
注意:
SpringMVC的配置文件默认的位置和名称:
位置:WEB-INF下
名称:-servlet.xml,以下配置的文件名称为SpringMVC-servlet.xml
url-pattern中/和/*的区别:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Archetype Created Web Applicationdisplay-name>
<servlet>
<servlet-name>SpringMVCservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>SpringMVCservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
web-app>
由于前端控制器对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要创建处理具体请求的类,即请求控制器
请求控制器中每一个请求处理的方法成为控制器方法
因为springMVC的控制器由一个pojo(普通的Java类)担任,因此需要提通过@Controller注解将其标识为一个控制层组件
@Controller
public class HelloController {
}
当前文件名为:SpringMVC-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:component-scan base-package="controller">context:component-scan>
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="order" value="1"/>
<property name="characterEncoding" value="UTF-8"/>
<property name="templateEngine">
<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver">
<bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/WEB-INF/templates/"/>
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
<property name="characterEncoding" value="UTF-8" />
bean>
property>
bean>
property>
bean>
beans>
在/WEB-INF/templates/下创建index.html
DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title heretitle>
head>
<body>
<h2>Hello World!h2>
<a th:href="@{/hello }">测试SpringMVCa>
<a href="/hello">测试绝对路径a>
body>
html>
以及success.html
DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title heretitle>
head>
<body>
<h1>successh1>
body>
html>
@Controller
public class HelloController {
@RequestMapping("/")
public String protal() {
//将index.html
return "index";
}
@RequestMapping("/hello")
public String hello() {
return "success";
}
}
开启tomcat9测试
在web.xml中修改servlet配置
<servlet>
<servlet-name>SpringMVCservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springmvc.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>SpringMVCservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
web-app>
classpath直译过来是类路径,是Java环境配置中要设置的一个环境变量,就是.class文件的路径,表示JVM从哪里去寻找要运行的class文件,classpath = D:\java表示执行java命令时去D:\java目录中去找需要被执行的class文件并运行。
一般一个web工程中java、resources下的路径都是类路径。
src/main/
下面的java
和resources
文件夹都被(编译)打包到了生产包的WEB-INF/classes/
目录下;而原来WEB-INF下面的views和web.xml则仍然还是在WEB-INF下面。同时由maven引入的依赖都被放入到了WEB-INF/lib/
下面。最后,编译后的class文件和资源文件都放在了classes目录下。
行java命令时去D:\java目录中去找需要被执行的class文件并运行。
一般一个web工程中java、resources下的路径都是类路径。src/main/
下面的java
和resources
文件夹都被(编译)打包到了生产包的WEB-INF/classes/
目录下;而原来WEB-INF下面的views和web.xml则仍然还是在WEB-INF下面。同时由maven引入的依赖都被放入到了WEB-INF/lib/
下面。最后,编译后的class文件和资源文件都放在了classes目录下。