MVC处理过程

spring MVC架构模式都进行了分层设计如下

  • 数据访问接口:DAO层
  • 处理业务逻辑层:service层
  • 数据实体:POJO
  • 负责前端请求的接受并处理:servlet
  • 负责前端页面展示:JSP

  这种框架就是MVC设计模式,它是软件工程中的一种软件架构模式。它强制性地使软件系统的输入,处理和输出分开,把软件系统分为基本三个部分:

  1. 模型(model):模型对象拥有最多的处理任务,是应用程序的主题部分,它负责数据逻辑(业务规则)的处理和实现数据操作(即在数据库中存取数据)。对应组件:JavaBean
  2. 视图(view):负责格式化数据并把它们呈现给用户,包括数据展示,用户交互,数据验证,界面设计等功能。对应组件:JSP或者HTML文件
  3. 控制器(controller) :负责接收并转发请求,对请求进行处理指派视图并将响应结果发送到客户端。对应组件:servlet

MVC的优缺点

  1. 优点
    1. 多视图共享一个模型,大大提高代码的可重用性
    2. MVC三个模块相互独立,松耦合架构
    3. 控制器提高了应用程序的灵活和可配置性
    4. 有利于软件工程化管理
  2. 缺点
    1. 原理复杂
    2. 增加了系统结构和实现的复杂性
    3. 视图对模型数据的低效率访问

  对于MVC来说,它并不适合小型甚至中型规模的项目,花费大量时间将MVC应用到规模并不是很大的应用程序通常得不偿失,所以要根据应用场景来决定

总之,MVC的设计模式最终可以打造出一个松耦合+高重用性+高可适用性的完美架构,当然这也是架构设计的目标之一。

spring MVC框架介绍

spring MVC是spring中用于web应用开发的一个模块,是spring提供额一个基于mvc设计模式的优秀web开发框架,它本质上相当于servlet。在MVC设计模式中

spring MVC作为控制器来建立模型与视图的数据交互,可称为一个典型的MVC框架,如下图

  在spring mvc 框架中,controller替换servlet来负责控制器的职责,controller接受请求,调用相应的model进行处理,处理器完成业务处理后返回处理结果。

controller调用相应的view并对处理进行视图渲染,最终客户端得到响应消息。由于spring mvc的结构较为复杂,上述只是对其框架结构的一个简单介绍。下面

我们将搭建spring mvc环境,并实现简单的例子来体验spring mvc是如何使用的。

spring MVC环境搭建

在新建web Project后,搭建步骤如下:

  1. 引入jar文件
  2. spring MVC配置:
    1. 在web.xml中配置servlet,定义DispatcherServlet
    2. 创建Spring MVC的配置文件
  3. 创建controller(处理请求的控制器)
  4. 创建view
  5. 部署运行

所需的jar文件如图(log4J可以无视):

web.xml中配置servlet

  Spring MVC是基于servlet的,dispatcherServlet是整个spring mvc框架的核心,它负责截获请求并将其分派给相应的处理器处理,那么必须配置时,

首先就要进行dispatcherServlet的配置,web.xml中配置关键代码如下:

 <!-- 配置spring mvc的核心控制器DispatcherServlet  -->
<servlet>
<servlet-name>srpingmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 初始化参数通过 DipatcherServlet 获取到初始化参数 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>srpingmvc</servlet-name>
<!-- 注意这里我这里是懒得改了,此拦截路径最好不要使用 / 因为它会把所有请求拦截 最好是 *.啥 比如:*.do 就会拦截以 .do结尾的请求 -->
<url-pattern>/</url-pattern>
</servlet-mapping>

注意最好避免使用 / 如果使用那么很有可能你在引用外部文件的时候会出问题 如下

这个请求会被拦截导致404从而使用不了js,但是路径又没问题。所以注意了 最好避免使用  /

创建sprig MVC配置文件

<?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:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!-- 配置映射 自动扫描 cn包下面所有控制器(包括子包) -->
<context:component-scan base-package="cn.controller"></context:component-scan>
<!-- 与返回出的值添加 前后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>

创建控制器

package cn.controller;

import java.util.Map;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView; @Controller
@RequestMapping("/user") //要求路径前必须加上 user 比如要求路径是 index就需要写成 user/index
public class IndexController {
private Logger logger = Logger.getLogger(IndexController.class);
//表示方法与那个请求URL对应(此处:”/index“)
@RequestMapping("/index")
public String index() {
logger.info("hello,springMVC!");
return "index";
} }

测试运行

在web-INF下面建立一个index.jsp页面(直接运行会404),在浏览器中输入 http://localhost:8080/SpringMVC/user/index.html 即可

参数传递

那么如果要传入参数又该如何呢?只需添加上参数即可如下

@RequestMapping("/index")
public String index(String name) {
logger.info("hello,springMVC!:"+name);
return "index";
}

传入的名称需要与参数名称相同如下

如果直接使用get方法进行访问那么获取 index()方法获取的中文将会是乱码。也可以指定访问方式如下

@RequestMapping(value= {"/index"},method=RequestMethod.POST)
public String index(String name) {
logger.info("hello,springMVC!:"+name);
return "index";
}

访问结果如下说不能使用get方式进行访问

参数的类型有很多,如果你想使用某个sqlsession,或者request都可以添加进去,当然这些参数不需要手动的传入。

那么接受的参数又如何传递给页面呢?如下添加Model

  @RequestMapping(value= {"/index"})
public String index(String name,Model model) {
logger.info("hello,springMVC!:"+name);
name="张三";
//保存 数据
model.addAttribute("name", name);
return "index";
}

jsp页面代码如下

<body>
<h1>hell springMVC</h1>
<h1>userName-->${name}</h1>
</body>

如果需要传递的参数对象呢?如下

@RequestMapping(value= {"/index"})
public String index(String name,Map<String, User> uList,Model model) {
logger.info("hello,springMVC!:"+name);
name="张三";
User u = new User();
u.setName("二狗子");
//保存 数据
model.addAttribute("name", name);
model.addAttribute("username", u);
model.addAttribute(u); //如果不给名称 默认访问名称为 user
uList.put("u", u);
return "index";
}

页面代码

<body>
<h1>hell springMVC</h1>
<h1>usernameName-->${username.name}</h1>
<h1>mapU-->${u.name}</h1>
<h1>User-->${user.name}</h1>
</body>

如果还是不会可以去网盘下载我演示的项目:

链接:https://pan.baidu.com/s/1oYjZW0fpqXKcI3WXfIezxA
提取码:fdle

不会导入项目的可以去这里:https://www.cnblogs.com/hfx123/p/9745826.html

spring MVC体系结构和请求控制器的更多相关文章

  1. Spring MVC体系结构和处理请求控制器

    Spring MVC体系结构和处理请求控制器 一:MVC设计模式: (1.)数据访问接口:DAO层 (2.)处理业务逻辑层:Service层 (3.)数据实体:POJO (4.)负责前段请求接受并处理 ...

  2. Spring MVC的映射请求

    一.SpringMVC常用注解 @Controller 声明Action组件 @Service    声明Service组件    @Service("myMovieLister" ...

  3. Spring MVC 处理一个请求的流程分析

    Spring MVC是Spring系列框架中使用频率最高的部分.不管是Spring Boot还是传统的Spring项目,只要是Web项目都会使用到Spring MVC部分.因此程序员一定要熟练掌握MV ...

  4. Spring MVC中forward请求转发2种方式(带参数)

    Spring MVC中forward请求转发2种方式(带参数) http://www.51gjie.com/javaweb/956.html  

  5. spring mvc 文件下载 get请求解决中文乱码问题

    方案简写,自己或有些基础的可以看懂,因为没时间写的那么详细 方案1 spring mvc解决get请求中文乱码问题, 在tamcat中server.xml文件 URIEncoding="UT ...

  6. Spring MVC 异步处理请求,提高程序性能

    原文:http://blog.csdn.net/he90227/article/details/52262163 什么是异步模式 如何在Spring MVC中使用异步提高性能? 一个普通 Servle ...

  7. Spring mvc 启动 和 请求分发

    Spring mvc 启动 和 请求分发 启动加载: abstract class HttpServletBean extends HttpServlet void init() initServle ...

  8. Spring MVC 接受的请求参数

    目录 1. 概述 2. 详解 2.1 处理查询参数 2.2 处理路径参数接受输入 2.3 处理表单 3. 补充内容 3.1 Ajax/JSON 输入 3.2 multipart参数 3.3 接收 he ...

  9. spring MVC之注解开发控制器(二)

    开发表单控制器 在传统的Spring MVC开发方法中,是通过扩展SimpleFormController类来创建简单的表单控制器.这样就定义了基本的表单处理流程,并允许通过覆盖几个生命周期方法来定制 ...

随机推荐

  1. 新手常见Python运行时错误

    经过整理与在实际中遇到的问题,将新手经常遇到的汇总下,以便自己犯傻又这么干了 1)"SyntaxError :invalid syntax",语法错误 A.查看是否在 if , e ...

  2. JD孔_20160901

    1.买的 “[京东超市]GL格朗 耳温枪/电子体温计/温度计/耳温计EW-2”  http://item.jd.com/385507.html 2.

  3. leetcode--Learn one iterative inorder traversal, apply it to multiple tree questions (Java Solution)

    will show you all how to tackle various tree questions using iterative inorder traversal. First one ...

  4. js中的focus()聚焦

    document.getElementById("vin").focus();document.form1.name.focus() $(document).ready(funct ...

  5. json数据前台解析 修改check属性用prop()

    jQuery中的$.getJSON( )方法函数主要用来从服务器加载json编码的数据,它使用的是GET HTTP请求.使用方法如下: $.getJSON( url [, data ] [, succ ...

  6. Storm概念学习系列之storm核心组件

    不多说,直接上干货! Storm核心组件 了解 Storm 的核心组件对于理解 Storm 原理非常重要,下面介绍 Storm 的整体,然后介绍 Storm 的核心. Storm 集群由一个主节点和多 ...

  7. 《疯狂动物城》主题曲《TryEverything》中文翻译

    <疯狂动物城>主题曲<TryEverything>夏奇拉激情献唱,很多事情是需要是试试,不试试就不知道可以成功. Oh oh oh oh oooh 哦哦哦哦哦 Oh oh oh ...

  8. jquery 的extend的方法

    用flot.js  用到了jquery的extend 方法 关于extend方法 我就照手册打一遍,加深一下理解,说实话其实我理解的也不透 extend  用一个或多个其他对象来扩展一个对象,返回被扩 ...

  9. 美团Java面试154道题

    Java集合22题 ArrayList 和 Vector 的区别.ArrayList与Vector区别 说说 ArrayList,Vector, LinkedList 的存储性能和特性.ArrayLi ...

  10. iOS JS 交互之利用系统JSContext实现 JS调用OC方法以及Objective-C调用JavaScript方法

    ios js 交互分为两块: 1.oc调用js 这一块实现起来比较简单, 我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择拷贝到工程中,(拖入的文件夹是蓝色 ...