当前位置: 首页 > 面试题库 >

如何在Spring MVC控制器中映射动态URL / prj / noticeOpen / 2

蔺弘
2023-03-14
问题内容

我在以下网址上遇到了麻烦:

<a href="/noticeOpen/2">dynamicLink</a>

使用以下控制器方法进行映射:

@RequestMapping(value="/noticeOpen/{quesId}") 
public ModelAndView noticeOpen(@ModelAttribute("NoticeForm") NoticeForm noticeForm,
                               ModelMap model,
                               @PathVariable("quesId") Integer quesId){
    System.out.println(quesId);
    return new ModelAndView("/noticeOpen","noticeForm",noticeForm);

}

当我单击锚定dynamicLink时,问题开始了,它没有将控制权转移到我的控制器,而是在浏览器的地址栏中显示了以下内容:

http://127.0.0.1:8080/prj/noticeOpen/2/WEB-INF/pages/noticeOpen.jsp

而且我在applicationContext.xml中有以下映射

 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>WEB-INF/pages/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
</bean>

如果我从控制器的@RequestMapping中删除{quesId}和从方法签名中删除@PathParam(也从锚中删除问题ID),这一切都很好

http://127.0.0.1:8080/prj/noticeOpen 

但这听起来并不动态,无法满足我的要求。

web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

   <display-name>Spring Web MVC Application</display-name>

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

  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
  </servlet-mapping>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
  <listener>
        <listener-class>
        org.springframework.web.context.ContextLoaderListener
        </listener-class>
  </listener>   
</web-app>

更新资料

/noticeOpen/{quesId}为其创建了新的Controller,并且现在获得了该控件,但是我无法理解以下方法的行为。请在NoticeController上查看以下内容,然后得出以下结果:

  @Controller
public class NoticeController {


    @RequestMapping(value="/noticeOpen/{quesId}") 
    public ModelAndView noticeOpen(@ModelAttribute("NoticeForm") NoticeForm noticeForm,ModelMap model,@PathVariable("quesId") Integer quesId){

        return new ModelAndView("noticeOpen","noticeForm",noticeForm);

    }

    @RequestMapping(value="/noticeOpen") 
    public ModelAndView noticeOpen(@ModelAttribute("NoticeForm") NoticeForm noticeForm,ModelMap model){

        return new ModelAndView("noticeOpen","noticeForm",noticeForm);

    }

@RequestMapping(value="/noticeOpen")它将我重定向到正确的noticeOpen.jsp @RequestMapping(value="/noticeOpen/{quesId}"),将我重定向到以下错误页面

HTTP Status 404 - /prj/noticeOpen/WEB-INF/pages/noticeOpen.jsp
type Status report
message /prj/noticeOpen/WEB-INF/pages/noticeOpen.jsp
description The requested resource is not available.
Apache Tomcat/6.0.36

问题答案:

如下更改你的applicationContext.xml中的前缀值

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/pages/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
</bean>

WEB-INF之前的斜线将起作用。



 类似资料:
  • http://some-amazon-link:8080/the-war-name/login 现在我正在纠结如何在Spring MVC项目中添加“/the-war-name/”以及在哪里添加“/the-war-name/”。 它在 null

  • null 我不能共享代码,因为它不是公共的。谢谢你调查这件事。

  • 我有一个Spring Boot web应用程序,它可以服务于静态页面和基于控制器的页面(ModelAndView)。问题是,控制器可以提供类似于<代码>/{字符串}的服务,而静态页面必须提供<代码>/测试。 问题是控制器映射优先,我需要避免这种情况。如果用户点击测试,则必须将其转发到测试。html静态页面。 我尝试以这种方式使用ViewControlller注册表的order属性,但没有成功: 这

  • 我想使用@SessionAttributes注释在SpringMVC中的两个控制器之间共享会话属性。 下面是我用来测试属性共享的一个简单代码:AController。JAVA a.jsp BController.java b.jsp 我期望的行为是转到 /aURL,myParam将被设置为0到99之间的随机值,然后该值将在两个控制器之间共享。 但是,会发生以下情况:我转到/a URL,myPara

  • 问题内容: 我仍然是Angularjs的新手。我想在控制器中动态注入服务(我创建的)的依赖项。 但是,当我对具有依赖项的服务进行编码时,出现此错误: 错误:未知提供程序:$ windowProvider <-$ window <-base64 这是控制器的代码。 此代码有效: 此代码不起作用: 另一个问题是服务与控制器位于同一模块中。如果模块具有依赖项,则无法使用(我的模块配置中具有$ route

  • 问题内容: 我有一个非标准的Spring MVC项目。用XML响应。是否可以创建一个视图(jsp页面),以显示所有接受的(不是必需的)控制器,映射和参数。 根据答案,我有: 我没有得到任何信息 问题答案: 随着Spring 3.1,你可以轻松浏览端点。 The controller : The view : 你也可以在Spring <3.1中使用代替。但是你不会获得相同级别的信息。 有了它们,你将