2017-06-14 132 views
0

我使用Spring Mvc app並獲取HTTP狀態[404] - [未找到]。着陸頁即是index.jspSpring Mvc App get - HTTP Status [404] - [Not Found]

enter image description here

,並從控制器的方法調用,

@Controller 
public class BitcoinWalletController { 

    @RequestMapping("/") 
    public String showBitcoinWallet() { 

     return "index"; 
    } 
} 

index.jsp頁,寄錢按鈕最初是禁用的,

<div class="buttons_box"> 
      <button type="button" class="btn btn-default btn-lg active" <%= canSendMoney ? "" : "disabled='true'"%> 
        data-toggle="modal" data-target="#myModal">Send money 
      </button> 
     </div> 

和僅在同步完成時纔有效,並且boolean canSendMoney返回true

如果按鈕被激活,該代碼處理提供了POST操作,

 <%--modal contents here--%> 
     <div class="modal-content"> 

      <div class="model-header"> 
       <button type="button" class="close" data-dismiss="modal">&times!</button> 
       <h4 class="modal-title">Send Money</h4> 
      </div> 

      <form id="send-form" class="form-horizontal" action="sendMoney.jsp" method="POST"> 

       <div class="modal-body"> 

        <div class="form-group"> 
         <label for="amount" class="col-sm-2 control-label">Send</label> 
         <div class="col-xs-4"> 
          <input id="amount" name="amount" class="form-control" value="0"> 
         </div> 
         <div class="btc-col"> 
          <span>BTC</span> 
         </div> 
        </div> 

        <div class="form-group"> 
         <label for="address" class="col-sm-2 control-label">to</label> 
         <div class="col-sm-10"> 
          <input id="address" name="address" class="form-control"> 
         </div> 
        </div> 
       </div> 

       <div class="modal-footer"> 
        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> 
        <button type="submit" class="btn btn-default">Send</button> 
       </div> 

      </form> 
     </div> 

sendMoney.jsp代碼如下規定,

<body> 
<% 
    String amount = request.getParameter("amount").trim(); 
    String address = request.getParameter("address").trim(); 

    WalletSendMoneyController.getSendMoneyController().send(address, amount); 

    // New location to be redirected 
    String site = new String("/"); 
    response.setStatus(response.SC_MOVED_TEMPORARILY); 
    response.setHeader("Location", site); 
%> 
</body> 

當我把所有需要的和正確的相關信息和按下按鈕,應該返回原來的頁面 - index.jsp。相反,我得到的錯誤,HTTP Status [404] – [Not Found]

enter image description here

我目前沒有任何句柄地址http://localhost:8080/sendMoney.jsp。因爲,如果POST提交是正確的,我想重定向到「/」。

我有jsps在項目目錄中WEB-INF文件夾,

enter image description here

dispatcher-servlet.xml文件中提供的jsps位置,

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

we.xml知道哪裏dispatcher-servlet.xml位於,

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

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

如何解決這個問題?謝謝。

+1

POST請求假設爲在控制器的方法。 '/ sendMoney.jsp'實際上是試圖找到映射到控制器但沒有找到任何東西。所以它會拋出404 – Zico

+0

什麼是RequestMapping?它應該返回什麼?我只需要按'send money'按鈕後彈出頁​​面'sendMoney.jsp',然後重定向到'index.jsp'(地址'http:// localhost:8080) – Arefe

+0

'一個控制器接收POST請求。在該控制器中執行'..money.send()'以及其他事情。然後從控制器重定向到'/'。 – Zico

回答

1

您的代碼顯示:您實際上正在嘗試將表單提交至sendMoney.jsp,這不存在(可能是因爲我看不到您的整個項目)。雖然您需要將表單提交給您需要創建的ModelAttribute控制器。

以下的事情你必須做的POST從控制器從窗體。

使表單域的一類

public class Data { 
    private String address; 
    private String amount; 

    public Data() { 
    } 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    public String getAmount() { 
     return amount; 
    } 

    public void setAmount(String amount) { 
     this.amount = amount; 
    } 
} 

綁定在GET控制器新的數據對象,其中加載的形式在HTML

@RequestMapping("/") 
public String showBitcoinWallet() { 
    model.addAttribute("data", new Data()); 
    return "index"; 
} 

下面的表格將在您的index.jsp頁面,其中/send是控制器的映射在哪裏POST的形式

<form:form id="send-form" modelAttribute="data" class="form-horizontal" action="/send" method="POST"> 

    <div class="modal-body"> 

     <spring:bind path="amount"> 
     <div class="form-group"> 
      <label for="amount" class="col-sm-2 control-label">Send</label> 
      <div class="col-xs-4"> 
       <form:input path="amount" id="amount" name="amount" class="form-control" value="0"></form:input> 
      </div> 
      <div class="btc-col"> 
       <span>BTC</span> 
      </div> 
     </div> 
     </spring:bind> 

     <spring:bind path="address"> 
     <div class="form-group"> 
      <label for="address" class="col-sm-2 control-label">to</label> 
      <div class="col-sm-10"> 
       <form:input path="address" id="address" name="address" class="form-control"></form:input> 
      </div> 
     </div> 
     </spring:bind> 
    </div> 

    <div class="modal-footer"> 
     <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> 
     <button type="submit" class="btn btn-default">Send</button> 
    </div> 

</form:form> 

繼控制器/send POST

@RequestMapping(value = "/send", method = RequestMethod.POST) 
    public String sendMoney(Data data) { 
     //here will be your code for send money and whatever you have to do.. 
     ...send(data.getAddress(), data.getAmount()); 
     return "redirect:/"; //here will the location where you want to redirect 
    } 
+0

'sendMoney.jsp'確實在項目中。 – Arefe

+0

這是一個jsp文件。不是控制器映射。 – Zico

+0

這是正確的,我同意 – Arefe

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

你是否在你的spring-config.xml文件中定義了這個?

+0

是的,請查看更新後的問題。 – Arefe

相關問題