首页 > 代码库 > SpringMVC学习笔记(一): 基础知识

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=http://www.mamicode.com/"/WEB-INF/jsp/">>
在控制器(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=http://www.mamicode.com/"/WEB-INF/jsp/">>


(二)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=http://www.mamicode.com/"/annotationController")>
1)@Controller:控制器注解。用过spring都知道。

2)@RequestMapping(value=http://www.mamicode.com/"/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


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