欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DispatcherServlet(前端控制器)访问顺序和url匹配规则

程序员文章站 2022-05-29 21:35:06
...

前端控制器访问流程图:
DispatcherServlet(前端控制器)访问顺序和url匹配规则

dispatcher代码导入:

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

说明:
1:在web.xml里面导入前端控制器,通过< url-pattern >设置匹配规则,如上面设置的*.html,会匹配所有的带有html后缀的url访问。
2:若url匹配成功,交给HandlerMapping处理映射器处理(具体的形式是业务代码中的Controller,通过RequestMapping进一步传递匹配)
3:HandlerAdapter处理器适配器,处理一些功能请求,返回一个ModelAndView对象(包括模型数据、逻辑视图名)
4:ViewResolver视图解析器,先根据ModelAndView中设置的View解析具体视图
5:然后再将Model模型中的数据渲染到View上。

6:若第2步的url未成功匹配,则相当于通过缺省匹配(有关匹配规则,下面会解释),直接由ViewResolver视图解析器负责映射资源文件。映射成功予以返回显示,否则则返回404错误。

ViewResolver(视图解析器)导入:

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="prefix" value="/WEB-INF/admin/" />
        <property name="suffix" value=".jsp" />
    </bean>

关于url-pattern的四种匹配规则,在此作进一步解释:

1、精确匹配(简单,容易理解)
< url-pattern >中配置的项与url完全精确匹配。

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/user/login.html</url-pattern>
    <url-pattern>/user/logout.do</url-pattern>
</servlet-mapping>

当在浏览器中输入如下几种url时,都会被匹配到该servlet
http://localhost:8080/demo/user/login.html
http://localhost:8080/demo/user/logout.do

2、扩展名匹配

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

扩展名为jsp或do的url请求都会匹配,比如下面的url都会被匹配
http://localhost:8080/demo/user/login.jsp
http://localhost:8080/demo/user/logout.out

3、路径匹配
以“/”字符开头,并以“/*”结尾的字符串用于路径匹配

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/user/*</url-pattern>
</servlet-mapping>

路径以/user/开始,后面的路径任意。如下面的url都会被匹配。
http://localhost:8080/demo/user/login.jsp
http://localhost:8080/demo/user/logout.out

4、 缺省匹配
所有在web.xml文件中找不到匹配的< servlet-mapping >元素的URL,它们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求。

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

缺省匹配会访问viewResolver管理的(视图解析器)静态文件资源。
关于匹配规则,详细可以阅读此篇文章