gpt4 book ai didi

java - 带有基于注释的映射的 Spring 3 简单无扩展 url 映射 - 不可能吗?

转载 作者:搜寻专家 更新时间:2023-11-01 02:34:21 24 4
gpt4 key购买 nike

我正在使用 Spring 3,并尝试使用注释来设置一个简单的 Web 应用程序来定义 Controller 映射。如果不在所有 url 中添加 *.form 或 *.do,这似乎非常困难

因为部分站点需要密码保护,所以这些url都在/secure下。有一个 <security-constraint>在 web.xml 中保护该根目录下的所有内容。我想将所有 Spring Controller 映射到/secure/app/。

示例 URL 为:
/安全/应用程序/着陆页
/secure/app/edit/customer/{id}
每一个我都会用适当的 jsp/xml/whatever 来处理。

所以,在 web.xml 中我有这个:

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

<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/secure/app/*</url-pattern>
</servlet-mapping>

在 despatcher-servlet.xml 中我有这个:

 <context:component-scan base-package="controller" />

在 Controller 包中我有一个 Controller 类:

package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

@Controller
@RequestMapping("/secure/app/main")
public class HomePageController {
public HomePageController() { }

@RequestMapping(method = RequestMethod.GET)
public ModelAndView getPage(HttpServletRequest request)
{
ModelAndView mav = new ModelAndView();
mav.setViewName("main");
return mav;
}
}

在/WEB-INF/jsp 下,我有一个“main.jsp”,并且设置了一个合适的 View 解析器来指向它。使用 *.form 映射调度程序时,我可以正常工作,但使用上述代码无法正常工作。

当 Spring 启动时,它似乎正确映射了所有内容:

13:22:36,762  INFO main annotation.DefaultAnnotationHandlerMapping:399 - Mapped URL path [/secure/app/main] onto handler [controller.HomePageController@2a8ab08f]

我还注意到这一行,看起来很可疑:

13:25:49,578 DEBUG main servlet.DispatcherServlet:443 - No HandlerMappings found in servlet 'dispatcher': using default

在运行时,任何试图查看/secure/app/main 的尝试都会在 Tomcat 中返回一个 404 错误,日志输出如下:

13:25:53,382 DEBUG http-8080-1 servlet.DispatcherServlet:842 - DispatcherServlet with name 'dispatcher' determining Last-Modified value for [/secure/app/main]    
13:25:53,383 DEBUG http-8080-1 servlet.DispatcherServlet:850 - No handler found in getLastModified
13:25:53,390 DEBUG http-8080-1 servlet.DispatcherServlet:690 - DispatcherServlet with name 'dispatcher' processing GET request for [/secure/app/main]
13:25:53,393 WARN http-8080-1 servlet.PageNotFound:962 - No mapping found for HTTP request with URI [/secure/app/main] in DispatcherServlet with name 'dispatcher'
13:25:53,393 DEBUG http-8080-1 servlet.DispatcherServlet:677 - Successfully completed request

所以... Spring 映射一个 URL,然后在一秒钟后“忘记”该映射?这是怎么回事?

谢谢。

最佳答案

我遇到了和你一样的问题。设置“alwaysUseFullPath”的方法非常简单。我的配置文件如下:

<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"
p:order="3" > <!-- a higher value meaning greater in terms of sorting. -->
<property name="alwaysUseFullPath" value="true" />
<property name="interceptors">
<list>
<ref local="myInterceptor" />
</list>
</property>
</bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="alwaysUseFullPath" value="true" />
</bean>

关于java - 带有基于注释的映射的 Spring 3 简单无扩展 url 映射 - 不可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2425255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com