【问题标题】:How to change a requested url in spring mvc, before going to controller在进入控制器之前如何在spring mvc中更改请求的url
【发布时间】:2017-02-20 04:58:40
【问题描述】:

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

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

 }

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

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

更新

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>

【问题讨论】:

  • 明白你想要什么。但不清楚你的错误是什么以及你做了什么。为什么链接有.html?因为是Spring MVC,所以必须是http://localhost:8083/releaseDashboard/project/CSOB
  • web.xml 就是这样配置的。这不是问题。如果我从 web.xml 中删除该 html,我的 url 将与您在 cmets 中提到的相同。
  • 请使用您的配置文件 - web.xml、spring 配置文件等编辑您的问题。您是如何配置视图解析器的?
  • @RamanujanR 更新了我的问题。请看

标签: spring spring-mvc filter interceptor path-variables


【解决方案1】:

您在 Spring MVC 上下文中的 web.xml 中的配置不正确。 将其编辑为&lt;url-pattern&gt;/&lt;/url-pattern&gt;。这样,对您项目的所有请求都将通过“调度程序 servlet”。

(你也可以像这样使用&lt;url-pattern&gt;something-here&lt;/url-pattern&gt;。那么你的基本网址应该有一个额外的'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”和“视图解析”。

注意:

根据您当前的配置,“您必须更改请求的 URL”。不,你不能。那么你的网址可能是http://localhost:8083/releaseDashboard/project/CSOB.htmlprojectName 是“CSOB.html”。然后你必须使用 java substring 函数从“CSOB.html”中提取“CSOB”。这是一个丑陋的东西!

【讨论】:

猜你喜欢
  • 2019-08-08
  • 2018-11-28
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多