如何将spring控制器URL配置为没有扩展?
我的控制器目前被映射为类似的东西,当然,我认为这是愚蠢的,想要更好的东西,比如或者没有扩展。但是,当我尝试配置它时,我无法让它工作。很明显,我缺少了对整个地图理解的一个关键部分。我正在为控制器使用Spring3.x、tomcat和注释 我的web.xml如下所示:如何将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
<?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”