美文网首页
【java web】spring web MVC

【java web】spring web MVC

作者: 下里巴人也 | 来源:发表于2018-10-17 19:12 被阅读11次

    官方手册:https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html

    1 Spring Web MVC

    Spring web MVC 是构建在Servlet API的原始web框架,从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块(spring-webmvc)的名称,但它通常被称为“Spring MVC”。

    2 框架原理

    在Spring MVC框架中,从“Request(请求)”开始,依次进入“DispatcherServlet(核心分发器)” —> “HandlerMapping(处理器映射)” —> “Controller(控制器)” —> “ModelAndView(模型和视图)” —> “ViewResolver(视图解析器)” —> “View(视图)” —> “Response(响应)”结束,其中DispatcherServlet、HandlerMapping和ViewResolver 只需要在XML文件中配置即可,从而大大提高了开发的效率,特别是对于 HandlerMapping 框架为其提供了默认的配置。Spring MVC 框架的结构图如下所示:



    具体执行步骤如下:

    • 首先用户发送请求,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器(Controller)进行处理并把请求委托给它;图2-1中的1、2步骤;
    • 页面控制器接收到请求后,进行功能处理,处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);图2-1中的3、4、5步骤;
    • 前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;图2-1中的步骤6、7;
    • 前端控制器再次收回控制权,将响应返回给用户,图2-1中的步骤8;至此整个结束。

    3 搭建spring MVC框架

    • 新建工程(maven-webapps)
    • 新建包
      1)main目录下新建文件夹java,然后设置为源码目录;
      2)java下新建包com.sd.Controller,com.sd.Dao,com.sd.Entity,com.sd.Server
    • 导入springmvc的库
      配置spring 版本号
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <!-- spring版本号 -->
        <spring.version>4.0.0.RELEASE</spring.version>
        <hibernate.version>4.2.11.Final</hibernate.version>
      </properties>
    

    配置依赖库

    <!-- spring核心包 -->
        <!-- springframe start -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-tx</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <!-- springframe end -->
    
    • src/main/webapp/WEB-INF/web.xml中添加前段控制器的配置:
    <servlet>
            <servlet-name>applicationContext</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>applicationContext</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    

    url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义所有的请求都交给DispatcherServlet。也可以如“*.html”表示拦截所有以html为扩展名的请求;
    默认DispatcherServlet会加载WEB-INF/[Servlet名字]-servlet.xml配置文件(Spring官方文档上推荐的默认的文件名是[servlet-name]-servlet.xml)。

    • WEB-INF下增加applicationContext-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:p="http://www.springframework.org/schema/p"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
    <!-- 扫描 -->
    <context:component-scan base-package="com.sd.*"/>
            <!-- 开启spring 注解的使用,上面扫描包含该配置,所以可省略  -->
    <context:annotation-config/>
    
            <!-- springMVC handle -->
    <mvc:default-servlet-handler />
    
            <!-- 开启springmvc注解 -->
    <mvc:annotation-driven />
            <!-- 对模型视图添加前后缀 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/"/>
    <property name="suffix" value=".jsp"/>
    </bean>
            <!-- springmvc 异常处理页面 -->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props>
            <prop key="java.lang.Exception">errorJSP/error</prop>
        </props>
    </property>
    </bean>
    </beans>
    

    其中自动扫描的目录需要正确,否则会报错:
    WARNING: No mapping found for HTTP request with URI [/springMVC/hello] in DispatcherServlet with name ‘mydemo’
    InternalResourceViewResolver:用于支持Servlet、JSP视图解析;
    prefix和suffix:查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),比如传进来的逻辑视图名为index,则该该jsp视图页面应该存放在“WEB-INF/index.jsp”

    • 开发处理器(页面控制器)
      在com.sd.Controller包下创建类MyController,写入以下内容:
    package com.suredata.Controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    @Controller
    public class MyController {
    
        @RequestMapping(value="/hello",method= RequestMethod.GET)
        public String sayHello(Model model) {
            model.addAttribute("msg", "Hello World!");
            return "hello";
        }
    }
    
    • 开发页面
      在WEB-INF目录下新建index.jsp:
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Hello</title>
    </head>
    <body>
        ${msg}
    </body>
    
    • 配置tomcat和jdk

    相关文章

      网友评论

          本文标题:【java web】spring web MVC

          本文链接:https://www.haomeiwen.com/subject/vjilzftx.html