我是使用Spring MVC开发的新手。
我试图从我的jsp文件中调用控制器。
我给控制器添加了requestmapping注释,但是当我尝试从url上找到的mainview.jsp调用时:(我正在本地主机上进行测试)“ / AirlineDB_Spring / views / mainview.jsp”(这很好),
项目名称从URL中消失了,我得到的地址给我404:“ / passengers /”我不知道为什么“ AirlineDB_Spring /”从链接中消失了,这似乎是主要问题。

我的控制器代码:

@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文件的代码是:

<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文件:

  <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>


servlet-context.xml包含以下内容:

 <context:annotation-config/>
 <context:component-scan base-package="airlinedb.controller"/>
 <mvc:annotation-driven/>


我在互联网上搜索,发现与控制器映射有关的许多问题,但这些问题都不适合我,我也尝试使用href =“ / passenger”调用控制器,但得到了相同的404。
我不知道我缺少什么配置,我可以看到输入了错误的URL,但是我不知道有什么问题。
谁能帮我?

最佳答案

当您执行<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对您也有好处。尝试如下使用:

@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";
    }


将值=“ /”添加到您的@RequestMapping中。

07-26 07:09