文章目录
一、springMVC简介
1、什么是MVC
MVC是Model View Controller的简写,其中三个单词代表不同的层次结构,是一种软件工程里面的一种软件架构模式。
M:Model就是模型,里面包含了许多Javabean,其中一种是实体类bean,专门存储数据,还有一种是业务逻辑类bean,专门处理业务逻辑和数据访问的,有service对象和dao对象等。
V:View简写,视图的意思。指用户可以看到和用户交互的页面,可以向后端输入数据,就像我们的html页面。用户可以直观看到,并且通过表单可以和后端交互。
C:Controller,控制器。接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。最简单有我们的各种servlet。
2.什么是springMVC
SpringMVC就是一个Spring内置的MVC框架,spring下面有许多单独的框架,各个框架之间都可以单独使用。SpringMVC解决WEB开发中各种逻辑,而且使用简单,与Spring无缝集成。采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。
二、环境配置
1、创建maven工程
我使用的idea是21版的,在添加maven配置后创建web工程会自动导入maven工程相关配置,我这里也简单介绍一下maven工程的创建,如果你的maven还没有配置好,可以参考另一篇博客:maven的安装、环境配置、私服配置,idea部署maven
- 选择创建模块或者项目
- 选择maven工程
- 选择maven版本
第一个就是选择maven的版本,最开始idea有一个默认的,你自己有下就选择你自己的版本,第二个是mavensetting配置文件的位置,第三个是maven本地仓库的位置。一般你有将maven部署到idea那idea都会自动选择二三步。
项目创建好之后main下面只有一个webapp目录,你可以加上其它目录。包括java源程序目录,资源目录,还有一个测试类的目录。然后右击选择Mark Directory as选择目录类型。
2、导入核心依赖
- 在pom.xml里面导入如下依赖:
第一个是测试类依赖,第二个是springMVC依赖,第三是日志依赖,第四个是thymeleaf依赖,第一三就你的情况可以导入也可以不导入。
<!--测试类依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--spring mvc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.1</version>
</dependency>
<!--日志-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!--spring与thymeleaf整合依赖-->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.15.RELEASE</version>
</dependency>
- 配置web.xml文件
spring能够基于原生的servlet,通过功能强大的前端控制器DispatcherServlet统一处理请求和处理响应。
(1)默认的方式配置
我们在javaweb中学习的servlet一个请求就对应一个servlet,在配置文件中就要在<url-pattern>/</url-pattern>
里面配置servlet路径。而springMVC对全部的请求都做统一处理,通过前端控制器DispatcherServlet统一处理请求,那pattern>/</url-pattern>
里面就要配置全部请求地址。web里面学的全部请求方式就是/*,但是这要注意的是不能包含jsp,因为jsp本省就是servlet程序,它的请求本身就通过特定方式处理,不需要再处理了,所以请求地址配置为<url-pattern>/</url-pattern>代表除了jsp以外的全部请求。
<!-- 默认的springMVC配置前端空值器,对浏览器发送的请求统一处理-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
(2)扩展配置方式
扩展方式通过 <init-param> </init-param>
标签配置了springMVC配置文件的初始名称和位置<param-name>
标签里面contextConfigLocation翻译过来就是配置文件的位置,<param-value>
里面是配置文件的类加载路径。还有<load-on-startup>1</load-on-startup>
标签配置前端控制器的初始化时间,里面是1 就代表服务器启动时前端控制器就初始化,并不像web基础里面请求一次才初始化一个servlet。
<!-- 扩展配置方式-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置spring配置文件的初始化名称和位置-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 将dispatcherServlet前端控制器初始化时间改为服务器启动时初始化-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3、创建springMVC配置文件
在resource目录下新建一个springMVC.xml文件,注意要选择spring config类型的。然后加入context命名空间,用于组件扫描。这里组件扫描使用方法和springIOC里面一样,用<context:component-scan base-package=""> </context:component-scan>
标签,base-package标签里面是将要扫描的类路径。
<?xml version="1.0" encoding="UTF-8"?>
<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>
4、加入thymeleaf视图解析器
这个thymeleaf具体后面会讲到,现在照着配置,后面会使用到。thymeleaf配置加在spring配置文件里面。
<!-- thymeleaf视图解析器-->
<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>
三、编写web代码
1、写一个类,并且加上配置标签
这里的注解和spring里面的一样,注意在组件扫描里面加上包路径。我的类路径是com.cx.springmvc.controller,所以对应的组件扫描标签就是 <context:component-scan base-package="com.cx.springmvc.controller"> </context:component-scan>
如果没有开启组件扫描,这个类就不会加载到spring容器里面,不能通过spring实例化。
@Controller
public class HelloController {
}
2、配置thymeleaf视图解析器的下载路径
我这里先写一个简单的html,注意html里面要加上thymeleaf视图解析器的下载路径,如果你想要后面的所有html界面都自动加上thymeleaf视图解析器的下载路径,可以在idea里面修改html界面默认初始化内容。
在第四步里面html标签加上xmlns:th=“http://www.thymeleaf.org”,这个就是thymeleaf视图解析器的下载路径。
3、编写一个简单的前端页面
注意编写后html的路径,我的html放在WEB-INF下的templates里面,对应在thymeleaf配置里面视图前缀就为 <property name="prefix" value="/WEB-INF/templates/"/>
,再由于我的demo页面是html类型的,视图后缀就为<property name="suffix" value=".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>Title</title>
</head>
<body>
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
</body>
</html>
4、写获取视图的方法
在我们注解的类里面写获取视图方法,注意方法返回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";
}
}
5、配置Tomcat服务器
6、测试结果
启动服务器后默认页面就是index.html的内容,后面加上demo1就是demo1页面的内容,注意不用加上虚拟路径和后缀,因为在thymeleaf视图解析器里面已经配置过试图前缀和视图后缀。