首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring mvc从jsp调用控制器导致url错误

Spring mvc从jsp调用控制器导致url错误
EN

Stack Overflow用户
提问于 2013-07-11 15:30:28
回答 3查看 22K关注 0票数 1

我是使用Spring MVC进行开发的新手。我正在尝试从我的jsp文件调用控制器。我把requestmapping注解给了控制器,但是当我试图从我的mainview.jsp调用时,这个url是:"/AirlineDB_Spring/views/mainview.jsp“(这很好用),项目名称从url中消失了,我得到的地址是404:"/passengers/”我不知道为什么"AirlineDB_Spring/“会从链接中消失,这看起来是主要的问题。

我的控制器代码:

代码语言:javascript
运行
复制
@Controller
@RequestMapping(value="/passengers")
public class PassengerController{

    @SuppressWarnings("unchecked")
    @RequestMapping(method=RequestMethod.GET)
    public String list(Model model) {
        List<String> tl = new ArrayList<String>();
        tl.add("one");
        tl.add("two");
        tl.add("three");
        model.addAttribute("testlist", tl);
        return "mainview";
    }

我的jsp文件的代码是:

代码语言:javascript
运行
复制
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Airline Database</title>
</head>
<body>
     <h2>Passengers</h2>
     <a href="/passengers/">click</a>
     <c:forEach items="${model.testlist}" var="test" varStatus="loopStatus">
         ${loopStatus.count}  ${test}<br/>
     </c:forEach>
</body>
</html>

我的web.xml文件:

代码语言:javascript
运行
复制
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:WEB-INF/spring/*.xml</param-value>
  </context-param>

  <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

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

  <servlet-mapping>
    <servlet-name>airlinedb</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

THe servlet-Conext.xml包含以下内容:

代码语言:javascript
运行
复制
 <context:annotation-config/>
 <context:component-scan base-package="airlinedb.controller"/>
 <mvc:annotation-driven/>

我在互联网上搜索了一下,发现了很多与控制器映射相关的问题,但这些问题对我来说都不起作用,我也试着用href="/passenger“调用控制器,但得到了相同的404。我不知道我遗漏了什么配置,我可以看到我得到了错误的url,但我不知道哪里可能是错误的。有谁可以帮我?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-12 00:17:47

当你执行<a href="/passengers/">时,它会把你转到类似于:http://localhost:8080/passengers/的地方。

这不是你想要的。你想要http://localhost:8080/AirlineDB_Spring/passengers/

因此,要么使用<a href="/AirlineDB_Spring/passengers/">,要么使用:<a href="${pageContext.servletContext.contextPath}/passengers/">第二个选项是更好的实践。

此外,将映射值添加到RequestMapping中对您也有好处。尝试按如下方式使用:

代码语言:javascript
运行
复制
@SuppressWarnings("unchecked")
    @RequestMapping(value="/",method=RequestMethod.GET)
    public String list(Model model) {
        List<String> tl = new ArrayList<String>();
        tl.add("one");
        tl.add("two");
        tl.add("three");
        model.addAttribute("testlist", tl);
        return "mainview";
    }

将value="/“添加到您的@RequestMapping。

票数 2
EN

Stack Overflow用户

发布于 2013-07-11 15:39:57

这两种方法中的任何一种都应该有效。您可以使用索引方法,这是默认的映射。

代码语言:javascript
运行
复制
@RequestMapping(value="/", method=RequestMethod.GET)
    public String list(Model model) {
        // ...
    }

或者将list重命名为index,如下所示

代码语言:javascript
运行
复制
 @RequestMapping(method=RequestMethod.GET)
        public String index(Model model) {
            // ...
        }
票数 1
EN

Stack Overflow用户

发布于 2013-07-11 22:46:17

这似乎是第一个斜杠

代码语言:javascript
运行
复制
<a href="/passengers/">click</a>

使其成为绝对路径。如果你移除它,它会起作用吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17587505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档