SpringMVC | 使用Xml或注解进行开发

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、Spring MVC

简介

Spring MVC(全称 Spring Web MVC是 Spring 框架提供的一款基于 MVC 模式的轻量级 Web 开发框架。

MVC架构

(1示意图

(2各层职责

  • Model负责对请求进行处理并将结果返回给 Controller

  • View负责将请求的处理结果进行渲染展示在客户端浏览器上

  • Controller是 Model 和 View 交互的纽带;主要负责接收用户请求并调用 Model 对请求处理然后将 Model 的处理结果传递给 View

SpringMVC工作原理

(1控件

DispatcherServlet(前端控制器
负责拦截客户端请求并分发给其他组件它是整个流程控制的中心负责调度其他组件的执行降低各组件之间的耦合提升整体效率
HandlerMapping(处理器映射器
负责根据客户端请求的URL寻找处理器Spring MVC中提供了配置文件、注解等映射方式这些映射方式将由相应的处理器映射器负责处理
Handler(处理器
负责对客户端的请求进行处理由开发者编写
HandlerAdapter(处理器适配器
负责根据特定的规则对处理器进行执行它可以执行多种类型的处理器是设计模式中适配器模式的具体应用
ViewResolver(视图解析器
负责视图解析它可以将处理结果生成View(视图并展示给用户
View(视图
展示给用户看由开发者编写

(2原理

用户发送请求到前端控制器(DispatcherServlet
前端控制器请求处理器映射器(HandlerMapping去查找处理器(Handler
找到以后处理器映射器(HandlerMappering向前端控制器返回执行链(HandlerExecutionChain
前端控制器(DispatcherServlet调用处理器适配器(HandlerAdapter去执行处理器(Handler
处理器适配器去执行Handler
处理器执行完给处理器适配器返回ModelAndView
处理器适配器向前端控制器返回ModelAndView
前端控制器请求视图解析器(ViewResolver去进行视图解析
视图解析器向前端控制器返回View
前端控制器对视图进行渲染
前端控制器向用户响应结果

二、使用xml开发

配置前端控制器(web.xml
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <servlet>
        <servlet-name>dispatcherServlet</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>dispatcherServlet</servlet-name>
        <!-- /  拦截 不包括jsp的其他请求-->
        <!-- /* 拦截 包括jsp的所有请求-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

配置映射器(springmvc-servlet.xml
  • 方式一BeanNameUrlHandlerMapping

    <!--BeanNameUrlHandlerMapping
        浏览器发送/user请求,在spring容器中找到id="/user"的对应实例-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <bean id="/user" class="com.app.xml.UserController"/>
  • 方式二SimpleUrlHandlerMapping

    <!--SimpleUrlHandlerMapping
        在自己的实例中自定义一套映射规则properties(请求与实例id关系)
        浏览器发送/user请求,在property中找到key="/user"映射的id然后在spring容器中找到id对应实例-->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/user">userController</prop>
            </props>
        </property>
    </bean>
    <!--配置Controller-->
    <bean id="userController" class="com.app.xml.UserController"/>

配置适配器(springmvc-servlet.xml
  • 方式一SimpleControllerHandlerAdapter(要求我们编写的Controller继承Controller接口

    <!--需要Controller继承Controller-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
  • 方式二HttpRequestHandlerAdapter(要求我们编写的Controller继承HttpRequestHandler接口

    <!--需要Controller继承HttpRequestHandler-->
    <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>

配置视图解析器(springmvc-servlet.xml
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>

编写Controller
  • 继承Controller接口(使用了SimpleControllerHandlerAdapter适配器

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

public class UserController implements Controller {
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) {
        ModelAndView modelAndView = new ModelAndView();
        // index即逻辑视图名,视图解析器会自动加上前缀(/)和后缀(.jsp),即 index -> /index.jsp
        modelAndView.setViewName("index");
        return modelAndView;
    }
}
  • 继承HttpRequestHandler接口(使用了HttpRequestHandlerAdapter适配器

import org.springframework.web.HttpRequestHandler;

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

public class UserController2 implements HttpRequestHandler {
    public void handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
        System.out.println("UserController.handleRequest");
    }
}

编写index.jsp
<html>
<body>
<h2>Hello SpringMVC!</h2>
</body>
</html>

运行tomcat服务器使用浏览器访问

二、使用注解开发

添加自动扫包(springmvc-servlet.xml
    <context:component-scan base-package="com.app.annotation"/>

编写Controller类
  • @Controller注解 —— 标识本类为Controller类使Spring的IoC容器扫描到

  • @RequestMapping —— 请求映射标识出浏览器访问的url路径

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

@Controller
@RequestMapping("user")
public class UserController {
    @RequestMapping(value = "func1")
    public ModelAndView func1() {
        return null;
    }
}

配置映射器和适配器(springmvc-servlet.xml
  • 方式一配置bean类

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
  • 方式二配置<mvc:annotation-driven/>标签(推荐

方法二除了自动配置方式一的bean类外还添加了其他功能利于后面的学习使用。

    <mvc:annotation-driven/>

配置前端控制器(web.xml
  • 代码与使用xml开发相同

配置视图解析器(springmvc-servlet.xml
  • 代码与使用xml开发相同

运行tomcat服务器使用浏览器访问

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Spring