SpringMVC详细教程

概述

首先对于常见的SSM框架(Spring+SpringMVC+MyBatis),三大部分承担了三个层次的工作。

  • SpringMVC——>web层;
  • Spring——>service层;
  • MyBatis——>dao层;

由此可见,SpringMVC是基于Controller的框架。

 

SpringMVC主要组件

  • DispatcherServlet:本质就是一个Servlet,作为Spring应用程序和其客户端之间的前台控制器调度器servlet拦截到应用程序的所有请求,并查询要调用哪个控制器来处理请求的Handler Mapping。 作为Spring应用程序和其客户端之间的前台控制器调度器servlet拦截到应用程序的所有请求,并查询要调用哪个控制器来处理请求的Handler Mapping。
  • HandlerMapping:负责找到处理特定请求的适当控制器。 请求URL和控制器类之间的映射是通过XML配置或注释完成的。
  • HandlerAdapter:本质就是Controller,负责通过调用其他业务/服务类来处理请求。 输出可以附加到将发送到视图的模型对象。 要知道将呈现哪个视图,控制器将查看View Resolver
  • ViewResolver:从逻辑名称中查找物理视图文件。
  • View:JSP,HTML,XML,Velocity模板等的物理视图文件。

 

SpringMVC入门案列

首先创建一个web工程,导入jar包。

结构如下:

按照框架逻辑,我们先配置SpringMVC的前端控制器DispatcherServlet。

  1. 配置SpringMVC前端控制器;
  2. 配置Servlet映射关系——servlet-mapping;

需要在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"
	xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
	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>SSMDemo</display-name>
	
	<!-- 配置SpringMVC前端控制器 -->
	<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-servlet.xml</param-value>
		</init-param>
	</servlet>
	
	<!-- Servlet映射关系配置 -->
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>*.action</url-pattern>
	</servlet-mapping>
	
	<welcome-file-list>
		<welcome-file>WEB-INF/first.jsp</welcome-file>
	</welcome-file-list>

</web-app>

我们在web.xml中指定SpringMVC的入口程序DispatcherServlet时,实际上蕴含了一个对核心配置文件的指定过程([servlet-name]-servlet.xml)。

因此,我们还需要一个SpringMVC的核心配置文件:XXX-servlet.xml。其中关于Bean,SpringMVC等相关信息都在这个配置文件中进行配置。

  1. 配置HandlerMapping;
  2. 配置视图解析器ViewResolver;

如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	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/aop
	http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
	http://www.springframework.org/schema/mvc
	http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
	">

	<!-- 处理器映射器HandlerMapping 将请求交给相应的处理器-->
	<bean name="/first.action"
		class="com.tedu.controller.FirstController"></bean>

	<!-- 视图解析器ViewResolver -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>


</beans>

配置完成后我们就可以实现Controller和View了。

编写一个类实现Controller接口,如下:

package com.tedu.controller;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

/**
 *
 *@ClassName:FirstController  
 *
 *@Description:TODO
 *
 *@author Chen
 *
 *@date:2019年5月9日 下午6:57:44
 */
public class FirstController implements Controller{

	@Override
	public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		ModelAndView mav = new ModelAndView();
		mav.addObject("msg1", "Hello1111");
		mav.addObject("msg2", "Hello22222");
		mav.setViewName("first");
		return mav;
	}
	

}

View编写一个jsp页面:

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 	这是First页面
 	<br>
 	
 	${msg1}
 	<br>
 	${msg2 }
 	<br>
 	<%=new Date().toLocaleString() %>
</body>
</html>

SpringMVC的一个简单案列就完成了。

访问http://localhost:8080/SSMDemo/first.action

通过注解配置实现SpringMVC

修改SpringMVC配置文件springmvc-servlet.xml如下:

  • 开启包扫描和注解模式
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	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/aop
	http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
	http://www.springframework.org/schema/mvc
	http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
	">
	
	<!-- 开启包扫描 -->
	<context:component-scan base-package="com.tedu.controller"></context:component-scan>
	
	<!-- 开启SpringMVC注解 -->
	<mvc:annotation-driven/>

	<!-- 视图解析器ViewResolver -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
</beans>

在此就无需手动配置HandlerMapping,配置注解后SpringMVC将通过程序中的注解自动解析对于请求的处理器。

编写Controller:

  • 注解@Controller、@RequestMapping
package com.tedu.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class AnnoController {
	
	@RequestMapping("/first.action")
	public ModelAndView first() {
		ModelAndView mav = new ModelAndView();
		mav.addObject("msg1", "Hello First~");
		mav.addObject("msg2", "Hello SpringMVC");
		return mav;
	}
	
	@RequestMapping("/second.action")
	public String second(Model model) {
		model.addAttribute("msg1","Hello Second!");
		model.addAttribute("msg2","Hello SpringMVC Annotation~");
		return "second";
	}

}

Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。

访问:http://localhost:8080/SSMDemo/first.action

访问:http://localhost:8080/SSMDemo/second.action

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值