1.Spring MVC 的工作流程

1.web请求被 前端控制器(DispatcherServlet)拦截

2.DispatcherServlet调用 映射处理器(HandelerMapping)查找页面 处理器(Handler),HandlerMapping向DispatcherServlet返回Handler。HandlerMapping把web请求映射为HandlerExecutionChain对象,它包含了一个Handler处理器对象和多个 拦截器(HandlerInterceptor)对象
3.DispatcherServlert调用 处理适配器(HandlerAdapter)去执行Handler

4.HandlerAdapter会根据适配器的结果去执行Handler,Handler执行完成后适配器返回ModelAndView,HandlerAdapter向DispatcherServlert返回ModelAndView.

5.DispatcherServlet调用 视图解析器(ViewResolver)进行视图解析,它根据逻辑视图名解析成JSP,ViewResolver向DispatcherServlet返回View.

6.DiapatcherServlet进行视图渲染
7.DispatcherServlet向用户返回响应结果

2.第一个SpringMVC程序

1.准备jar包(有些包为后续作准备)

2.项目结构(不要在意项目名和包名,咳咳,注意创建的是web项目)

3.web.xml文件

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>SpringMVC</display-name>
<!-- 配置前端控制器 -->
<servlet>
<servlet-name>article6</servlet-name>
<!-- 配置SpringMVC前端控制器 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载Spring的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param> </servlet>
<!-- 由DispatcherServlet拦截前缀为url的路径 -->
<servlet-mapping>
<servlet-name>article6</servlet-name>
<url-pattern>/url/*</url-pattern>
</servlet-mapping> </web-app>

4.springmvc-servlet.xml(地址前缀记得加上url/才能拦截处理)

 <?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
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"> <!-- 1默认方式 BeanNameUrlHandlerMapping 访问路径为http://localhost:8080/mmm/student.html-->
<!-- <bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> -->
<!-- <bean id="studentController" name="/student.html" class="com.article6.example1.StudentController"></bean> --> <!-- 2使用类名 studentController作为访问路径 第一个字母小写 访问路径为http://localhost:8080/mmm/studentController-->
<!-- <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>
<bean id="studentController" class="com.article6.example1.StudentController"></bean> --> <!-- 3 SimpleUrlHandlerMapping 分离URL和bean -->
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- 定义路径 测试3用 访问路径为http://localhost:8080/mmm/student.html-->
<!-- <prop key="/student.html">studentController</prop> --> <!-- 多功能控制器 http://localhost:8080/mmm/url/student/addStudent-->
<prop key="/student/*">studentController1</prop>
</props>
</property>
</bean>
<!-- 测试多功能控制器-->
<bean id="studentController1" class="com.article6.example1.StudentController1"></bean> <!-- 测试3用 -->
<!-- <bean id="studentController" class="com.article6.example1.StudentController"></bean> --> <!-- 完成视图的对应 -->
<!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean> </beans>

5.StudentController.java(测试三种映射处理器(对应配置文件中三种方式)         HandlerMapping用于管理URL和controller之间的映射关系)

 package com.article6.example1;

 import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller; public class StudentController implements Controller{ //默认 把bean的name的属性作URL使用
// @Override
// public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
// ModelAndView view=new ModelAndView();
// view.addObject("msg","第一个SpringMVC程序");//传递的值
// view.setViewName("/example1/StudentResult");//视图名,最后.xml文件中视图解析器会拼接此地址
// return view;
// } //类名映射控制器
// @Override
// public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
// ModelAndView view=new ModelAndView();
// view.addObject("msg","类名映射控制器");
// view.setViewName("/example1/StudentResult");
// return view;
// } //SimpleUrlHandlerMapping简单的URL映射控制器,可以把URL和bean的映射关系分开
@Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
ModelAndView view=new ModelAndView();
view.addObject("msg","SimpleUrlHandlerMapping映射控制器");
view.setViewName("/example1/StudentResult");
return view;
}
}

6.StudentController1.java(多功能控制器  测试类  通过方法名访问       解决针对每一个URL请求编写对应的控制器显得太繁琐 )

 package com.article6.example1;

 import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController; /** 多功能控制器
* @author wt
* @data:2018年4月12日 下午7:34:53
*/
public class StudentController1 extends MultiActionController{ public ModelAndView addStudent(HttpServletRequest arg0, HttpServletResponse arg1){
ModelAndView mav=new ModelAndView();
mav.addObject("msg","addStudent()");
mav.setViewName("/example1/StudentResult");
return mav;
}
public ModelAndView updateStudent(HttpServletRequest arg0, HttpServletResponse arg1){
ModelAndView mav=new ModelAndView();
mav.addObject("msg","updateStudent()");
mav.setViewName("/example1/StudentResult");
return mav;
}
public ModelAndView delStudent(HttpServletRequest arg0, HttpServletResponse arg1){
ModelAndView mav=new ModelAndView();
mav.addObject("msg","delStudent()");
mav.setViewName("/example1/StudentResult");
return mav;
}
public ModelAndView queryStudent(HttpServletRequest arg0, HttpServletResponse arg1){
ModelAndView mav=new ModelAndView();
mav.addObject("msg","queryStudent()");
mav.setViewName("/example1/StudentResult");
return mav;
}
}

多功能控制器的结果

7.StudentResult.jsp(最终访问的页面,获取msg    因为是通过转发,所以地址栏地址显示第一次访问地址

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=request.getAttribute("msg")%>
</body>
</html>

这里显得很繁琐,最终我们可以使用注解驱动SpringMVC就简单多了。。。下期再做介绍。

初识 SpringMVC的更多相关文章

  1. 初识SpringMvc

    初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...

  2. SpringMVC学习系列(1) 之 初识SpringMVC

    1.前言: 与SpringMVC的结识源于个人之前想做一个微信公众账号的管理平台玩玩,既然要做就需要考虑平台的选择问题.由于我的朋友只有一台运行了Linux系统的虚拟主机,且上面还运行有他自己的一些论 ...

  3. springMVC学习笔记--初识springMVC

    前一段时间由于项目的需要,接触了springMVC(这里主要是讲3.1版,以下内容也是围绕这个版本展开),发觉其MVC模式真的很强大,也简单易用,完全是基于注解实现其优雅的路径配置的.想想以前接手的项 ...

  4. [一]初识SpringMVC

    是什么? web开发框架 为什么用? 功能强大 怎么做? 1.导入jar包 2.配置web.xml <?xml version="1.0" encoding="UT ...

  5. SpringMVC基础学习(一)—初识SpringMVC

    一.HelloWorld 1.导入SpringMVC所需的jar包        2.配置web.xml      配置DispatcherServlet.DispatcherServlet默认加载/ ...

  6. springMvc入门--初识springMvc

    springMvc是什么 springmvc是表现层的框架,是一个spring的表现层组件.是整个spring框架的一部分,但是也可以不使用springmvc.跟struts2框架功能类似.其中的mv ...

  7. 1.1(Spring MVC学习笔记)初识SpringMVC及SpringMVC流程

    一.Spring MVC Spring MVC是Spring提供的一个实现了web MVC设计模式的轻量级Web框架. Spring优点:网上有,此处不复述. 二.第一个Spring MVC 2.1首 ...

  8. 1.SpringMvc--初识springmvc

    引自@精品唯居 springMvc是什么 springmvc是表现层的框架,是一个spring的表现层组件.是整个spring框架的一部分,但是也可以不使用springmvc.跟struts2框架功能 ...

  9. Spring工作原理:初识SpringMVC

    1.SpringMVC简介 SpringMVC是Spring框架的一个模块.SpringMVC和Spring无需通过中间层进行整合.是一个轻量级的,基于请求响应的MVC框架. 2.1.什么是MVC? ...

随机推荐

  1. Linux(CentOS 7)环境下安装MySQL

    在CentOS中默认安装有MariaDB,但是我们需要的是MySQL,安装MySQL可以覆盖MariaDB MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 ...

  2. [ZJOI2007] 矩阵游戏

    Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两 ...

  3. JDK1.8源码(四)——java.util.Arrays 类

    java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 1.asList public static ...

  4. ArrayList 源码分析

    ArrayList 源码分析 1. 结构   首先我们需要对 ArrayList 有一个大致的了解就从结构来看看吧. 1. 继承   该类继承自 AbstractList 这个比较好说 2. 实现 这 ...

  5. 【Python】 hash值计算 hashlib & hmac

    hashlib & hmac *不是很清楚能不能把这种hash值取样算法称之为加密,但是似乎好像也是这么说的哈(非科班出身的野路子就是没这种基本知识的) ■ 基本用法 hashlib支持MD5 ...

  6. .NET Core快速入门教程 5、使用VS Code进行C#代码调试的技巧

    一.前言 为什么要调试代码?通过调试可以让我们了解代码运行过程中的代码执行信息,比如变量的值等等.通常调试代码是为了方便我们发现代码中的bug.ken.io觉得熟练代码调试技巧是成为合格程序员的基本要 ...

  7. 深入理解Android中View

    文章目录   [隐藏] 一.View是什么? 二.View创建的一个概述: 三.View的标志(Flag)系统 四.MeasureSpec 五.几个重要方法简介 5.1 onFinishInflate ...

  8. ListView属性及divider设置分割线

    给ListView设置分割线,只需设置如下两个属性: android:divider="#000" //设置分割线显示颜色 android:dividerHeight=" ...

  9. 阿里聚安全·安全周刊】一种秘密窃取数据的新型 Android 木马|iOS 11相机惊现BUG

    本周的七个关键词:  新型 Android 木马丨 TLS 1.3 丨  阿里安全图灵实验室 丨 漏洞感染 Linux 服务器 丨 CPU曝极危漏洞 丨   iOS 11相机BUG 丨R2D2技术 - ...

  10. 去除input的自动填充色

    input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px #ffffff inset !important; }