springMVC快速入门

springMVC快速入门

简介

MVC是一种软件架构的思想,将软件按照模型、视图、控制器类划分。

M(model):模型层,指工程中的javaBean,作用是处理数据

javaBean分为两类:

  • 一类称为实体类Bean(专门存储业务数据,如:User...)

  • 另一类称为业务处理Bean(指Servlet或Dao对象,专门用来处理业务逻辑和数据访问)

V(view):视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据
C(controller):控制层,指工程中的servlet,作用是接收请求和响应浏览器

MVC的工作流程

用户通过视图层发送请求服务器,在服务器中请求被Controller接收,Controller调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求处理的结果找到相应的View视图,渲染数据后最终相应给浏览器。

什么是springMVC

springMVC是Spring的一个后续产品、是Spring的一个子项目,同时也是Spring为表述层开发提供的一阵套完备的解决方案。

特点

  • springMVC是Spring框架的一部分,可以方便的利用Spring所提供的其他功能。
  • 灵活性强,易于与其他框架集成。
  • 提供了一个前端控制器DispatcherServlet,使开发人员无需额外开发控制器对象。
  • 可自动绑定用户输入,并能正确的转换数据类型。
  • 内置了常见的校验器,可以校验用户输入。如果校验不能通过,那么就会重定向到输入表单。
  • 支持国际化。可以根据用户区域显示多国语言。
  • 支持多种视图技术。它支持JSP、Velocity和FreeMarker等视图技术。
  • 使用基于XML的配置文件,在编辑后,不需要重新编译应用程序。

第一个springMVC程序

具体步骤

1、创建maven工程
2、设置打包方式为war(pom.xml)
3、引入依赖
xml 复制代码
<!--springMVC-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.1</version>
</dependency>
<!--servletAPI-->
<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>5.0.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.12.RELEASE</version>
</dependency>
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。

4、配置web.xml

先将web.xml配置文件的内容做修改

xml 复制代码
<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">
        
</web-app>

注册SpringMVC的前端控制器DispatcherServlet

方式一:默认配置方式

在此配置下,SpringMVC的配置文件默认位于WEB-INF下,默认名称为<servlet-name>-servlet.xml,如下的文件所对应的SpringMVC配置文件位于WEB-INF下,文件名为springMVC-servlet.xml

xml 复制代码
<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">
    <!--配置SpringMVC的前端控制器,对浏览器发送的请求进行统一处理-->
    <servlet>
      <servlet-name>springMVC</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>springMVC</servlet-name>
      <!--
      设置springMVC的核心控制器所能处理的请求的路径,
      /所匹配的请求可以是/login或.html或.css方式的请求路径但/不匹配.jsp请求路径
      -->
      <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

方式二:扩展配置方式(使用最多)

可以通过init-param标签设置SpringMVC配置文件的位置和名称,通过load-on-startup标签设置SpringMVC前端控制器DispacherServlet的初始化时间。

xml 复制代码
<servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--通过初始化参数指定SpringMVC配置文件的位置和名称-->
    <init-param>
       <!--contextConfigLocation为固定值-->
      <param-name>contextConfigLocation</param-name>
      <!--classpath:表示从类路径查找配置文件,如maven工程中的src/main/resources...springMVC.xml表示的是具体的文件-->
      <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>
5、创建请求控制器

由于前端控制器对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要创建处理具体请求的类,即请求控制器。

请求控制器中每一个处理的请求方法称为控制器方法。因为SpringMVC的控制器由一个普通java类担任,因此需要通过@Controller注解将它标识为一个控制层组件,交给Spring的IoC容器管理,此时SpringMVC才能够识别控制器的存在

java 复制代码
@Controller
public class HelloController {
}
6、配置springMVC.xml
xml 复制代码
<?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/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--扫描组件-->
    <context:component-scan base-package="com.louis.controller"></context:component-scan>
    <!--配置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>
</beans>

当看到如下的图标时,表示配置成功。

7、创建测试实例

根据thymeleaf视图解析器中前缀视图内容,在WEB-INF下创建templates文件夹,在其中创建一个html文件。

如:index.html,在其中添加thymeleaf的命名空间:

html 复制代码
xmlns:th="http://www.thymeleaf.org"
html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<h2>首页</h2>
</body>
</html>

命名空间可以在模板中设置。如图:

8、测试
  • 实现对index.html的访问,使用Tomcat方式启动。
  • 在请求控制器HelloController中创建处理请求的方法。
java 复制代码
@Controller
public class HelloController {
    //请求路径:"/",访问页面为:/WEB-INF/templates/index.html
    @RequestMapping(value = "/")//请求映射注解,它的作用是将请求和控制器方法创建映射关系,只有value的时候可以不写。
    public String findIndex(){
        //返回视图名称,它决定了最终要跳转到的页面,它会被视图解析器解析
        return "index";
    }
}

访问指定页面
1、在index.html中添加thymeleaf语法的超链接。
html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<h2>首页</h2>
<a th:href="@{/target}">访问目标页面target.html</a>
</body>
</html>

解释说明:

html 复制代码
<a href="/springMVC/target">目标页面</a>
<!--使用这个方法可以访问到目标文件路径,但当我们修改上下文路径的时候,都需要修改-->
html 复制代码
<a th:href="@{/target}">访问目标页面target.html</a>
<!--使用thymeleaf可以动态获取,想要通过thymeleaf去解析一个属性,只需在属性前面加上th:,也就可以使用thymeleaf的语法, thymeleaf在识别到是绝对路径的时候,它会自动添加上下文路径-->
2、在templates下编写target.html
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" xmlns:th="http://www.thymeleaf.org">
    <title>Title</title>
</head>
<body>
test target!
</body>
</html>
3、在请求控制器HelloController中创建处理请求的方法
java 复制代码
@RequestMapping("/target")
public String toTarget(){
    return "target";
}
4、测试

总结

浏览器发送请求,若请求地址符合前端控制器的url-pattern,该请求会被前端控制器DisparcherServlet处理。前端控制器会读取SpringMVC的核心配置文件,通过扫描组件找到控制器,将请求地址和控控件中@RequestMapping注解的value属性进行匹配,若匹配成功,该注解所标识的控制器方法就是处理请求的方法,处理请求的方法需要返回一个字符串类型的视图名称,该视图名称会被视图解析器解析,加上前缀和后缀组成视图的路径,通过Thymeleaf对视图进行渲染,最终转发到视图所对应页面,使用的方式是转发

相关推荐
雷神乐乐6 分钟前
File.separator与File.separatorChar的区别
java·路径分隔符
小刘|10 分钟前
《Java 实现希尔排序:原理剖析与代码详解》
java·算法·排序算法
逊嘘29 分钟前
【Java语言】抽象类与接口
java·开发语言·jvm
morris13137 分钟前
【SpringBoot】Xss的常见攻击方式与防御手段
java·spring boot·xss·csp
七星静香1 小时前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员1 小时前
java导出word文件(手绘)
java·开发语言·word
ZHOUPUYU1 小时前
IntelliJ IDEA超详细下载安装教程(附安装包)
java·ide·intellij-idea
stewie61 小时前
在IDEA中使用Git
java·git
Elaine2023911 小时前
06 网络编程基础
java·网络
G丶AEOM1 小时前
分布式——BASE理论
java·分布式·八股