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

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

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(视图解析器)导入:

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

关于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>dispatcherservlet-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>dispatcherservlet-name>
    <url-pattern>/url-pattern>
servlet-mapping>

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

你可能感兴趣的:(java)