簡體   English   中英

來自jsp的Spring mvc調用控制器導致錯誤的url

[英]Spring mvc calling controller from jsp results in wrong url

我是使用Spring MVC開發的新手。 我試圖從我的jsp文件中調用控制器。 我向請求控制器發出了requestmapping注釋,但是當我嘗試從url上的mainview.jsp調用時:(我在localhost上測試)“/AirlineDB_Spring/views/mainview.jsp”(這個工作正常),項目名稱從網址中消失,我得到這個地址給了我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.我不知道是什么配置我錯過了,我可以看到我得到了錯誤的網址,但我不知道可能出錯了什么。 誰能幫我?

當你<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。

這兩種方法都應該有效。 您可以使用索引方法,這是默認映射。

@RequestMapping(value="/", method=RequestMethod.GET)
    public String list(Model model) {
        // ...
    }

或者將list重命名為index ,如下所示

 @RequestMapping(method=RequestMethod.GET)
        public String index(Model model) {
            // ...
        }

這似乎是第一次斜線

<a href="/passengers/">click</a>

使它成為絕對的道路。 如果你刪除它會有效嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM