如何将spring控制器URL配置为没有扩展?

如何将spring控制器URL配置为没有扩展?,spring,spring-mvc,controller,spring-3,Spring,Spring Mvc,Controller,Spring 3,我的控制器目前被映射为类似的东西,当然,我认为这是愚蠢的,想要更好的东西,比如或者没有扩展。但是,当我尝试配置它时,我无法让它工作。很明显,我缺少了对整个地图理解的一个关键部分。我正在为控制器使用Spring3.x、tomcat和注释 我的web.xml如下所示: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee

我的控制器目前被映射为类似的东西,当然,我认为这是愚蠢的,想要更好的东西,比如或者没有扩展。但是,当我尝试配置它时,我无法让它工作。很明显,我缺少了对整个地图理解的一个关键部分。我正在为控制器使用Spring3.x、tomcat和注释

我的web.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

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

    <servlet-mapping>
        <servlet-name>BooBoo</servlet-name>
        <url-pattern>*.*</url-pattern>   <!-- was *.go when it worked -->
    </servlet-mapping>

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

</web-app>
我曾尝试将web.xml中的映射更改为/mmm/*以期望URL能够正常工作,但这也不起作用。在浏览器中输入我认为正确的URL时,会出现“缺少资源”错误


我在搞什么鬼?我缺少什么关键的理解?我试着在另一个正在工作的项目中使用“无扩展”功能,但也无法实现。很明显,我遗漏了一些内容。

问题是您的dispatcher servlet正在匹配任何带有“.”的内容

换成

 <url-pattern>/*</url-pattern> 
/*
然而,这也很糟糕,因为您将无法提供静态内容

你真正应该做的是:

 <url-pattern>/webapp/*</url-pattern> 
/webapp/*

其中“webapp”是一些前缀。您的所有URL都需要加上前缀,但这仍允许您提供静态内容。

问题是您的dispatcher servlet将任何内容与其中的“.”匹配

换成

 <url-pattern>/*</url-pattern> 
/*
然而,这也很糟糕,因为您将无法提供静态内容

你真正应该做的是:

 <url-pattern>/webapp/*</url-pattern> 
/webapp/*

其中“webapp”是一些前缀。您所有的URL都需要加上前缀,但这允许您仍然提供静态内容。

答案是我没有指定使用了spring MVC内容,因此弄乱了spring-servlet.xml文件。我感谢克里斯帮助我诊断这个问题。我需要确认我尝试过的一些事情(但由于这个错误而失败)是正确的

我补充说

xmlns:mvc="http://www.springframework.org/schema/mvc"


打开那个文件,砰的一声,它开始工作了。让我挠头的是,“没有它它怎么工作?”因为它适用于*.go模式

以下是生成的完整文件:

<?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:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="com.barbar.foofoo"/>

    <!-- Enables the Spring MVC @Controller programming model -->
    <mvc:annotation-driven />

    <!--
    Declare View Resolver: when view 'view_name' is called (from the Controller), 
    the file '/jsp/view_name.jsp' will be used.
    -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

答案是,我没有指定我使用的是spring MVC内容,从而弄乱了spring-servlet.xml文件。我感谢克里斯帮助我诊断这个问题。我需要确认我尝试过的一些事情(但由于这个错误而失败)是正确的

我补充说

xmlns:mvc="http://www.springframework.org/schema/mvc"


打开那个文件,砰的一声,它开始工作了。让我挠头的是,“没有它它怎么工作?”因为它适用于*.go模式

以下是生成的完整文件:

<?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:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="com.barbar.foofoo"/>

    <!-- Enables the Spring MVC @Controller programming model -->
    <mvc:annotation-driven />

    <!--
    Declare View Resolver: when view 'view_name' is called (from the Controller), 
    the file '/jsp/view_name.jsp' will be used.
    -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>


+1解释为什么/**不是一个好主意(至少在开发环境中不是)。我以前也从未见过**构造,也没有文档记录。这是我认为它应该如何工作的,或多或少,但遗憾的是,这对我来说不起作用:“请求的资源(/booboo/webapp/fix)不可用。”我希望有一种方法可以逐步完成调度程序在决定调用(或不调用)哪个控制器时所做的决定。我的意思是,“我自己也没有建立Spring。”Marvo抱歉,我的语法错了。我是凭记忆工作的,我把它和另一个模式匹配器搞混了。以上编辑应该有效。谢谢。这或多或少也是我认为它应该起作用的方式。但我就是不能让它工作。对于我的示例,其中“booboo”是war/app名称,webapp是示例中所示的模式,“fix”是控制器映射,访问不起作用。我得到“资源()不可用”。(其中一定有一条线索,它认为我指定的资源是空的(如括号中所示)。只有指定后缀,我才能使它工作。@Marvo尝试将您的请求映射更改为“/fix”+1,以解释为什么/**不是一个好主意(至少在开发环境中不是这样)我以前也从未见过**构造,也没有文档记录。我认为它应该是这样工作的,或多或少,但遗憾的是,这对我不起作用:“请求的资源(/booboo/webapp/fix)不可用。”我希望有一种方法,当调度器决定要调用(或不调用)哪个控制器时,我可以逐步完成它正在做的决定我的意思是,我自己没有构建Spring。@Marvo我很抱歉,我的语法错了。我是从内存中工作的,我把它与另一个模式匹配器混淆了。上面的编辑应该可以工作。谢谢。这或多或少也是我读它应该工作的方式。但我就是不能让它工作。例如,在我的例子中,“boo”是war/app名称,webapp是示例中所示的模式,“fix”是控制器映射,访问不起作用。我得到“resource()不可用”。(其中必须有一条线索,它认为我指定的资源为空(如括号中所示)只有指定后缀,我才能使其工作。@Marvo请尝试将请求映射更改为“/fix”