SpringMVC学习笔记(一): 基础知识

一、Spring-MVC简介

(一)Spring-mvc的流程

(二)主要结构:红色需要自己实现。

1、DispatcherServlet:中央控制器。

1)把请求给转发到具体的控制类(即具体的Controller)。

2)需要在web.xml 中配置,类似于struts2需要配置的 StrutsPrepareAndExecuteFilter 。

2、Controller:具体处理请求的控制器。

1)类似于struts2的action ,处理具体请求与返回的信息。

2)日常功能都在Controller 中处理。可以使用xml实现(继承AbstractController),或者直接使用注解(@Controller )。

3、handlerMapping:映射处理器。

1)负责映射中央处理器转发给 Controller时的映射策略,即DispatcherServlet按什么规则去寻找需要访问的Controller。需要在spring-mvc的配置文件中配置。

2)主要有三种类型,分别为为按Controller控制器的名称、类型和简单url隐射。默认为按Controller的名称(可省略),并且可以配置多种类型,多种类型之间不会冲突。

4、ModelAndView:服务层返回的数据和视图层的封装类。

1)用来封装 Controller 需要访问的视图(view)和传输的数据(model),一般在控制器Controller  中自己实现处理。

5、ViewResolver & View:视图解析器,解析具体的视图。一般为配置为 InternalResourceViewResolver 类。

1)定义视图解析的规则,即Controller 按照怎样的规则去访问视图。

2)需要在spring-mvc的配置文件中配置,一般分为前缀与后缀。前缀:webroot到某一指定的文件夹的路径;后缀:视图名称的后缀。然后和 ModelAndView 中的view结合使用,确认具体的访问视图。

3)如访问控制器Controller 需要访问 /WEB-INF/jsp/Hello.jsp文件视图,则配置为

<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;">		<!-- 前缀+ viewName +后缀 -->
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			<!-- 前缀:webroot到某一指定的文件夹的路径 -->
			<property name="prefix" value="/WEB-INF/jsp/"></property>
			<!-- 后缀:视图名称的后缀 -->
			<property name="suffix" value=".jsp"></property>
		</bean>
</span></span>

在控制器(Controller )中的ModelAndView的view可以定为 Hello 。即可成功让Controller 访问到 /WEB-INF/jsp/Hello.jsp视图。

6、Interceptors :拦截器,负责拦截我们定义的请求然后做处理工作。

1、spring-mvc的配置文件中 ,需要实现 HandlerInterceptor 接口。

2、可以实现三个方法,分别代表三个不同时机执行。

(二)需要的jar包

二、SpringMVC的实现

(一)创建spring-mvc的配置文件

1、配置中央控制器:DispatcherServlet。在web.xml中配置

2、创建spring-mvc的核心配置文件

1)文件的命名规则:中央控制器(servlet的名称)的名称+“-servlet.xml”。如 springmvc-servlet.xml ,默认位置:在WEB-INF 下,不能修改位置。

2)使用初始化参数 init-param ,灵活定义核心配置如定义配置文件位于:classpath:springmvc_annotation.xml

<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;"><span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;">	<!-- 中央控制器 这边的name 需要与配置文件的名字保持一致-->
	<!-- 使用初始化参数,灵活定义核心配置 -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<!-- <param-value>classpath:springmvc_xml.xml</param-value> -->
			<param-value>classpath:springmvc_annotation.xml</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<!-- struts习惯使用/*,在springmvc不管用 -->
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
</span></span></span></span>

(二)配置spring-mvc核心配置文件。

1、控制器:Controller 。xml方式需要,注解不需要。

2、映射处理器-handlerMapping 。可以同时配置多个映射处理器,他们之间是独立的,不相互影响。

1)按 Controller 名称映射,默认的配置,可以省略。

<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;">		<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
</span></span>

2)简单url的映射处理器

<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;">		<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
			<property name="mappings">
				<props>
					<prop key="/hello.do">firstController</prop>
				</props>
			</property>
		</bean>
</span></span>

3)控制器的类名映射处理器

<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;">		<!-- 控制器的类名映射处理器  如firstController.do-->
		<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>
</span></span>

3、ViewResolver(视图解析器):

<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;">		<!-- 配置视图解析器 -->
		<!-- 前缀+ viewName +后缀 -->
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			<!-- 前缀:WebContent到某一指定的文件夹的路径 -->
			<property name="prefix" value="/WEB-INF/jsp/"></property>
			<!-- 后缀:视图名称的后缀 -->
			<property name="suffix" value=".jsp"></property>
		</bean>
</span></span>

(二)XML配置实现:

1、核心配置文件:classpath:springmvc_xml.xml

2、需要的配置:controller(控制器),handlerMapping(映射处理器),ViewResolver(视图解析器)。

3、Controller (控制器):配置了一个name=hello.do的Controller(类似于struts的action)

<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;"><span style="font-size:18px;">	<bean id="firstController" name="/hello.do"
		class="com.springmvc.xml.controller.FirstController">
	</bean>
</span></span></span>

2、控制器FirstController 代码实现 。

<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;"><span style="font-size:18px;">package com.springmvc.xml.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
/**
 *
 * @Title: 第一个springmvc的 Controller
 * @Description:
 * @Copyright: Copyright (c) 2015
 * @Company:
 *
 * @author: SAM-SHO
 * @version: 1.0
 * @CreateDate:Jan 22, 2015
 */
public class FirstController extends AbstractController {

	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		System.out.println("hello springmvc");
		//这边是前缀与后缀之间的路径,即访问 /WEB-INF/jsp/myJsp.jsp
		return new ModelAndView("myJsp");
	}

}</span></span></span>

1)继承自AbstractController类,实现handleRequestInternal()方法。

2)返回 ModelAndView 对象。

3)myJsp:是和配置好的 视图解析器 同时使用的。前置(/WEB-INF/jsp/)+ myJsp +后置(.jsp)

3、访问实现:

1)http://localhost:8080/JavaSpringMvc/hello.do。即可简单实现springmvc的访问。

(三)注解实现

1、核心配置文件:classpath:springmvc_annotation.xml

2、需要的配置:注解驱动,自动扫描、handlerMapping(映射处理器),ViewResolver(视图解析器)。

3、配置注解驱动与自动扫描。

<span style="font-size:18px;">		<!-- mvc的注解驱动 -->
		<mvc:annotation-driven/>
		<!-- 一旦有扫描器的定义mvc:annotation-driven不需要,扫描器已经有了注解驱动的功能 -->
		<context:component-scan base-package="com.springmvc.annotation"/>
</span>

4、控制器 AnnotationController 代码:@Controller 和 @RequestMapping

<span style="font-size:18px;">@Controller
@RequestMapping(value="/annotationController")
public class AnnotationController {

	/**
	 * 注解实现的Controller
	 * 1、value:一般为方法名
	 * 2、方法的返回值,代表ModelAndView中的 view
	 * @return
	 */
	@RequestMapping(value="/firstController.do",method=RequestMethod.GET)
	public String firstController() {
		System.out.println("使用注解开发springmvc,hello,springmvc");

		return "myJsp"; //和配置的 “视图解析器” 结合为 /WEB-INF/jsp/myJsp.jsp
	}
}</span>

1)@Controller:控制器注解。用过spring都知道。

2)@RequestMapping(value="/annotationController"): 访问路径,类似于package的功能,用于映射处理器区分不同的控制器。

①、value:表示需要匹配的url的格式。

②、 method:表示所需处理请求的http
协议(如get,post,put,delete等),可选值为RequestMethod这个enum的值。

③、params:格式为”paramname=paramvalue” 或 “paramname!=paramvalue”。不带参数则表示paramvalue可以为任意值。如params
=  {"param1=1","param2!=2","param3"},表示对应的url必须包括param1,param2,param3三个参数,其中param1的值必须为1,param2的值不能为2,param3的值可以为任意值。

④、 headers:用来限定对应的reqeust请求的headers中必须包括的内容,例如

headers={"Connection=keep-alive"}, 表示请求头中的connection的值必须为keep-alive。

5、访问:http://localhost:8080/JavaSpringMvc/annotationController/firstController.do。需要加入类级别的@RequestMapping +  方法级别的@RequestMapping

时间: 2024-10-25 02:50:08

SpringMVC学习笔记(一): 基础知识的相关文章

C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字节的值,该如何在它上面调用方法? 二:值类型转换为引用类型--装箱 2.1CLR对值类型进行装箱时:新分配托管堆内存,将值类型的实例字段拷贝到新分配的内存中,返回托管堆中新分配对象的地址.这个地址就是一个指向对象的引用. int i = 10; Object obj = i; 三:将引用类型转换为值

[Golong]学习笔记(一) 基础知识

Go编程基础 Go的内置关键字(25个) 不多 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continute for import return var Go的注释方法(和js一样) 单行注释: // 多行注释: /**/ Go程序一般结构 common_structure.go 通过 pack

.net学习笔记---xml基础知识

一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基础: <?xml version="1.0" encoding="utf-8" ?> <books ISBN="9787544238212"> <title>xml学习笔记</title> <pr

C#学习笔记(基础知识回顾)之枚举

一:枚举的含义 枚举是用户定义的整数类型.在声明一个枚举时,要指定该枚举的示例可以包含的一组可接受的值.还可以给值指定易于记忆的名称.个人理解就是为一组整数值赋予意义. 二:枚举的优势 2.1:枚举可以使代码更易于维护,有助于确保给变量指定合法的.期望的值. 2.2:枚举可以使代码清晰,用描述性的名称来表示整数值,增加代码可读性. 三:枚举的使用 /// <summary> /// 声明一个枚举,审核状态 /// </summary> public enum AduitStatus

[算法学习笔记]算法基础知识

算法基础知识 算法的五大要素 有穷性:算法必须能够在有限个步骤内完成. 确定性:算法的每一步必须有确定的定义. 输入 输出 可行性:算法的每个步骤都必须能分解为基本的可执行操作,每个步骤都必须能在有限时间内完成 循环不变式 循环中的循环不变式可以帮助我们理解算法的正确性.为了证明算法的正确,必须证明循环不变式的三个性质: 1. 初始化:循环不变式在循环开始之前是正确的. 2. 保持:循环不变式在循环的每一次迭代开始之前是正确的. 3. 终止:在循环结束时,不变式会给出一个可以对判断算法是否正确有

《汇编语言》学习笔记1——基础知识

第一章   基础知识 汇编语言的组成 汇编指令:机器码的助记符,有对应的机器码(汇编语言的核心) 伪指令:没有对应的机器码,由编译器执行,计算机并不执行 其他符号:如:+.-.*./等,由编译器识别,没有对应的机器码 指令和数据都是应用上的概念,在内存或磁盘上指令和数据都是二进制信息. 存储器被划分为若干个存储单元,每个存储单元从0开始. 一个存储器有128个存储单元,一个存储单元存储一个字节,一个字节有8个二进制位. 内存换算: 1bit=8byte(B).1KB=1024B.1MB=1024

Scala学习笔记--正则表达式基础知识、如何在scala内使用

正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www.jb51.net/tools/zhengze.html  版本:v2.33 (2013-1-10) 作者:deerchao 转载请注明来源 使用格式:  见java API  http://docs.oracle.com/javase/7/docs/api/ java : java.util.reg

汇编学习笔记---(2)基础知识

今天,接着上次,继续学习汇编语言,主要对内存地址空间.主板.接卡口.存储芯片等进行了解. 什么是内存地址空间? 要搞清楚这个问题,我们首先要知道主板和接口卡. 每个PC都会有一个主板,主板上附有核心器件,包括CPU.存储器.外围芯片组.扩展插槽等,它们通过地址总线+数据总线+控制总线相连. 接口卡啥作用,说白了就是通过总线接收CPU发送的命令,对显示器.音响等外部设备进行控制. 一台PC中主要有两种存储器:随机存储器RAM和只读存储器ROM. RAM中用于存放CPU使用的绝大部分程序和数据,PC

R语言学习笔记:基础知识

1.数据分析金字塔 2.[文件]-[改变工作目录] 3.[程序包]-[设定CRAN镜像] [程序包]-[安装程序包] 4.向量 c() 例:x=c(2,5,8,3,5,9) 例:x=c(1:100) 表示把1 - 100的所有数字都给x这个变量 5.查看x的类型:>mode(x) 6.查看x的长度:>length(x) 7.将两个向量组成一个矩阵: >rbind(x1, x2)  注:r是row的意思,即行,按行组成矩阵. >cbind(x1, x2)  注c是column的意思,

python3基础学习笔记(基础知识)-01

python的基础学习: 数据类型:python是弱类型语言,在定义变量的时候,可以不直接制定数据类型. 1.Numbers: int 有符号整型    a = (-1)  a = 1 long 长整型 float 浮点型 complex 复数 2.boolean: True    Flase 3.String :字符串   a = "Hello World" 4.List :列表 有序  list1 = [] 5.Tuple : 元组  定义后不能被修改  a = (1,2,3) 6