Spring之SpringMVC

前言

     原本想写完ioc接着写aop的,但是在写aop的过程中用了点mvc的技术点,想了想,还是先把mvc记录一下好了

 什么是SpringMVC

    在上一篇介绍Springioc的博客时,有张架构图,可以看到SpringMVC也是Spring框架的一部分,那么SpringMVC到底是什么呢?

    Spring mvc属于表现层的框架,基于ioc功能开发,用于开发web程序,按MVC结构开发。

这是一幅用灵魂画出来的架构图,然后我简单介绍一下运行流程

1、  用户发送请求至前端控制器DispatcherServlet

2、  DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、  处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4、  DispatcherServlet通过HandlerAdapter处理器适配器调用处理器

5、  执行处理器(Controller,也叫后端控制器)。

6、  Controller执行完成返回ModelAndView

7、  HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

8、  DispatcherServlet将ModelAndView传给ViewReslover视图解析器

9、  ViewReslover解析后返回具体View

10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。

11、DispatcherServlet响应用户

入门案例

国际惯例,我们先模拟一个简单的helloworld请求界面,下面是请求到相应的流程

hello.do-->DispatcherServlet-->HandlerMapping-->HelloController(返回ModelAndView)-->ViewResolver-->/hello.jsp

1 创建maven工程,配置pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.chf</groupId> <artifactId>SpringMVC</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <!-- 指定字符编码和版本信息 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.2.1.RELEASE</spring.version> </properties> <dependencies> <!-- Spring 框架基本的核心工具类 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring 核心提供了大量扩展 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- SpringMVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- SpringAop --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> </dependencies> </project>

2  配置DispatcherServlet(web.xml)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>SpringMVC</display-name> <!-- 配置DispatcherServlet --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <!-- 指定SpringMVC配置文件的位置和名称 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> <!-- 设置所有以do结尾的请求进入SpringMVC --> </servlet-mapping> </web-app>

3  创建SpringMVC核心配置文件

   创建一个Spring-mvc.xml文件,文件名可以自定义,但是要和web.xml中的classpath所指定的文件名一致,先配置MVC注解驱动,在配置Controller扫描包使配置bean的注解生效,最后配置视图解析器

<?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:context="http://www.springframework.org/schema/context" 
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"  
	xmlns:jee="http://www.springframework.org/schema/jee" 
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop" 
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.1.xsd
		http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.1.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
		http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd">
	
	
	<!-- HandlerMapping组件,支持@RequestMapping注解驱动 -->
	<mvc:annotation-driven />
	<!-- 配置Controller扫描包 -->
	<context:component-scan base-package="cn.chf"/>
	<!-- ViewResolver视图解析器 -->
	<bean id="viewResolver" 
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 指定视图位置 -->
		<property name="prefix"  value="/WEB-INF/"></property>
		<!-- 指定视图类型 -->
		<property name="suffix"  value=".jsp"></property>
	</bean>
	
</beans>

4 编写逻辑代码

 实体类

package cn.chf.entity;

public class Person {

	private String id; // id
	private String name; // 姓名
	private String age;  //年龄
	private String interest;//爱好
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getInterest() {
		return interest;
	}
	public void setInterest(String interest) {
		this.interest = interest;
	}
	
	
}

 controller层业务代码

package cn.chf;

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

@Controller
public class HelloController {

	     //ModelAndView封装了视图名字和传出去的数据
		@RequestMapping("/hello.do")
		public ModelAndView execute() throws Exception {
			// TODO 调用模型组件处理
			ModelAndView mav = new ModelAndView();
			mav.setViewName("hello");//找hello视图
			mav.getModel().put("data", "HelloWorld");//放入数据,可以传递到jsp
			return mav;
		}
}

 前端jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
  <h1>第一个MvC程序</h1>
   <h2>${data}</h2>
</body>
</html>

 启动tomcat访问 http://localhost:端口号/项目名/hello.do

这边我们的Springmvc就搭建完成了, 流程一定要清晰

猜你喜欢

转载自www.cnblogs.com/alves/p/9758545.html