• SpringMVC 入门


    @

    Spring MVC基本信息

    Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

    Spring MVC的优点

    • 容易和其它View框架(Titles等)无缝集成,采用IOC便于测试。
    • 它是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架,spring适用于初学者或者想了解mvc的人。
    • 它和tapestry一样是一个纯正的servlet系统,这也是它和tapestry相比 struts所没有的优势。而且框架本身有代码,而且看起来也不费劲比较简单可以理解。

    Spring MVC运行原理

    1. 客户端请求提交到DispatcherServlet
    2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
    3. DispatcherServlet将请求提交到Controller
    4. Controller调用业务逻辑处理后,返回ModelAndView
    5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
    6. 视图负责将结果显示到客户端

    springMVC 入门示例

    pom.xml添加

    <!-- Spring MVC support -->
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-webmvc</artifactId>
    	<version>${spring.version}</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-web</artifactId>
    	<version>${spring.version}</version>
    </dependency>
    
    <!-- Tag libs support for view layer -->
    <dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>jstl</artifactId>
    	<version>1.2</version>
    	<scope>runtime</scope>
    </dependency>
    <dependency>
    	<groupId>taglibs</groupId>
    	<artifactId>standard</artifactId>
    	<version>1.1.2</version>
    	<scope>runtime</scope>
    </dependency>
    

    web.xml添加

    <!-- Dispatcher servlet在这里充当前端控制器的角色 -->
    <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>
    	<load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    	<servlet-name>springmvc</servlet-name>
    	<url-pattern>/</url-pattern>
    </servlet-mapping>
    

    resource下新建springmvc-servlet.xml

    <?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:mvc="http://www.springframework.org/schema/mvc"
    	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-4.1.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
    
    	<!-- scan the package and the sub package -->
    	<context:component-scan base-package="com.xc" />
    	<!-- don't handle the static resource -->
    	<mvc:default-servlet-handler />
    	<!-- if you use annotation you must configure following setting -->
    	<mvc:annotation-driven />
    
    	<!-- configure the InternalResourceViewResolver -->
    	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    		<property name="prefix" value="/WEB-INF/views/" />
    		<property name="suffix" value=".jsp" />
    	</bean>
    
    </beans>
    

    新建HelloController.java

    package com.xc.controller;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.xc.entity.User;
    
    @Controller
    @RequestMapping("/mvc")
    public class HelloController {
    
    	@RequestMapping("/hello")
    	public ModelAndView hello() {
    		Map<String, Object> model = new HashMap<String, Object>();
    
    		List<User> list = new ArrayList<>();
    		list.add(new User(1, "草叶", "123456"));
    		list.add(new User(2, "草叶2", "123456"));
    		model.put("user", list);
    
    		return new ModelAndView("hello", model);
    	}
    
    }
    

    新建hello.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    	pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    
    <html>
    <head>
    <title>Spring MVC Hello World</title>
    </head>
    
    <body>
    	<h2>All Employees in System</h2>
    
    	<table border="1">
    		<tr>
    			<th>Employee Id</th>
    			<th>First Name</th>
    			<th>Last Name</th>
    		</tr>
    		<c:forEach items="${user}" var="item">
    			<tr>
    				<td>${item.id}</td>
    				<td>${item.name}</td>
    				<td>${item.password}</td>
    			</tr>
    		</c:forEach>
    	</table>
    
    </body>
    </html>
    

    配置与注解

    • Dispatcherservlet
        DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。
    • InternalResourceViewResolver
        视图名称解析器
    • @Controller
        负责注册一个bean 到spring 上下文中
    • @RequestMapping
        注解为控制器指定可以处理哪些 URL 请求
    • @RequestBody
        该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上 ,再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上
    • @ResponseBody
         该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区
    • @ModelAttribute    
        在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法
        在方法的入参前使用 @ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数 –绑定到对象中,再传入入参将方法入参对象添加到模型中
    • @RequestParam 
        在处理方法入参处使用 @RequestParam 可以把请求参 数传递给请求方法
    • @PathVariable
        绑定 URL 占位符到入参
    • @ExceptionHandler
        注解到方法上,出现异常时会执行该方法
    • @ControllerAdvice
        使一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常

    SpringMVC详细运行流程图

    image.png

    参考文章:
    史上最全最强SpringMVC详细示例实战教程
    Spring MVC 4.2.4.RELEASE 中文文档

  • 相关阅读:
    数据库的查询笔记
    数据库设计第3级的阶梯:构建表
    数据库使用学习笔记
    index()
    面向对象写法的拖拽
    js面向对象
    laytpl.js 模板使用记录
    面试总结
    JS的基础类型与引用类型
    jQuery两种扩展插件的方式
  • 原文地址:https://www.cnblogs.com/ooo0/p/10371176.html
Copyright © 2020-2023  润新知