如何在进入控制器之前更改 spring mvc 中请求的 url

How to change a requested url in spring mvc, before going to controller

我正在使用 Spring mvc 开发网络应用程序。我有显示数据库中所有项目的页面。如果我单击列出的任何项目,它将显示该特定项目的一些其他附加详细信息。这是通过使用@PathVariable 完成的。

@RequestMapping(value={"/project/{name}"})
public String viewProject(HttpServletRequest request,@PathVariable("name")     
String projectName, ModelMap model){
     .......
     .......

 }

以上是我的请求映射代码。我的 url 将是 http://localhost:8083/releaseDashboard/project/CSOB.html(csob 是我的项目名称,releaseDashboard 是我的应用程序名称)。直到这个我的应用程序工作正常。当我从这个页面点击主页按钮时,我的请求被映射到上面的控制器方法,我的 url 变成 localhost:8083/releaseDashboard/project/home.html。但是预期的 url 是 localhost:8083/releaseDashboard/home.html

谁能帮帮我?我读到我们可以使用拦截器或过滤器来更改请求的 url。但我看不到任何代码片段。

更新

Web.xml

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

    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

spring-servlet.xml

<context:component-scan base-package="com.suntec.reldashboard.controller" />
    <context:component-scan base-package="com.suntec.reldashboard.service" />
    <context:component-scan base-package="com.suntec.reldashboard.dao" />   
    <mvc:annotation-driven/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="prefix" value="/WEB-INF/jsp/" />  
        <property name="suffix" value=".jsp" />  
    </bean>

您在 Spring MVC 上下文中的 web.xml 中的配置不正确。 将其编辑为 <url-pattern>/</url-pattern>。这样,对您项目的所有请求都将通过 'dispatcher servlet'。

(你也可以这样使用<url-pattern>something-here</url-pattern>。那么你的基础url应该多出一个'something-here')。

现在您可以访问资源了,

@RequestMapping(value={"/project/{name}"})
public String viewProject(HttpServletRequest request,@PathVariable("name")     
String projectName, ModelMap model){
     .......
     .......
    return "hello";
}

由 URL http://localhost:8083/releaseDashboard/project/CSOB。然后 projectName 将是 CSOB.

您必须在 /WEB-INF/jsp/ 下有一个名为 hello.jsp 的 'jsp' 文件。在那个 jsp 文件中,您可以访问 model 个值。

使用 Spring MVC 时,不得在 URL 中使用 .html/.jsp。使用视图解析器,所有资源都绑定到一个视图。这就是必须实施的方式。这是因为它是 'MVC' 和 'view-resolving'.

注意:

根据您当前的配置,"you have to change a requested URL"。不,你不能。那么你的URL可能是http://localhost:8083/releaseDashboard/project/CSOB.htmlprojectName 是 "CSOB.html"。然后你必须使用 java substring 函数从 "CSOB.html" 中提取 "CSOB"。这是一个丑陋的东西!