如何在进入控制器之前更改 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.html
; projectName
是 "CSOB.html"。然后你必须使用 java substring
函数从 "CSOB.html" 中提取 "CSOB"。这是一个丑陋的东西!
我正在使用 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.html
; projectName
是 "CSOB.html"。然后你必须使用 java substring
函数从 "CSOB.html" 中提取 "CSOB"。这是一个丑陋的东西!