您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

匹配根网址和提供静态资源

匹配根网址和提供静态资源

首先,我将对DefaultServlet工作原理进行初步说明。根据Servlet 3.0规范,容器通常提供认的Servlet,该Servlet的优先级最低,并提供静态上下文。映射/是此认Servlet的隐式映射。

现在为解决方案:

这是最简单的解决方案:你映射springDispatcherServlet/pages,或者/pages/api例如。然后,认servlet将提供所有其他URL(包括root)。为了服务于根控制器,可以映射控制器,其/home(例如),并具有/index.jsp包含<jsp:forwardpage="/home"/>-这是在使用扩展映射如Struts其他框架当前使用(的方法*.do用于老Struts1的)。

缺点:用url声明/pages不是很好。

解决方案在参考页面中得到了广泛使用。SpringDispatcherServlet被映射到/*所有请求(除非存在更具体的映射)。要提供静态资源,您只需ResourceHttpRequestHandler在XML中声明一个,即可:

<mvc:resources mapping="/resources/**" location="/public-resources/"/>

或在Java配置中:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/public-resources/");
    }
}

这工作得很好,您可以/直接将Spring控制器映射到。

缺点:您不能提供直接位于根上下文下的静态资源。

实际上,将Spring映射DispatcherServlet/要替换容器中的认servlet,以处理所有尚未处理的URL。通过这种映射,对于未映射到控制器的URL,Spring可以回退到原始的认servlet。为此,您必须配置一个DefaultServletHttpRequestHandler具有"/**"最低优先级的URL映射。您可以使用XML进行操作:

<mvc:default-servlet-handler/>

或在Java配置中:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}

这样,DispatcherServlet通常会调用所有控制器,并具有原始的认Servlet来服务静态(未映射)资源。不幸的是,这并 为根URL工作,你必须使用<jsp:forward page="..."/>伎俩像第一个解决方案。

缺点 :

参考:Spring参考手册/ Web MVC框架/资源服务

其他 2022/1/1 18:17:12 有608人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶