博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC解析1-使用示例
阅读量:5946 次
发布时间:2019-06-19

本文共 4868 字,大约阅读时间需要 16 分钟。

Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。Spring的MVC是基于servlet功能实现的,通过实现Servlet接口的DispatchSerlver来封装其核心功能实现,通过将请求分派给处理程序,同时带有可配置的处理程序映射,视图解析,本地语言,主题解析以及上载文件支持。默认的处理程序是非常简单的Controller接口,只有一个方法ModelAndView handleRequest(request,response)。Spring提供了一个控制器层次结构,可以派生子类。如果应用程序需要处理用户输入表单,可以继承AbstractFormController。如果需要把多页输入处理到一个表单,那么可以继承AbstractWizardFromController.

SpringMVC或者其他比较成熟的MVC框架而言,解决的问题无外乎三点:

  1. 将web页面的请求传给服务器。
  2. 根据不同的请求处理不同的逻辑单元
  3. 返回处理结果数据并跳转至响应的页面。

在springmvc流程:

  • 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
  • DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;HandlerMapping主要是负责将方法映射到我们需要的@Controller上面。
  • DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;HanderAdapter主要是讲我们的方法注解应用到@RequestMapping 上面,通过HandlerMapping注解的Controller与HandlerAdapter注解的“.wap、.do等方法上我们找到要执行的是哪个方法。”
  • HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
  • ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;
  • View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map,因此很容易支持其他视图技术;
  • 返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

配置web.xml

一个web中可以没有web.xml文件,也就是说web.xml不是web工程必须的。web.xml文件用来初始化配置信息:比如Welcom页面,servlet,servlet-mapping,filter,listener,启动加载级别等。但是,SpringMVC的实现原理是通过servlet拦截所有URL来达到控制的目的,所以web.xml是必须的。

contextConfigLocation
/WEB-INF/springmvc-servlet.xml, classpath:applicationContext-*.xml
springmvc
org.springframework.web.servlet.DispatcherServlet
1
springmvc
*.htm
org.springframework.web.context.ContextLoaderListener
index.jsp

SpringMVC的配置文件springmvc-servlet.xml

userController
userController

Spring配置文件applicationContext-view.xml

首页index.jsp

响应请求结果的userlist.jsp

<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

Welcome to my SpringMVC demo page

User.java

public class User {    private String username;    private String password;    private String address;    private Integer age;    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }}

SpringMVC的核心控制器UserController.java

public class UserController extends AbstractController {    @Override    protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {        List
userList = new ArrayList
(); User user11 = new User(); User user22 = new User(); user11.setUsername("张起灵"); user11.setPassword("02200059"); user11.setAddress("阴山古楼"); user11.setAge(27); user22.setUsername("吴三省"); user22.setPassword("95000220"); user22.setAddress("蛇沼鬼城"); user22.setAge(37); userList.add(user11); userList.add(user22); //ModelAndView类在SpringMVC中是一个很重要的概念 //控制器执行方法都必须返回一个ModelAndView,ModelAndView对象保存了视图以及视图显示的模型数据 //第一个参数:视图组件的逻辑名称。这里视图的逻辑名称是userlist,视图解析器会使用该名称查找实际的View对象 //第二个参数:传递给视图的模型对象的名称 //第三个参数:传递给视图的模型对象的值 return new ModelAndView("userlist", "users", userList); }}

 

转载地址:http://zfdxx.baihongyu.com/

你可能感兴趣的文章
异常处理汇总 ~ 修正果带着你的Code飞奔吧!
查看>>
Java开发手冊 Java学习手冊教程(MtJava开发手冊)
查看>>
The Willpower Instinct
查看>>
注入复习总结
查看>>
OpenStack 部署总结之:单节点icehouse网桥的配置
查看>>
js---12数据类型,数据类型转换,NaN,
查看>>
C字符串处理函数
查看>>
超短reads(primer、barcode、UMI、index等)比对方法
查看>>
lua正则表达式如何匹配中文
查看>>
arcgis api for js热力图优化篇-不依赖地图服务
查看>>
php逻辑操作符中&和&&的异同
查看>>
Git 远程仓库(分布式版本控制系统)
查看>>
设计模式原则之里氏替换原则
查看>>
LeetCode: Longest Common Prefix 解题报告
查看>>
Multipart polyline to single part lines
查看>>
zeromq_传说中最快的消息队列
查看>>
ARM的栈指令
查看>>
两个tomcat一起启动
查看>>
javax.imageio.IIOException: Unsupported Image Type
查看>>
Oracle DBA之监听的静态注册与动态注册
查看>>