MVC是Model View Controller的简写,其中三个单词代表不同的层次结构,是一种软件工程里面的一种软件架构模式。
M:Model就是模型,里面包含了许多Javabean,其中一种是实体类bean,专门存储数据,还有一种是业务逻辑类bean,专门处理业务逻辑和数据访问的,有service对象和dao对象等。
V:View简写,视图的意思。指用户可以看到和用户交互的页面,可以向后端输入数据,就像我们的html页面。用户可以直观看到,并且通过表单可以和后端交互。
C:Controller,控制器。接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。最简单有我们的各种servlet。
SpringMVC就是一个Spring内置的MVC框架,spring下面有许多单独的框架,各个框架之间都可以单独使用。SpringMVC解决WEB开发中各种逻辑,而且使用简单,与Spring无缝集成。采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。
我使用的idea是21版的,在添加maven配置后创建web工程会自动导入maven工程相关配置,我这里也简单介绍一下maven工程的创建,如果你的maven还没有配置好,可以参考另一篇博客:maven的安装、环境配置、私服配置,idea部署maven
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.3.1version>
dependency>
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
<version>1.2.3version>
dependency>
<dependency>
<groupId>org.thymeleafgroupId>
<artifactId>thymeleaf-spring5artifactId>
<version>3.0.15.RELEASEversion>
dependency>
/
里面配置servlet路径。而springMVC对全部的请求都做统一处理,通过前端控制器DispatcherServlet统一处理请求,那pattern>/
里面就要配置全部请求地址。web里面学的全部请求方式就是/*,但是这要注意的是不能包含jsp,因为jsp本省就是servlet程序,它的请求本身就通过特定方式处理,不需要再处理了,所以请求地址配置为/ 代表除了jsp以外的全部请求。
<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>
(2)扩展配置方式
扩展方式通过
标签配置了springMVC配置文件的初始名称和位置
标签里面contextConfigLocation翻译过来就是配置文件的位置,
里面是配置文件的类加载路径。还有
标签配置前端控制器的初始化时间,里面是1 就代表服务器启动时前端控制器就初始化,并不像web基础里面请求一次才初始化一个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>
在resource目录下新建一个springMVC.xml文件,注意要选择spring config类型的。然后加入context命名空间,用于组件扫描。这里组件扫描使用方法和springIOC里面一样,用
标签,base-package标签里面是将要扫描的类路径。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.cx.springmvc.controller">
context:component-scan>
beans>
这个thymeleaf具体后面会讲到,现在照着配置,后面会使用到。thymeleaf配置加在spring配置文件里面。
<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>
这里的注解和spring里面的一样,注意在组件扫描里面加上包路径。我的类路径是com.cx.springmvc.controller,所以对应的组件扫描标签就是
如果没有开启组件扫描,这个类就不会加载到spring容器里面,不能通过spring实例化。
@Controller
public class HelloController {
}
我这里先写一个简单的html,注意html里面要加上thymeleaf视图解析器的下载路径,如果你想要后面的所有html界面都自动加上thymeleaf视图解析器的下载路径,可以在idea里面修改html界面默认初始化内容。
在第四步里面html标签加上xmlns:th=“http://www.thymeleaf.org”,这个就是thymeleaf视图解析器的下载路径。
注意编写后html的路径,我的html放在WEB-INF下的templates里面,对应在thymeleaf配置里面视图前缀就为
,再由于我的demo页面是html类型的,视图后缀就为
,配置成功后通过html名称就能够找到对应的网页。
index.html页面
DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>title>
head>
<body>
<h1>hello world!!!h1>
body>
html>
demo1.html页面
DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
body>
html>
在我们注解的类里面写获取视图方法,注意方法返回String类型,返回内容是页面名字,我的页面叫index.html和demo1.html,就返回index和demo1。最后在方法上加上@RequestMapping(“/”)注解,引号里面对应页面名称。如果是@RequestMapping(“/”)就代表默认启动页面。
@Controller
public class HelloController {
@RequestMapping("/")
public String toIndex(){
return "index";
}
@RequestMapping("/demo1")
public String toDemo1(){
return "demo1";
}
}
启动服务器后默认页面就是index.html的内容,后面加上demo1就是demo1页面的内容,注意不用加上虚拟路径和后缀,因为在thymeleaf视图解析器里面已经配置过试图前缀和视图后缀。