SpringMvc实例及分析

先看实例:有疑问下面统一分析。

一:依赖

<properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <maven.compiler.encoding>UTF-8</maven.compiler.encoding>

    <java.version>11</java.version>

    <maven.compiler.source>11</maven.compiler.source>

    <maven.compiler.target>11</maven.compiler.target>

</properties>



<dependencies>

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-webmvc</artifactId>

        <version>5.2.13.RELEASE</version>

    </dependency>

    <dependency>

        <groupId>javax.servlet</groupId>

        <artifactId>javax.servlet-api</artifactId>

        <version>3.1.0</version>

        <scope>provided</scope>

    </dependency>

    <dependency>

        <groupId>javax.servlet.jsp</groupId>

        <artifactId>jsp-api</artifactId>

        <version>2.2</version>

        <scope>provided</scope>

    </dependency>

    <dependency>

        <groupId>javax.servlet</groupId>

        <artifactId>jstl</artifactId>

        <version>1.2</version>

    </dependency>

    <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <version>4.13.1</version>

        <scope>test</scope>

    </dependency>



二:web.xml文件配置
  1. <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
            
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
            
    version="4.0">

    <!--配置DispathServlet,这个是springMVC的核心:请求分发器,前端控制器-->
       
    <servlet>
            <
    servlet-name>springmvc</servlet-name>
            <
    servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--        要绑定spring的配置文件-->
           
    <init-param>
                <
    param-name>contextConfigLocation</param-name>
                <
    param-value>classpath:spring-servlet.xml</param-value>
            </
    init-param>
    <!--        -->
           
    <load-on-startup>1</load-on-startup>
        </
    servlet>
    <!--springMVC中,
    /:只会匹配所有的请求,不会匹配jsp页面
    /*:匹配所有的请求,包括jsp页面-->
       
    <servlet-mapping>
            <
    servlet-name>springmvc</servlet-name>
            <
    url-pattern>/</url-pattern>
        </
    servlet-mapping>
    </
    web-app>

三:springMvc核心配置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"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

        http://www.springframework.org/schema/beans/spring-beans.xsd ">



<!--处理器映射器-->

    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

<!--    处理器适配器-->

    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

<!--   DispatherServlet调用 视图解析器,ds给的MV都会经过下面这里
它做了什么?
1,获取了modelandView中的数据,2,解析MV的视图名字,3,拼接视图名字,找到对应的视图,4,将数据渲染到这个视图上面-->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">

<!--前缀-->

        <property name="prefix" value="/WEB-INF/jsp/"/>

<!--        后缀-->

        <property name="suffix" value=".jsp"/>

    </bean>

//这个处理器(BeanNameUrlHandlerMapping)需要用到bean,以后可能不用这个处理器了

    <bean  id="/hello"   class="com.kuang.controller.HelloController"/>

</beans>

四:控制器

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  mv=new ModelAndView();

        String  result="Hellospringmvc";

        mv.addObject("msg",result);



        mv.setViewName("hello");



        return mv;

    }

}

注意不成功的话可能是jar包没有在lib中。

实例二:注解开发

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

         version="4.0">



    <!--配置DispathServlet,这个是springMVC的核心:请求分发器,前端控制器-->

    <servlet>

        <servlet-name>springmvc</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <!--        要绑定spring的配置文件-->

        <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>

    <!--springMVC中,

    /:只会匹配所有的请求,不会匹配jsp页面

    /*:匹配所有的请求,包括jsp页面-->

    <servlet-mapping>

        <servlet-name>springmvc</servlet-name>

        <url-pattern>/</url-pattern>

    </servlet-mapping>

</web-app>

核心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.xsd

       http://www.springframework.org/schema/mvc

        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

<!--自动扫描包,让指定包下的注解生效,有IOC容器管理
上面是是自己手动配置的,这里直接把包扫描,让注解生效即可-->

    <context:component-scan base-package="com.kuang.controller"/>

<!--资源过滤的-->
    <mvc:default-servlet-handler />
<!--原先要配置映射器和适配器,开启注解后就不用了,下面这一段代码就是帮我们把他们两个自动注入-->

    <mvc:annotation-driven />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">



        <property name="prefix" value="/WEB-INF/jsp/"/>

        <property name="suffix" value=".jsp"/>

    </bean>



</beans>

支持注解驱动:

在spring中一般采用@Requestmapping注解来完成映射关系

要想使它生效,

必须向上下文中注册DefaultAnnotationHandlermapping

和一个AnnotationMethodHanderAdapter实例

这两个实例分别在类级别和方法级别处理

而annotation-driven配置帮助哦们自动完成上述两个实例的注入。

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

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



@Controller

public class helloController {//上面注解表示被spring装配

    @RequestMapping("/hello")

    public String hello(Model model){

        //封装数据

        model.addAttribute("msg","hello,world");

        return "hello";//会被视图解析器处理

    }//如果是多个映射,就多写几个方法(把hello方法复制),加上url路径就好了。

}

package com.kuang.controller;



import org.springframework.stereotype.Controller;

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



import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;



@Controller

public class moduletest01 {

    @RequestMapping("/m1/t1")

    public String test01(HttpServletRequest request, HttpServletResponse response){

        HttpSession session=request.getSession();

        System.out.println(session.getId());

        return "hello";



    }



}

@Controller代表这个类会被spring接管,被这个注解的类,中的所有的方法,如果返回值是string,并且有具体的体面可以跳转,那么接会被视图解析器所解析:

@requestMapping最好写在方法上面, 他是映射的地址

通过接口编写:要继承接口,在xml文件中配置bean。缺点,每一个控制器都要写一个bean

通过注解:编写注解类,在xml文件中开启注解即可,优点,在同一个包中直接扫描。,还有就是适配器和映射器不用写了。

这一段配置文件默认在pom.xml中加上
<build>

    <resources>

        <resource>

            <directory>src/main/resources</directory>

            <includes>



                <include>**/*.properties</include>

                <include>**/*.xml</include>

            </includes>



        </resource>

        <resource>

            <directory>src/main/java</directory>

            <includes>



                <include>**/*.properties</include>

                <include>**/*.xml</include>

            </includes>



        </resource>

    </resources>

</build>

小结:

实现的步骤:

  1. 创建一个web项目
  2. 导入相关的jar包
  3. 编写web.xml注册DispatherServlet
  4. 编写springmvc核心配置文件
  5. 接下来就是去创建对应的控制类controller
  6. 最后完善前端视图和controller之间 的对应
  7. 测试运行调试

使用springmvc必须配置的三大件:

处理器映射器,处理器适配器,视图解析器

通常:我们需要手动配置视图解析器,二处理器映射器和处理器适配器只需要开启注解驱动即可,而省去大段的xml配置

下面是个人笔记,仅供参考:

mvc:模型(dao,service),视图(jsp),控制器(Servlet)

spring的web框架围绕DispatherServlet设计,他的作用是将请求分发到不同的处理器。

springMVC框架想许多其他的MVC框架一样,以请求为例,围绕一个中心Servlet分派请求及提供其他功能,DispatherServlet实际是一个Servlet(它继承自HttpServlet基类)

简要分析执行流程:

DispatherServlet表示前置控制器,是整个sprignMvc的控制中心,用户发出请求,它接收请求并拦截请求。

请求路径分为三部份,服务器域名,web站点(项目名),控制器(对应的servlet)

HanderMapping为处理器映射,由DS调用,HM根据请求url查找Hander.

HE将解析后的信息传递给DispatherServlet,如解析控制器映射等

ds调用处理器适配器

HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler,

Handler让具体的Controller执行

Controller将具体的执行信息返回给HandlerAdapter,如ModelAndview

HA将视图逻辑名或模型传递给DS

DS调用视图解析器(ViewResolver)来解析HA传递的逻辑视图名

视图解析器将解析的逻辑视图名传给DS

DS根据视图解析器解析的视图结果,调用具体的视图

最终视图呈现给用户。

小结:springmvc是spring框架的一部分,是基于Java实现MVC的轻量级web框架。

底层还是一个servlet。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值