SpringMVC入门(十六)

17 篇文章 0 订阅
5 篇文章 0 订阅

SpringMVC

SpringMVC是什么

Spring web MVC 和 Struts2都属于表现层的框架,Spring MVC是 Spring框架的一部分,可以用来取代Struts2。与Struts不同点在于,Struts2是经过封装改造的拦截器,而SpringMVC没有经过封装,本质上是一个Servlet。

SpringMVC的主要处理流程

在这里插入图片描述

通过配置的中央前端控制器Servlet(DispathcherServlet)它负责发送每个请求到合适的处理程序,使用视图来最终返回响应结果的概念。

以下是对应于到DispatcherServlet的传入HTTP请求的事件顺序:

  • 在接收到HTTP请求后,DispatcherServlet会查询HandlerMapping以调用相应的Controller

  • Controller接受请求并根据使用的GETPOST方法调用相应的服务方法。 服务方法将基于定义的业务逻辑设置模型数据,并将视图名称返回给DispatcherServlet

  • DispatcherServlet将从ViewResolver获取请求的定义视图。
    当视图完成,DispatcherServlet将模型数据传递到最终的视图,并在浏览器上呈现。

所有上述组件,即: HandlerMappingControllerViewResolver是WebApplicationContext的一部分,它是普通ApplicationContext的扩展,带有Web应用程序所需的一些额外功能。

使用IDEA创建一个Spring MVC项目

使用idea创建一个SpringMVC项目,请参照以下连接的教程创建:

步骤可以分为:

  1. 导入Spring MVC JAR包(IDEA一般会自动导入,也可以自己导入)
  2. 配置web.xml文件,dispatcher-servlet.xml文件
  3. 配置controller控制器,将特定请求映射到相应处理方法。
  4. 配置Tomcat
  5. 配置helloworld页面
  6. 启动
SpringMVC文件的配置

SpringMVC中要对两个核心文件进行配置,applicationContext.xml文件和dispatcher-servlet.xml文件,也就是要为Spring框架加载这两个配置文件。

这两个配置文件的加载略有不同:

applicationContext.xml是全局的,应用于多个serverlet,配合listener一起使用,web.xml中配置如下:

applicationContext.xml 是全局的,所以使用 < context-param>进行加载。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 配置监听器 -->
<listener>
<!--ContextLoaderListener是Spring的监听器,它的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。-->
    <!--因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。-->
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

dispatcher-servlet.xml 是spring mvc的配置 :

dispatcher-servlet.xml 是为spring mvc的这个控制器所使用的,所以需要在servlet标签中进行加载。

需要注意,如果没有为dispatcher指定装载配置文件的路径,则会默认到 /WEB-INF/[Servlet的名称]-servlet.xml 路径下装载配置文件

如果dispatcher-servlet.xml没有存放在/WEB-INF 路径下,则需要在servlet标签中,设置 < init-param>初始化标签,手动指定路径,装载 dispatcher-servlet.xml 配置文件

web.xml中配置如下:

<!--配置springmvc DispatcherServlet-->
<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  
  <init-param>
  <!--如果不为dispatcher Servlet指定配置文件,则会默认加载 /WEB-INF/[Servlet的名称]-servlet.xml 配置文件-->
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:dispatcher-servlet.xml</param-value>
  </init-param>
  
  <load-on-startup>1</load-on-startup>
  <async-supported>true</async-supported>
</servlet>

<servlet-mapping>
    <!--
        1 /* 拦截所有 jsp js png .css 全部拦截 不建议使用
        2 *.action *.do 拦截以do action 结尾的请求
        3. / 拦截所有(不包括)jsp(包含js .png .css)建议使用 /对静态资源放行
    -->
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

然后在WEB-INF文件下下面创建一个jsp文件夹,创建一个hello.jsp页面:

<body>
    hello world
</body>

dispatcher-servlet.xml中进行一部分的MVC的初始化工作
配置如下:

<?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-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--Spring的注解开发:组件扫描,扫描需要使用注解的类包(类上注解:可以直接使用属性注入的注解)-->
    <context:component-scan base-package="controller"/>

    <!--<mvc:default-servlet-handler />对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,-->
    <!--如果不是静态资源的请求,才由DispatcherServlet继续处理。-->

    <!--一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它。-->
    <!--如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定-->
    <!--<mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />-->
    <mvc:default-servlet-handler/>


    <!--<mvc:annotation-driven>会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,-->
    <!--这是Spring MVC为@Controller分发请求所必需的,并且提供了数据绑定支持-->
    <mvc:annotation-driven/>

    <!--与controller注解类中的返回值相结合,组成完整的返回值路径,比如返回的字符串hello-->
    <!--prefix属性加在hello前面,suffix属性加在hello后面-->
    <!--完整的路径就是/WEB-INF/jsp/比如返回的字符串hello.jsp-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

然后在src下创建一个controller包,创建一个controllerDemo的文件,作为控制器,用来返回页面。

通过@Controller注解来注明是一个控制器对象,通过@RequestMapping注解类来映射请求,也就是这个/mvc这个请求就会被映射到这个类中。
然后通过@RequestMapping方法上注解,再细分请求到处理方法,通过处理方法中的返回值跳转到到指定页面。
可以通过返回字符串或者ModelAndView类来跳转页面。

@Controller
@RequestMapping("/mvc")
public class controllerDemo {

    @RequestMapping("/")
    //返回字符串的方法跳转页面
    public String hello(){
    	//和dispatcher-servlet.xml中的prefix,suffix属性结合形成完整的页面路径
        //prefix属性加在hello前面,suffix属性加在hello后面
        // 完整的路径就是/WEB-INF/jsp/比如返回的字符串hello.jsp
        return "hello";
    }

    @RequestMapping("/list")
    //返回ModelAndView对象的方式跳转页面
    public ModelAndView list(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("itemList");
        return modelAndView;
    }
}

这时候就基础的配置就完成了,启动服务器,在网址栏中分别输入:

http://localhost:8080/mvc/ 或者 http://localhost:8080/mvc/list

就会跳转到hello.jsp页面和itemList.jsp页面了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值