热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javamvc返回js_认识SpringMVC,并用两种简单的方式实现MVC操作

什么是MVC?MVC就是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计的规范。是将业务逻辑、数据、显示分离的方法来组织

什么是 "MVC"?
  • MVC 就是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计的规范。
  • 是将业务逻辑、数据、显示分离的方法来组织代码
  • MVC主要作用是降低视图和业务逻辑的双向耦合
  • 它不是一种设计模式,而是一种架构模式(当然,不同的MVC存在差异)。 Model(模型):数据模型,提供要展示的数据,因此包含数据和行为。可以认为是领域模型或JavaBean的组件(包含数据和行为),不过现在一般都分离来:Value Object(数据Dao)和服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。 View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想要看到的东西。 Controller(控制器):接收用户请求,委托给模型进行处理(状态的改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作 以上划掉部分,了解即可

为什么要学习SpringMVC SpringMVC的优点很多: 轻量级、简单易学、能进行简单的junit测试、支持Restful风格、与Spring兼容性好,无缝结合.....当然最主要的是用的人多比较多。

除了SpringMVC还有哪些其他的服务器框架 常见的服务器端MVC框架有:Struts、SpringMVC、ASP.NET MVC、Zend Framework、JSF;常见的前端MVC框架有:Vue、Angularjs、React、Backbone;由MVC还演化出另一种设计模式如:MVP、MVVM 等等.....

MVC框架要做哪些事情
  1. 将url映射到Java类或Java类的方法。
  2. 封装用户提交的数据。
  3. 处理请求----调用相关的业务处理----封装响应数据。
  4. 将响应数据的数据进行渲染.jsp / html 等表示层数据。

中心控制器

Spring的web框架围绕DispatcherServlet设计。DispatcherServlet的作用是将请求分发到不同的处理器。从Spring2.5开始,使用Java 5或以上版本的用户可以采用基于注解的Controller声明方式。

SpringMVC框架像许多其他的MVC框架一样,以请求为驱动围绕一个中心的Servlet分派请求以及提供其他功能,DispatcherServlet是一个实际的Servlet(它继承自HttpServlet 基类)

314de5964f304b93bf173faf829a73d2

用原始的方法实现一个MVC操作

首先需要写一个Dispatcher Servlet在web.xml中

springmvcorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:xxxxx1springmvc/

从代码中可以看到需要绑定一个Spring(MVC)的配置文件,那么我们在resource目录下写一个配置文件给他绑定即可

4d886911452847188b73e049f8b3a1d2

在spring配置文件中我们需要写一个映射器一个适配器和一个视图解析器(在实际的开发中并不需要把映射器和适配器显式的写出来)

之后我们需要编写一个能够让适配器找到的Controller类

fed0c41118da41a69feb3c5fe67a6601

创建好Controller类后需要让这个类继承Controller接口,实现了这个接口的类会获得控制器的功能(控制器用来处理请求和返回ModelAndView)

972cc3522219495ab1970b26c36afb15

这里需要注意的是不要继承Controller的注解(也就是第二个)

实现了Controller接口后需要重写他的方法,重写该方法只需要返回一个ModelAndView即可

5f8a5e243db141b985af1b24b51cd84d

实现这个接口并重写他的方法后我们在这个方法里写我们自己的具体业务代码和视图跳转

6f7ad527b527483e8f706caed4c7afe2

这里的视图跳转中传的test是我之前写好的jsp

3884d0a437454e9d86065b9ba6a33c6e

视图跳转写完后我们的Controller类到这里就结束了,返回的ModelAndView会把视图的名字交给视图解析器去拼接

拼接、数据填充完成后会把数据交给Dispatcher Servlet,由Dispatcher Servlet把数据给用户。

d46f5794c57640c98a43b799c52150bf

到这里原始的MVC实现方法就结束了,这种方法有一个缺陷,一个控制器中只能写一个方法。如果我们的网站有几十上百个接口 难道要写几十上百个类吗?而用注解来实现则不会有这方面的困惑。

注解实现MVC操作

注解实现MVC非常的方便 在真实开发中百分之九十都会使用注解的方式来进行操作,很少会使用上面这种原始的方法。

1. 首先为了避免Maven静态资源过滤的问题,我们在pom.xml中加上如下代码。

src/main/java**/*.properties**/*.xmlfalsesrc/main/resources**/*.properties**/*.xmlfalse

2. 接着我们写一个DispatcherServlet在web.xml中(同上一种方法)

springmvcorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:spring-servlet.xml1springmvc/

3.绑定Spring(MVC)配置文件

4.最后编写我们的Controller类,在类中使用对应的注解

package com.molu.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;@Controller //这里使用@Controller注解,让Spring能够扫描到这个类public class HelloController { @RequestMapping("hello") //url地址 public String hello(Model model){ // 使用Model来封装数据 (这里的Model就是ModelAndView的简化版本,一般Model会用的比较多) model.addAttribute("msg","Hello,Molu"); return "hello"; //返回的值会被视图解析器处理 }}

@Controller注解用于声明Spring类的实例,用@Controller声明的类就是一个控制器,且会被Spring托管。这个注解中的类的所有方法,如果返回值是String并且有具体的页面可以跳转,那么就会被视图解析器解析

@RequestMapping 的value值也就是请求的url地址,一般写在方法上面, 如果在类上使用这个注解,在url地址上就会多一层父关系,这个父关系的url(也就是类上的@RequestMapping的value值)需要写在方法上的RequestMapping的url前面

========================================================================

4.1在类上使用RequestMapping注解

下图代码就是在类上使用了RequestMapping注解,那么如果想访问hello方法中的Model封装的数据,就必须在url地址上加上一个"Hello"(也就是类上的@RequestMapping的value值) -eg:localhost:8080/Hello/hello

33451bf02e6c4e4db83e26b9581ec310

上图仅做示范,在本次的注解操作中并没有在类上使用Request Mapping注解

======================================================================= 5.之后我们在浏览器上输入 "localhost:8080/hello"进行测试,如图可以访问到我们用Model封装起来数据。

6550ad2fa5ce401fa30ccf8b89c258ec

可以看到使用注解的开发十分便捷,大致步骤如下:

  1. 新建一个web项目
  2. 导入相关jar包依赖
  3. 编写web.xml,编写Dispatcher Servlet
  4. 编写Spring(MVC)配置文件
  5. 创建对应的控制类(Controller)
  6. 完善前端视图和controller之间的对应
  7. 测试运行调试

使用SpringMVC必须配置的三大件:

处理器映射器、处理器适配器、视图解析器

通常我们只需要手动配置视图解析器,而处理器映射器、处理器适配器我们只需要开启注解驱动即可,省去了大段的xml配置,提高开发效率。



推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
author-avatar
mobiledu2502931637
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有