当前位置: 首页 > 知识库问答 >
问题:

Spring MVC配置URL模式

艾浩穰
2023-03-14


我尝试配置简单的控制器<我有:
在网上。xml

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/index.jsp</url-pattern>
</servlet-mapping>

在mvc调度器servlet中。xml

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/jsp/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="urlMap">
        <map>
            <entry key="/index.jsp">
                <ref bean="mainPage"/>
            </entry>
        </map>
    </property>
</bean>

<bean name="mainPage" class="ru.mypack.TBController" />

这是我的控制器:

public class TBController extends AbstractController {

@Override
protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
    System.out.println("It is here");
    ModelAndView model = new ModelAndView("index");
    return model;
}}

我在Tomcat 6上运行,在这个配置中,它(/index.jsp)工作得很好!

但是如果我像这样改变网址模式

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

它返回404访问/索引。jsp

我在控制台中看到“It is here”,这意味着url模式工作正常,但ModelAndView没有初始化

奇怪的是,他似乎试图访问空资源(Chrome显示我“HTTP状态404-”)

UPD:
多亏了帕维尔·霍拉尔,解决方案已经找到了。
我刚刚用web.xml替换了我的网址模式

<url-pattern>/test/*</url-pattern>

现在它通过/test/index进行响应。jsp

共有1个答案

宓昂雄
2023-03-14

Spring正在处理如何定义servlet映射的信息。如果使用后缀映射(*。something),那么Spring只使用第一部分(不带后缀)。这意味着你只需要在你的url模式中使用/index(不带后缀)就可以了。

在Spring的UrlPathHelper#getPathNevinServletMap中的JavaDoc给出了在映射过程中使用的更好的描述:

返回给定请求的servlet映射内的路径,即请求URL中调用servlet的部分之外的部分,或者如果整个URL已用于标识servlet,则返回“”。

如果在RequestDispatcher包含中调用,则检测包含请求URL。

例如:servlet映射="/test/*";请求URI="/test/a"-

例如:servlet映射=“/test”;请求URI=“/test”-

例如:servlet映射=“/*.test”;请求URI=“/a.test”-

 类似资料:
  • 网络.xml 控制器 当我访问 http://mydomain/car/baojia.html 并出现此错误时: spring.xmlViewResolver 我在/views/boajia.jsp中有一个文件 不管我写什么,都不行 我还有另一个问题,我不想匹配这个 url 模式:/api/*,控制器是: 但它不能工作

  • 我试图创建一个springmvc项目配置与Hibernate使用web.xml 我的问题是,当我运行时,它不会自动创建用户表。 这是我的代码: 文件spring-config.xml 文件web.xml: 文件UserDAO: 文件UserDaoImpl: 文件用户: 这是我的日志:

  • 简洁、优雅的URL 模式在高质量的Web 应用中是一个非常重要的细节。Django 允许你任意设计你的URL,不受框架束缚。 不要求有.php 或.cgi,更不会要求类似0,2097,1-1-1928,00 这样无意义的东西。 参见万维网的发明者Berners-Lee 的Cool URIs don’t change,里面有关于为什么URL 应该保持整洁和有意义的卓越的论证。 概览 为了给一个应用设

  • http://some-amazon-link:8080/the-war-name/login 现在我正在纠结如何在Spring MVC项目中添加“/the-war-name/”以及在哪里添加“/the-war-name/”。 它在 null

  • 我已经用Eureka发现服务实现了Spring Cloud Gateway,一切都很好,但我看到了一些我在编写URL时不知道如何处理的事情,如果我没有在URL的末尾放一个/,Gateway会直接使用其实际URL(在Eureka注册)重定向到应用程序。 例如: https://example.com/bar重定向到应用程序URL(http://example.app.url.com:8010/bar

  • 我试图在我的应用程序中实现jpa 发展能力 所以,我的DataConfig看起来像这样: 但是,当我尝试启动应用程序时,会出现错误消息。制造战争- 已连接到服务器[2018-09-26 09:54:32631]工件未命名:正在部署工件,请稍候。。。2018年9月26日09:54:34.460警告[RMI TCP连接(3)-127.0.0.1]组织。阿帕奇。公猫dbcp。dbcp2。基本资源工厂。g