SpringMVC注解版 --PK-- xml版入门案例

简介: SpringMVC注解版 --PK-- xml版入门案例

目的:SpringMVC初步了解

一、 先来带伙伴们先了解一下什么是SpringMVC


SpringMVC 其实是Spring提供的一个基于MVC设计模式的轻量级的Web 开发框架,本质上相当于一个Servlet,其实可以说他就是一个Servlet


由于SpringMVC 本身就是Spring框架的一部分,所有与Spring框架可以无缝集成。是当今业内界最主流的Web开发框架。


二、两个入门案例带你走进SpringMVC


注:在模拟这两个案例时,切记不可放在同一个项目下进行演示。因为两个案例都需要启动扫描核心配置文件,虽其方式不同,但不可放在同一项目下运行,xml配置版要和注解配置版分开!


2.1 入门案例:基于xml配置文件

--------- 图集导航


bbc3342ef2f3412f9b27ac8a9def2a65.png

2.1.1 搭建环境

  • 创建maven项目【2种方法开去我的主页面查询详情】
  • 可根据导入webapp框架进行搭建项目
  • 也可先创建一个普通的maven项目,在将其转换为web项目

配置Tomcat

拷贝相关坐标


<packaging>war</packaging>
​
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
​
    <dependencies>
​
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <!-- 事务 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
​
​
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.24</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>3.7.5</version>
        </dependency>
​
        <!--整合-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.5</version>
        </dependency>
​
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
​
        <!-- mvc json -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.10.2</version>
        </dependency>
​
        <!--swagger2-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>
​
​
        <!--文件上传-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
​
        <!--jsp相关-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
​
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.10</version>
        </dependency>
​
​
    </dependencies>


2.1.2 编写Controller

  • 业务处理入口,UserController
  1. 图集导航


159408ced27b4cb19a25501377593f1e.png


注:在创建各种配置包或者业务处理包的时候要注意这些包一定要放在一个大包下,不可分包放在java的根目录下,必须放在java下的一个包的根目录下。因为到时候扫描配置类时要扫描的是一个包,必须放在一个包下。


    3024ee1dd98345d9892f7cc3d7ae93a2.png


-----------  UserController类


@Controller   //将当前类添加到spring容器中
@RequestMapping("/user")  //给当前类中所有功能,设置一个路径访问前缀
public class UserController {
    @RequestMapping("/selectAll") //给当功能方法,设置一个访问路径
    //定义一个方法
    public String selectAll(){
        //返回一个页面
        return "/pages/list.jsp";
    }
}
 //最终访问路径 /user/selectAll.action  类路径/方法路径.action 【action是在web.xml中配置的一个后缀】

2.1.3 编写list.jsp页面:显示内容


3062fc0054064fec80efd9e5a7f565f4.png

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
大家好呀!我是路遥叶子,欢迎来到叶子的空间!!!
</body>
</html>


2.1.4 编写核心配置文件springmvc:

----------用于扫描controller包

注:该springmvc文件要放在resources包下


dcda81036412421fa7f4332bc25d1f70.png

<?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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                  http://www.springframework.org/schema/beans/spring-beans.xsd
                  http://www.springframework.org/schema/mvc
                  http://www.springframework.org/schema/mvc/spring-mvc.xsd
                  http://www.springframework.org/schema/aop
                  http://www.springframework.org/schema/aop/spring-aop.xsd
                  http://www.springframework.org/schema/context
                  http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 以上约束不需要我们写,直接复制即可 -->
    <!-- 扫描注解包  @ComponentScan -->
    <!-- base-package 后面的路径为:我们写业务处理类所在的包的全路径 -->
    <context:component-scan base-package="com.czxy.day01_xml_mvc.controller"/>  
</beans>


2.1.5 在web.xml中配置前端控制器:加载核心配置文件


12dd4cf5407541838b6cca0fad0b09af.png


------  注:直接复制即可,不需要我们写


<?xml version="1.0" encoding="UTF-8"?>
<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">
    <!-- 配置前端控制器   -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!-- 设置访问的路径后缀为.action   -->
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
</web-app>


2.1.6 编写首页index.jsp

--- 部署项目,链接跳转到list.jsp


e554b86937f047a88e879e691677e708.png

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <%-- 在href路径写明我们的定义的路径: 类名/方法名/web.xml配置的路径后缀 .action--%>
<a href="${pageContext.request.contextPath}/user/selectAll.action">入门案例---基于xml</a><br/>
</body>
</html>

2.1.7 启动访问及结果

0f28ec707cca4cb7994b2d4e56cdddbb.png


2.2 入门案例:基于注解配置类

------- 图集导航


e94b8659a1cd48c0a049032d1369b233.png

2.2.1 搭建环境

  • 创建项目
  • 拷贝导入坐标
  • 配置Tomcat

------- 该步骤和以上xml配置文件一样,这里就不多写了,可翻找按照上面步骤进行

2.2.2 编写Controller 类


e2a75e1803c94141bb28231acb5eae28.png


  • 业务处理入口,StudentController类
@Configuration   //将当前类添加到spring容器中
@RequestMapping("/student")   //给当前类中所有功能,设置一个路径访问前缀
public class StudentController {
    /**
     * 最终访问路径 /student/selectAll.action
     * @return
     */
    @RequestMapping("/selectAll")  //给当前功能方法,设置一个访问路径
    public String selectAll(){
        return "/pages/list.jsp";
    }
}


2.2.3 拷贝核心配置类


0e9d82c2ec8143958a0f6ee16877615a.png


—— 拷贝核心配置类:MvcConfiguration1用于扫描controller包(取代了xml配置文件springmvc.xml)【可自行根据需要添加修改扫描的包路径】


@Configuration  //注解标明这是一个配置类
@ComponentScan(basePackages = "com.czxy.controller")  // 设置需要扫描的指定包controller,可自行根据需要添加包路径
public class MvcConfiguration1 {
}


—— 拷贝核心配置类: webInitializer1(取代web.xml配置) 【直接拷贝即可】


public class WebInitializer1 implements WebApplicationInitializer {
​
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        //1 配置spring工厂
        AnnotationConfigWebApplicationContext application = new AnnotationConfigWebApplicationContext();
        // 注册所有的配置类
        application.register(MvcConfiguration1.class);
​
        //2 post中文乱码
        FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding", new CharacterEncodingFilter("UTF-8"));
        encodingFilter.addMappingForUrlPatterns(null, true, "/*");
​
        //3 核心控制器
        ServletRegistration.Dynamic mvcServlet = servletContext.addServlet("springmvc", new DispatcherServlet(application));
        mvcServlet.addMapping("*.action");
        mvcServlet.setLoadOnStartup(2); //tomcat启动时,执行servlet的初始化方法
​
    }
}

2.2.4 编写jsp页面,部署项目

  • 显示内容


17dd062607dd4b2d96eb2b93e80a3435.png


----- index.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/student/selectAll.action">入门案例---基于注解</a>
</body>
</html>


----- /pages/list.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
大家好!欢迎来到路遥叶子的空间。<br/>
现在我们来测试一下通过扫描注解配置类访问的页面吧!
</body>
</html>


2.2.5 启动项目及结果


0d9a04548b7f481eb2e7f649e73eae73.png


三、对比总结


区别:基于xml配置文件 ---以及---- 基于注解配置类,两者的区别就在于注解配置类中的2个核心配置类取代了xml配置文件中对springmvc.xml以及web.xml的配置


效率:基于注解配置类的方式较xml配置文件来说,注解版更加的便捷,方便,易于开发者开发。现阶段大部分开发者都是使用的注解开发,只有极少数的或者必须要用xml方式开发的人在使用。


建议:2种方式各位都可以学习一下,建议将注解版敲的烂熟于心。多使用注解版,xml版可以学习了解一下。当然能掌握2种方式就更棒了。


裁决:作为本期裁判,我宣布,本轮【SpringMVC注解版 --PK-- xml版】比赛,最后的胜利者为注解小朋友。


相关文章
|
XML Java 应用服务中间件
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
通过一个HelloWorld实例,介绍了SpringMVC的基本概念、执行流程,并详细讲解了如何创建和配置第一个SpringMVC项目(基于XML)。
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
|
XML 前端开发 Java
XML基本概念入门学习指南
XML(eXtensible Markup Language)是一种可扩展的标记语言,和HTML语言语法类似,同属于标记语言。
787 14
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
915 4
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
1694 2
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
614 2
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
979 5
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
前端开发 Java 开发者
Spring MVC中的控制器:@Controller注解全解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序控制层的核心。它不仅简化了控制器的定义,还提供了灵活的请求映射和处理机制。本文将深入探讨`@Controller`注解的用法、特点以及在实际开发中的应用。
1489 0
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查