spring MVC体系结构和请求控制器
MVC处理过程
spring MVC架构模式都进行了分层设计如下
- 数据访问接口:DAO层
- 处理业务逻辑层:service层
- 数据实体:POJO
- 负责前端请求的接受并处理:servlet
- 负责前端页面展示:JSP
这种框架就是MVC设计模式,它是软件工程中的一种软件架构模式。它强制性地使软件系统的输入,处理和输出分开,把软件系统分为基本三个部分:
- 模型(model):模型对象拥有最多的处理任务,是应用程序的主题部分,它负责数据逻辑(业务规则)的处理和实现数据操作(即在数据库中存取数据)。对应组件:JavaBean
- 视图(view):负责格式化数据并把它们呈现给用户,包括数据展示,用户交互,数据验证,界面设计等功能。对应组件:JSP或者HTML文件
- 控制器(controller) :负责接收并转发请求,对请求进行处理指派视图并将响应结果发送到客户端。对应组件:servlet
MVC的优缺点
- 优点
- 多视图共享一个模型,大大提高代码的可重用性
- MVC三个模块相互独立,松耦合架构
- 控制器提高了应用程序的灵活和可配置性
- 有利于软件工程化管理
- 缺点
- 原理复杂
- 增加了系统结构和实现的复杂性
- 视图对模型数据的低效率访问
对于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后,搭建步骤如下:
- 引入jar文件
- spring MVC配置:
- 在web.xml中配置servlet,定义DispatcherServlet
- 创建Spring MVC的配置文件
- 创建controller(处理请求的控制器)
- 创建view
- 部署运行
所需的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体系结构和请求控制器的更多相关文章
- Spring MVC体系结构和处理请求控制器
Spring MVC体系结构和处理请求控制器 一:MVC设计模式: (1.)数据访问接口:DAO层 (2.)处理业务逻辑层:Service层 (3.)数据实体:POJO (4.)负责前段请求接受并处理 ...
- Spring MVC的映射请求
一.SpringMVC常用注解 @Controller 声明Action组件 @Service 声明Service组件 @Service("myMovieLister" ...
- Spring MVC 处理一个请求的流程分析
Spring MVC是Spring系列框架中使用频率最高的部分.不管是Spring Boot还是传统的Spring项目,只要是Web项目都会使用到Spring MVC部分.因此程序员一定要熟练掌握MV ...
- Spring MVC中forward请求转发2种方式(带参数)
Spring MVC中forward请求转发2种方式(带参数) http://www.51gjie.com/javaweb/956.html
- spring mvc 文件下载 get请求解决中文乱码问题
方案简写,自己或有些基础的可以看懂,因为没时间写的那么详细 方案1 spring mvc解决get请求中文乱码问题, 在tamcat中server.xml文件 URIEncoding="UT ...
- Spring MVC 异步处理请求,提高程序性能
原文:http://blog.csdn.net/he90227/article/details/52262163 什么是异步模式 如何在Spring MVC中使用异步提高性能? 一个普通 Servle ...
- Spring mvc 启动 和 请求分发
Spring mvc 启动 和 请求分发 启动加载: abstract class HttpServletBean extends HttpServlet void init() initServle ...
- Spring MVC 接受的请求参数
目录 1. 概述 2. 详解 2.1 处理查询参数 2.2 处理路径参数接受输入 2.3 处理表单 3. 补充内容 3.1 Ajax/JSON 输入 3.2 multipart参数 3.3 接收 he ...
- spring MVC之注解开发控制器(二)
开发表单控制器 在传统的Spring MVC开发方法中,是通过扩展SimpleFormController类来创建简单的表单控制器.这样就定义了基本的表单处理流程,并允许通过覆盖几个生命周期方法来定制 ...
随机推荐
- Oracle存储函数jdbc调用
package com.jckb.procedure; import java.sql.CallableStatement; import java.sql.Connection; import ja ...
- 《C#高效编程》读书笔记09-避免在API中使用转换操作符
转换操作符为类之间引入了一种"可替换性"(substitutability)."可替换性"表示一个类的实例可以替换为另一个类的实例. public class ...
- 内容显示分页数字分页 aspx
此处是aspx里面分页显示,数据层和业务层是由动软生成 当然,我们也可以可以利用listView实现分页ListView(高效分页) public partial class NewList : Sy ...
- 抓包工具wireshark的使用--过滤语句
鲨鱼鳍的图标 抓包很方便
- 锁丶threading.local丶线程池丶生产者消费者模型
一丶锁 线程安全: 线程安全能够保证多个线程同时执行时程序依旧运行正确, 而且要保证对于共享的数据,可以由多个线程存取,但是同一时刻只能有一个线程进行存取. import threading v = ...
- 【干货】JavaScript DOM编程艺术学习笔记10-12【完】
十.用JavaScript实现动画效果 鼠标放到链接上,每次只显示图片的一小部分,加快加载速度. js: function prepareSlideshow(){ //对象检测 if(!documen ...
- git reset命令学习
我们在使用git进行版本管理的时候,如果遇到需要回退代码的情况,一般会用 git reset 命令,不过这个命令还有几个参数,这篇文章就来详解一下. 先来了解一下 git 大致的工作流程,配合这张图会 ...
- 编译出freeswitch的java调用的 jar和so
假设freeswitch 源码路径为 /usr/local/src/freeswitch 1. cd /usr/local/src/freeswitch(源代码的根目录) 执行./configure, ...
- zip man man.config
zip man man.config zip -r zip1 man.config man.zip gzip a tar -cvf test.tar /home/* tar -tf test.tar ...
- 如何修改HDFS上文件
如果只想append操作: . echo "<Text to append>" | hdfs dfs -appendToFile - yourHdfsPath/test ...