通俗易懂的SpringMVC,新手一看就懂!

SpringMVC知识点汇总

MVC模式

MVC模式做了哪些事情呢?总结了下,主要有以下几点:

①将URL映射到java类(Struts2框架)或者java方法(SpringMvc框架)上
②封装用户提交的数据
③处理请求–调用相关的业务逻辑处理–封装响应的数据
④将响应的数据进行渲染

SpringMVC简介

SpringMVC是一个轻量级的,基于请求响应的MVC框架。主要的优点如下:

①springMVC分工非常明确,可以说是基于AOP实现的,每一个功能的实现由一个专门的对象负责完成,其中包括控制器、验证器、命令对象、模型对象、处理程序映射、视图解析器等等。

②springMVC支持国际化。

③支持多种视图技术,如jsp。

④提供一个简单而强大的JSP标签库,支出数据绑定功能。

⑤提供内置校验器,可以校验用户输入,如果校验不正确,则重定向输入表单。

下面我们来和Struts2来做一个简单的对比,让你更清晰的了解springMvc。

①Struts2是基于类设计的,每发一次请求都会创建一个Action实例,每个Action都会被注入属性,而SpringMVC是基于方法设计的,粒度更细,一个方法对应一个request上下文,而方法同时又跟一个url对应,从架构本身上springmvc非常容易实现Restful风格,而Struts2实现起来就比较麻烦,因为虽然一个Action的方法可以对应一个URL,但是类的属性却被共享,这也就无法用注解或其他方式表示属性所属的方法。

②从数据校验上来说,springMvc支持JSR3.0,处理Ajax请求更是方便,只需要一个注解@RequestBody,然后知己返回响应文本请求即可,而Struts2就比较麻烦。

③从配置上来说,Struts2大多采用传统的配置文件,而springMVC除了配置Springmvc-servlet.xml之外,几乎没有其他配置了,所以在开发效率上来说高于struts2。

④从项目管理上来说,SpringMVC和Spring无缝结合,这个是struts2不能它相提并论的。
初学者,看到这可能有点不是很能理解这些对比以及优势,可在后续看完springmvc教程之后再回头来看。

SpringMVC工作流程(原理)


①客户端发送请求到DispatcherServlet

②DispatcherServlet收到请求,调用HandlerMapping处理器映射器

③处理器映射器找到具体的处理器(可以根据XML配置,注解进行查找,生成处理器对象以及处理器拦截器(如果有)一并返回给DispatcherServlet)

④DispatcherServlet再调用HandlerAdapter处理器适配器

⑤HandlerAdapter经过适配器调用具体的处理器Controller,也叫后端控制器。

⑥Controller执行完成返回MondelAndView。

⑦HandlerAdapter将Controler执行结果ModelAndView返回给DispatcherServlet。

⑧Dispatcherservlet将ModelAndView传给ViewReslover视图解析器。

⑨ViewReslover解析后返回具体的View。

⑩DischerServlet根据View进行渲染视图。

⑪最后响应给用户。

Controller配置总结

一、最古老的配置方式(通过URL对应Bean)

1.配置web.xml

<!--定义SpringMVC的前端控制器DispatcherServlet-->
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">
    <!-- 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>WEB-INF/springmvc-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- 拦截设置 -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!-- 由SpringMVC拦截所有请求 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>  

2.配置springmvc-config.xml

<!--springmvc-config.xml-->
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="    
        http://www.springframework.org/schema/mvc   
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
        http://www.springframework.org/schema/beans         
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
        http://www.springframework.org/schema/context     
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
    <!-- 配置handlerMapping-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
    <!-- 配置handlerAdapter-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
    <!-- 配置渲染器-->
    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!-- 配置请求和处理器-->
    <bean name="/hello.do" class="com.controller.HelloController"></bean>
</beans>  

3.编写controller类

package com.controller
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloController implements Controller {
    
    
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
    
    
        ModelAndView modelAndView =new ModelAndView();
        modelAndView.addObject("hello","hello");
        modelAndView.setViewName("helloView");
        return modelAndView;
    }
}

二、基于注解的配置(目前最常用)

1.编写web.xml同上

2.配置springmvc-config.xml

<!--springmvc-config.xml-->
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="    
        http://www.springframework.org/schema/mvc   
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
        http://www.springframework.org/schema/beans         
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
        http://www.springframework.org/schema/context     
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
   <!-- 把标记了@Controller注解的类转换为bean -->  
    <context:component-scan base-package="com.controller" />  
    <!-- 启动Spring MVC的注解功能,配置annotation类型的处理器映射器-->  
    <bean class="org.springframework.web.servlet.mvc.annotation.RequestMappingHandlerMapping" /> 
     <!-- 启动Spring MVC的注解功能,配置annotation类型的处理器适配器-->  
    <bean class="org.springframework.web.servlet.mvc.annotation.RequestMappingHandlerAdapter" />  
    <!-- 配置视图解析器 -->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>  

3.编写controller类

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

@Controller
public class HelloController {
    
    
    @RequestMapping("/hello")
    public ModelAndView hello(){
    
    
        ModelAndView modelAndView =new ModelAndView();
        modelAndView.addObject("hello","hello");
        modelAndView.setViewName("helloView");
        return modelAndView;
    }
}

最后

我这边整理了一份:Spring全家桶系列,Java的系统化资料,(包括Java核心知识点、面试专题和20年最新的互联网真题、电子书等)有需要的朋友可以 点击这里获取资料

猜你喜欢

转载自blog.csdn.net/m0_48795607/article/details/110387176
今日推荐