• DispatcherServlet 与 WebApplicationContext


    DispatcherServlet

    DispatcherServlet是整个SpringMVC框架的核心。它负责把所有的请求分发到控制器中。同时提供其他web应用开发所需要的功能。它与Spring IoC容器做到了无缝集成,这意味着,Spring提供的任何特性,在Spring MVC中你都可以使用。

    DispatcherServlet顾名思义它就是一个Servlet。所以跟Servlet一样,需要在web.xml文件中进行配置。下面的代码展示了DispatcherServlet的配置与路径映射的声明:

    	<servlet>
    		<servlet-name>springDispatcherServlet</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    
    	<servlet-mapping>
    		<servlet-name>springDispatcherServlet</servlet-name>
    		<url-pattern>/</url-pattern>
    	</servlet-mapping>
    

    上面的代码声明了一个名为springDispatcherServletDispatcherServlet。并且设置了优先级为1的启动加载(数字越小优先级越高)。工程下的所有路径的请求都会被名字为springDispatcherServlet的DispatcherServlet处理

    • springDispatcherServlet:配置Servlet的名称。

    • org.springframework.web.servlet.DispatcherServlet:这个Servlet使用的类。

    • 1:启动加载,优先级为1,优先级数字越小优先级越高。

    • /:映射的路径。这里使用/会拦截除了.jsp以外的所有请求(包括.html)。如果使用/*的话会拦截包括.jsp的所有请求。因为我们在/WEB-INF/下编写的web.xml会继承自Tomcat本身的web.xml。在Tomcat中处理静态文件的Servlet是DefaultServlet,他的url-partten就是/。因为我们配置DispatcherServlet的时候设置的url-partten也是/,所以现在静态资源的访问也会被我们配置的DispatcherServlet拦截。而为什么jsp文件却可以正常访问呢?因为在Tomcat中有专门用来处理.jsp请求的Servlet:JspServlet。所以说,所有的.jsp请求并不会被DispatcherServlet拦截,而是会被JspServlet拦截再处理。这样.jsp的请求就可以正常的被处理。

    以下是web.xml文件的所有代码:

    <?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"
    	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">
    	<display-name>SpringMVC</display-name>
    	<welcome-file-list>
    		<welcome-file>index.jsp</welcome-file>
    	</welcome-file-list>
    
    	<!-- The front controller of this Spring Web application, responsible for 
    		handling all application requests -->
    	<servlet>
    		<servlet-name>springDispatcherServlet</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    
    	<!-- Map all requests to the DispatcherServlet for handling -->
    	<servlet-mapping>
    		<servlet-name>springDispatcherServlet</servlet-name>
    		<url-pattern>/</url-pattern>
    	</servlet-mapping>
    </web-app>
    

    注意:除了像上面使用web.xml配置DispatcherServlet以外,我们还可以是用java编程的方式来配置DispatcherServlet(Servlet3.0以上版本),但是初学者还是使用web.xml来配置吧。因为简单明了!

    WebApplicationContext

    至此,一个DispatcherServlet就配置完了。但是只配置DispatcherServlet是远远不够的,还需要配置其他组件(WebApplicationContext)。Web应用上下文(WebApplicationContext)内部定义了项目所需要用到的bean,并在容器启动的时候生成bean。这些bean包括ControllersViewResolverHandlerMapping等等。

    WebApplicationContext继承自ApplicationContext,它提供了一些web应用经常需要用到的特性。它与普通的ApplicationContext不同的地方在于,它支持主题的解析,并且知道它关联到的是哪个servlet(它持有一个该ServletContext的引用)。WebApplicationContext被绑定在ServletContext中。如果需要获取它,你可以通过RequestContextUtils工具类中的静态方法来拿到这个web应用的上下文WebApplicationContext

    在web.xml中我们已经配置好了DispatcherServlet。此时DispatcherServlet会去/WEB-INF/路径下寻找名为[Servlet的名字]-servlet.xml的文件。springDispatcherServlet就是我们创建的DispatcherServlet的名字,所以寻找的配置文件名为springDispatcherServlet-servlet.xmlspringDispatcherServlet-servlet.xml就是我们上面所说的WebApplicationContext。在它内部会定义项目需要的bean。

    /WEB-INF/springDispatcherServlet-servlet.xml是我们配置的DispatcherServlet默认寻找配置文件的路径。我们也可以修改web.xml来修改寻找配置文件的路径。

    	<servlet>
    		<servlet-name>springDispatcherServlet</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            
                    <!-- 修改配置文件的默认路径 -->
                    <init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>classpath:springmvc.xml</param-value>
    		</init-param>
            
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    
    	<servlet-mapping>
    		<servlet-name>springDispatcherServlet</servlet-name>
    		<url-pattern>/</url-pattern>
    	</servlet-mapping>
    

    这里我们使用了一个contextConfigLocation初始化参数来指定配置文件的路径。并且把它配置在了classpath路径下的springmvc.xml。接下来让我们来创建springmvc.xml。

    右击src ---> New ---> Spring Bean Configuration File(如果你没有这个选项的话,那么你的Eclipse没有包含Spring的插件,此时你可以去Spirng官网下载 Spring Tools,或者给你的Eclipse安装Spring插件。直接创建普通的xml文件应该也可以,不过我没有试过...)

    设置File name为springmvc.xml并点击Finish。

    创建完成之后的目录结构如下:

    打开springmvc.xml并点击编辑区下方的Namespaces

    选上context

    并输入以下代码:

    <?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"
    	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-4.3.xsd">
    	
        <!-- 扫描注解 -->
    	<context:component-scan base-package="com.pudding" />
    
    </beans>
    

    加上component-scan之后会扫描工程下的注解,如果不加的话@Controller、@Service等标签就失效了。base-package表示扫描哪个包下的注解。

    至此,我们创建了DispatcherServlet并且编写了WebApplicationContext。SpringMVC的第一步已经完成了,我们可以编写我们的第一个SpringMVC项目了!它没有理由不叫HelloWorld...

  • 相关阅读:
    Object常用方法
    Object.assign()
    Object.assign 是浅拷贝还是深拷贝
    AngularJS 的那些内置九种过滤器
    js中几种实用的跨域方法原理详解
    Express
    前端面试题整理——javaScript部分
    前端面试整理——javascript算法和测试题
    node.js写服务器
    nodejs 入门
  • 原文地址:https://www.cnblogs.com/lemon-coke-pudding/p/12722863.html
Copyright © 2020-2023  润新知