零基础学JavaWeb开发(二十二)之 springmvc入门到精通

导读:本篇文章讲解 零基础学JavaWeb开发(二十二)之 springmvc入门到精通,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、SpringMVC概述

1、三层架构与MVC架构区别

1.1、三层架构

表示层:主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。 servlet层

业务逻辑层:对我们数据实现业务逻辑的封装 service层

数据访问层:对数据库访问操作 dao层

com.mayikt.servlet—-表示层

com.mayikt.service—-业务逻辑层

com.mayikt.dao—-数据库访问层

零基础学JavaWeb开发(二十二)之 springmvc入门到精通

1.2、MVC架构

M 代表 模型(Model)

1.MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

M 代表 模型(Model)(业务逻辑层+数据库访问组合)

模型就是数据,就是 dao,bean

模型是应用程序中用于处理应用程序数据逻辑的部分。

通常模型对象负责在数据库中存取数据。

V 代表 视图(View)(前端)

视图就是网页, JSP,用来展示模型中的数据

视图是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。

C 代表 控制器(controller)

控制器的作用就是把不同的数据(Model),显示在不同的视图(View)上,Servlet 扮演的就是这样的角色。

控制器是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

1、三层是基于业务逻辑来分的,而MVC是基于页面来分的

2、三层是软件架构,通过接口实现编程;MVC模式是一种复合设计模式,一种解决方案

3、三层模式是体系结构模式,MVC是设计模式

4、三层模式又可归于部署模式,MVC可归于表示模式

1.3、前后端分离开发模式

体现 让专业的人做专业的事情,前端代码由前端来完成,后端代码由我们后端来完成

后端程序只需要将接口数据提供给前端调用即可。

前端:vue、饿了么UI、网页数据 例如 html、js、css

后端:接口中数据 springmvc+mybatis

将前端和后端代码分开的

View视图层—jsp、ftl、js、css

com.mayikt.controller—-控制层springmvc 底层基于servlet 控制页面跳转、控制页面展示数据

com.mayikt.controller—-返回json 给前端

com.mayikt.service—-业务逻辑层

com.mayikt.dao—-数据库访问层

零基础学JavaWeb开发(二十二)之 springmvc入门到精通

二、SpringMVC概述

1.SpringMVC 是一种基于 Java 实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,它和 Struts2 都属于表现层的框架,属于 Spring FrameWork 的后续产品,Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制。

2.SpringMVC 已经成为目前最主流的 MVC 框架之一,并且随着 Spring3.0 的发布,全面超越 Struts2,成 为最优秀的 MVC 框架,它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持 RESTful 编程风格的请求。

简单总结:SpringMVC是一种基于Java实现MVC模型轻量级框架, 底层基于Servlet封装。

三、SpringMVC环境搭建

1、SpringMVC环境搭建(注解启动方式)

创建maven工程

零基础学JavaWeb开发(二十二)之 springmvc入门到精通

Maven依赖

     <!-- 整合springmvc框架依赖  -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

创建控制器层

package com.mayikt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

@Controller
public class MayiktController {
    /**
     * 1.@Controller作用
     * 需要在我们的类上加上@Controller注解 标记该类是为springmvc控制类
     * 2. @RequestMapping
     * 定义url映射
     * 3. @ResponseBody
     * 该接口返回我们的json数据
     */
//    /**
//     * 访问到该请求 返回json数据
//     *
//     * @return
//     */
    @RequestMapping("/getMayikt")
    @ResponseBody
    public Map<String, Object> getMayikt() {
        HashMap<String, Object> result = new HashMap<>();
        result.put("code", "200");
        result.put("msg", "ok");
        //访问该接口的 返回json数据
        return result;
    }
//    @RequestMapping("/getMayikt")
//    @ResponseBody
//    public String getMayikt() {
//        return "{code:'200',msg:'ok'}";
//    }

}

创建配置类

package com.mayikt.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;


@Configuration
@ComponentScan("com.mayikt.controller")
public class SpringMVCConfig {
    /**
     * 1.@Configuration  定义SpringMVCConfig.xml配置文件
     * 2.需要将我们的控制类注入到ioc容器 @ComponentScan("com.mayikt.controller")
     * @ComponentScan("com.mayikt.controller")将该包下所有的类 注入到IOC容器种
     * 3.在springmvc原理 所有请求过来先达到我们的 DispatcherServlet 分发具体控制类 方法执行
     */

}

注册配置类

package com.mayikt.config;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;


public class ServletInitializer extends AbstractDispatcherServletInitializer {
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        // 注册我们的 springmvc config 配置类
        AnnotationConfigWebApplicationContext annotationConfigWebApplicationContext
                = new AnnotationConfigWebApplicationContext();
        annotationConfigWebApplicationContext.register(SpringMVCConfig.class);
        return annotationConfigWebApplicationContext;
    }

    @Override
    protected String[] getServletMappings() {

        return new String[]{"/"};
    }

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

maven tomcat插件运行

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <configuration>
                    <port>85</port>
                    <path>/</path>
                    <ignorePackaging>true</ignorePackaging>
                </configuration>
            </plugin>
        </plugins>
    </build>

零基础学JavaWeb开发(二十二)之 springmvc入门到精通

搭建环境常见问题

1.扫包范围填写错误 @ComponentScan(“com.mayikt.controller”)

2.在控制类没有加上@Controller

导致接口访问404

2、SpringMVC环境搭建(xml启动方式)

springboot 全是注解方式启动

Maven依赖

   <dependencies>
        <!-- 整合springmvc框架依赖  -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        
    </dependencies>

springmvc.xml

零基础学JavaWeb开发(二十二)之 springmvc入门到精通

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!--1.配置spring创建容器时要扫描的包-->
    <context:component-scan base-package="com.mayikt.controller"></context:component-scan>
    <!--2.配置spring开启注解mvc 的支持-->
    <mvc:annotation-driven></mvc:annotation-driven>
    

</beans>

web.xml配置

所有请求过来都是先达到我们的DispatcherServlet

springmvc 基于 Servlet封装

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">


    <!-- SpringMVC前端控制器 -->
    <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:spring-mvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

定义控制器

package com.mayikt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;


@Controller
public class MayiktController {
    /**
    * 1.@Controller作用
    * 需要在我们的类上加上@Controller注解 标记该类是为springmvc控制类
    * 2. @RequestMapping
    * 定义url映射
    * 3. @ResponseBody
    * 该接口返回我们的json数据
    */
    //    /**
    //     * 访问到该请求 返回json数据
    //     *
    //     * @return
    //     */
    
    @RequestMapping("/getMayikt")
    @ResponseBody
    public String getMayikt() {
        return "{code:'200',msg:'ok'}";
    }
    
}

外部tomcat运行

需要将这些jar包存入 tomcat lib目录 否则报错 找不到类

📎springmvc需要的依赖jar包.rar

📎apache-tomcat-8.5.78-windows-x64.zip

📎apache-tomcat-8.5.78-windows-x64.zip

零基础学JavaWeb开发(二十二)之 springmvc入门到精通

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/111822.html

(0)
Java光头强的头像Java光头强
0 0

相关推荐

  • 探索Python异常:让程序不再崩溃! 技术随笔

    探索Python异常:让程序不再崩溃!

    0 0190
    飞熊的头像 飞熊
    2023年12月26日
  • Spring注解驱动之ServletContainerInitializer使用 技术随笔

    Spring注解驱动之ServletContainerInitializer使用

    0 0166
    小半的头像 小半
    2023年2月13日
  • 2020-11-08 助教一周小结(第十周) 技术随笔

    2020-11-08 助教一周小结(第十周)

    0 0181
    小半的头像 小半
    2023年8月22日
  • 【SpringCloud笔记】(10)消息总线之Bus 技术随笔

    【SpringCloud笔记】(10)消息总线之Bus

    0 0204
    飞熊的头像 飞熊
    2023年12月31日
  • 订单30分钟未支付自动取消怎么实现? 技术随笔

    订单30分钟未支付自动取消怎么实现?

    0 0306
    飞熊的头像 飞熊
    2023年3月9日
  • 详解NGINX访问https跳转到http的解决方法 技术随笔

    详解NGINX访问https跳转到http的解决方法

    0 0421
    飞熊的头像 飞熊
    2023年8月17日
  • 单元测试JunitTest加@Transactional事务自动回滚 技术随笔

    单元测试JunitTest加@Transactional事务自动回滚

    0 0183
    小半的头像 小半
    2023年2月2日
  • SpringCloud 使用 Hystrix 实现服务端接口【熔断】 技术随笔

    SpringCloud 使用 Hystrix 实现服务端接口【熔断】

    0 0176
    小半的头像 小半
    2023年12月23日
  • Spring Boot 整合 Druid 指南 技术随笔

    Spring Boot 整合 Druid 指南

    0 0218
    Java光头强的头像 Java光头强
    2023年2月18日
  • 【vue】avue-crud解决单元格点击事件传递行点击事件 技术随笔

    【vue】avue-crud解决单元格点击事件传递行点击事件

    0 0186
    小半的头像 小半
    2023年2月5日
  • 网络编程套接字之三【TCP】 技术随笔

    网络编程套接字之三【TCP】

    0 0395
    小半的头像 小半
    2023年2月4日
  • 【django】各种关联关系的模型类设计 技术随笔

    【django】各种关联关系的模型类设计

    0 0197
    小半的头像 小半
    2023年1月12日

发表回复

登录后才能评论

扫码关注公众号,技术文章第一时间送达

零基础学JavaWeb开发(二十二)之 springmvc入门到精通

站长精选

  • 别乱用了!日期类型字段的参数这样处理才足够优雅

    别乱用了!日期类型字段的参数这样处理才足够优雅

    2023年4月27日

  • 微软发布史上最强虚拟机!流畅度堪比主机!!!

    微软发布史上最强虚拟机!流畅度堪比主机!!!

    2023年9月23日

  • 偷偷爆料下国内比较大型的 IT 软件外包公司名单(2023 最新版!)

    偷偷爆料下国内比较大型的 IT 软件外包公司名单(2023 最新版!)

    2023年3月13日

  • Spring Security 为啥是个垃圾框架?

    Spring Security 为啥是个垃圾框架?

    2023年10月11日

  • Java 借助 OpenCV 实现人脸识别登录

    Java 借助 OpenCV 实现人脸识别登录

    2024年7月4日

  • 为什么每次用完 ThreadLocal 都要调用 remove()?

    为什么每次用完 ThreadLocal 都要调用 remove()?

    2023年9月27日

  • 两万字浅谈 DDD 领域驱动设计

    两万字浅谈 DDD 领域驱动设计

    2024年2月24日

  • 13.1k Star,开源的轻量级备忘录中心,非常清爽!

    13.1k Star,开源的轻量级备忘录中心,非常清爽!

    2023年4月25日

  • 超越 AOP:搜集业务操作日志的 3 个新探索

    超越 AOP:搜集业务操作日志的 3 个新探索

    2024年2月7日

  • 基于 Vue3.0 的中后台前端解决方案(已开源,拿来即用)

    基于 Vue3.0 的中后台前端解决方案(已开源,拿来即用)

    2022年11月21日

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!

玻璃钢生产厂家福州景区玻璃钢雕塑定制玻璃钢雕塑适用于什么万源玻璃钢花盆花器杭州玻璃钢雕塑厂商哈尔滨雕塑玻璃钢卡通玻璃钢雕塑室外寿命多久踏青商场美陈云南个性化玻璃钢雕塑哪家便宜铜陵玻璃钢雕塑卡通厂家德兴玻璃钢仿铜雕塑组合式玻璃钢雕塑摆件哪里有花朵玻璃钢卡通雕塑制作厂家商场美陈区3d模型昌邑玻璃钢马雕塑澳门儿童玻璃钢雕塑厂家工厂山西省玻璃钢雕塑厂家陕西玻璃钢酒店人物雕塑新乡标识标牌玻璃钢彩绘雕塑玻璃钢造型雕塑报价单小象雕塑玻璃钢黄岛岛玻璃钢雕塑昆明大型玻璃钢雕塑优势盘州玻璃钢雕塑厂家遵义玻璃钢关公雕塑济南唐韵玻璃钢马雕塑商场玻璃钢雕塑厂家宝山区镜面玻璃钢雕塑哪家专业日照玻璃钢牛雕塑湛江玻璃钢吉祥物卡通雕塑厂家阳江玻璃钢雕塑造型香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化