首页 > 编程知识 正文

springmvc入门实例,java spring mvc

时间:2023-05-05 12:57:27 阅读:107333 作者:2728

1 )什么是MVC

模型视图控制器(MVC )是一种软件设计框架模型,它采用模型视图控件(MVC )的方法将业务逻辑、数据和接口表示分离。 将许多业务逻辑组合在一个部件中,当然,这种相对官方的解释并不能足够清楚地理解什么是MVC。 简单地说,MVC的理念是将数据处理、数据展示(接口)和程序/用户交互三者分离的编程模型。

小心! MVC不是设计模式!

MVC框架模式是复合模式,MVC的三个核心部件分别是

1:Model (模型)独立于所有用户数据、状态和程序逻辑、视图和控制器

2 )2:View ) )类似于显示模型、Web程序界面。 显示从模型中获取应显示的状态和数据。 对于同一个数据可以有不同的显示格式(显示)

3 )3:Controller ) )控制器)负责获取用户的输入信息,分析并反馈给模型,通常一个视图中有控制器

1.2 :为什么要使用MVC

程序通过分离m (模型和V(View )代码,实现前后代码的分离,带来一些好处

1 )可以在同一个程序中使用不同的表达。 当控制器反馈给模型的数据发生变化时,模型会立即通知相关视图,视图会相应地更新自己表示的内容

2 )模型独立于视图,因此可以重用模型,并可以独立地将模型移植到其他位置继续使用

3 )通过前后端的代码分离,项目开发分工更加明确,程序测试更加简便,开发效率提高

下图是MVC各组件之间的关系和功能图

实际上,控制器的功能类似于中继器,它调用该模型来处理用户的请求,并确定调用哪个视图向用户呈现

1.3:MVC模式在Java web中的应用

在JavaWeb程序中,经常使用MVC框架模式。 列举Web程序的结构可以更好地理解MVC的理念

v :视图视图。 在Web程序中,是指用户可以看到并与数据进行交互的界面,如Html网页界面或某些客户端界面。 如上所述,MVC为程序处理许多不同的视图,用户可以在视图中输出数据并执行一系列操作。 注:视图不执行任何数据处理操作。

M:Model模型:进行所有数据的处理。 从模型返回的数据是中立的,无论数据格式如何,一个模型都可以向多个视图提供数据,因此模型的代码重复性较低

C :控制器:接受用户输入,调用模型和视图以满足用户需求。 控制器不输出也不处理。 接受请求,调用模型构件以处理用户的请求,并确定在哪个视图中显示返回的数据

1.4:Web程序中MVC模式的优点

低关联度:视图(页面)和业务层(数据处理)分离,一个APP应用程序的业务流程或业务规则的更改只需要更改MVC中的模型,不影响控制器和视图

快速部署,低成本: MVC减少了开发和维护用户界面所需的技术。 使用MVC模型大大缩短了开发时间,程序员(Java开发人员)专注于业务逻辑,而接口程序员(HTML和JSP开发人员)专注于表示

可维护性:通过将视图层和业务逻辑层分开,还可以方便地维护和修改web APP应用程序

1.5 ) web程序中MVC模式的缺点

调试困难:由于必须严格隔离模型和视图,在调试APP中也存在困难,每个组件在使用之前都必须进行彻底测试

不适合小型、中型APP应用。 在中小型APP应用中,强制使用MVC进行开发往往需要很长时间,无法体现MVC的优点,开发过程会很繁琐

增加系统结构和实现的复杂性:严格遵循MVC标准并隔离模型、视图和控制器会增加结构复杂性,导致过多的更新操作,并降低运营效率

视图和控制器之间的连接太紧密,导致视图对模型数据的访问权限降低。 视图和控制器是相互分离但密切相关的部件,视图中不存在控制器,应用有限。 反之亦然,阻碍了独立复用。 根据模型操作界面的不同,可能需要多次检索视图才能获得足够的显示数据。 对未更改的数据的不必要的频繁访问还可能会损害运营性能

2、Spring MVC框架

目前,MVC框架已经有很多。 Struts、Webwork、新兴的MVC框架有Spring MVC、JSF等。 本文主要介绍Spring MVC的设计理念

Struts1.0是一个基于webwork的MVC框架,存在许多类的继承关系,耦合性太高。 随后推出了struts2.0,但由于该MVC框架在分析视图方面存在一些小问题,因此Spring MVC应运而生

2.1、Spring MVC简介及特点

Spring MVC采用松散耦合的可插组件结构,比其他MVC框架更灵活、更可扩展。 Spring MVC通过使用一系列注释,将一个Java类作为前端控制器(Controller ),不需要实现接口,Spring MVC支持RES格式的URL请求

、视图解析、本地化处理及静态资源处理上都有许多不俗的表现。

Spring MVC围绕DispatcherServlet(前端控制器)为中心展开,DispatcherServlet(前端控制器)是Spring MVC的中枢,和MVC的思想一样,它负责从视图获取用户请求并且分派给相应的处理器处理,并决定用哪个视图去把数据呈现给给用户

Spring MVC特点

1:让我们能非常简单的设计出干净的Web层和薄薄的Web层;

2:进行更简洁的Web层的开发;

3:天生与Spring框架集成(如IoC容器、AOP等);

4:提供强大的约定大于配置的契约式编程支持;

5:能简单的进行Web层的单元测试;

6:支持灵活的URL到页面控制器的映射;

7:非常容易与其它视图技术集成,如Velocity、FreeMarker等,因为模型数据不放在特定的API里,而是放在一 个Model里(Map数据结构实现,因此很容易被其他框架使用);

8:非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API;

9:提供一套强大的JSP标签库,简化JSP开发;

10:支持灵活的本地化、主题等解析;

11:更加简单的异常处理;

12:对静态资源的支持; 支持Restful风格。

2.2:Spring MVC请求响应

SpringMVC把视图渲染、请求处理、模型创建分离了,遵循了MVC框架模式的思想

SpringMVC的请求相应要经过七个阶段,蓝色的方框是Spring框架已经实现好的,第二阶段到第六阶段对应着Spring MVC中的一些核心理念,分别是前端控制器、处理映射器、控制器(处理器)、视图解析器、视图。要注意的是:前端控制器和控制器不是一个东西,前端控制器负责任务分发,控制器是模型的一部分,负责业务和数据的处理

SpringMVC核心控制类的请求流程

SpringMVC的请求相应步骤如下

1、用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获

2、DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回

3、DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

4、提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作

HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

1.数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

2.数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

3.数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

5、Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象

6、根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet

7、ViewResolver 结合Model和View,来渲染视图

8、将渲染结果返回给客户端

3、SpringMVC 项目简单搭建

搭建一个简单的Spring MVC项目,我们只需要有一个Web服务器(tomcat)和一个IDE就可以了,我选择的是tomcat8.5+IDEA,下图是项目的结构

1、首先创建一个Maven项目,添加pom依赖

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.bittech

springmvc-case

1.0.0

war

org.springframework

spring-framework-bom

4.3.9.RELEASE

pom

import

org.springframework

spring-webmvc

javax.servlet

javax.servlet-api

3.1.0

provided

com.google.code.gson

gson

2.8.2

org.apache.maven.plugins

maven-compiler-plugin

3.7.0

1.8

1.8

因为用到了Spring MVC框架,所以需要导入MVC的依赖,而且,前端控制器是一个Servlet,所以也要导入Servlet API

2、配置Web.xml

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_3_1.xsd"

version="3.1">

This is Java Spring MVC web application

contextConfigLocation

classpath:application-context.xml

org.springframework.web.context.ContextLoaderListener

servlet

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:application-servlet.xml

servlet

/

web.xml文件位于src/main/webapp/WEB-INF/web.xml下,在项目的结构里可以看见在WEB-INF目录下有一个view的目录,所有的视图文件都放在这里,此项目的视图为jsp,为什么要把视图文件都放在WEB-INF下呢?因为...

客户端是没有办法看到WEB-INF中的内容的,如果把jsp文件写到webapp里面,抛异常之后代码就会显现出来,网页容易被攻击。视图文件都放在WEB-INF中客户应该访问的是地址,而不是文件,不能暴露实现网站的方式。

3、配置Spring MVC容器

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

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/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

在配置前端控制器的时候需要把Spring MVC容器作为属性配置到Servlet中,此容器中配置的是视图解析器、控制器(模型)以及SpringMVC的注解驱动。

4、配置一个Controller

package com.dxy.control;

import com.dxy.service.MVCservice;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.servlet.ModelAndView;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

@Controller

@RequestMapping(value = "/")

public class Controller1 {

//业务层访问对象

private MVCservice mvCservice;

@RequestMapping(value = {"", "index"}, method = RequestMethod.GET)

public ModelAndView index() {

ModelAndView modelAndView = new ModelAndView("index");

Map map = new HashMap<>();

map.put("datetime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));

modelAndView.addAllObjects(map);

return modelAndView;

}

}

MVC容器中的自动扫描可以扫描到带有@Controller注解的类,Controller类进行业务的处理和数据的访问,例如这个类中有数据访问层的对象,还有类中的一些数据。这个类的返回值为ModelAndView,进行数据处理后返回数据和视图给前端控制器

前端控制器可以通过修改RequestMapping注解中的Value值来改变数据最终反馈到的视图

5、创建一个视图

Spring MVC 当前时间:${datetime}

、        视图可以提取模型中的数据,例如:这个界面可以提取出模型中的datetime的值

最终呈现给用户的界面

示例很简单,作为简单的练习

有关MVC的概念先总结到这里,仅供个人学习使用

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。