【问题标题】:Spring Mvc get HTTP Status [404] – [Not Found] after the submissionSpring Mvc 提交后获取HTTP Status [404] - [Not Found]
【发布时间】:2017-06-14 08:15:16
【问题描述】:

我使用 Spring Mvc 并让控制器返回 index.jsp 页面,

@Controller
public class BitcoinWalletController {

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

      return "index";
   }
}

这是index.jsp页面,

处理提交操作的代码(index.jsp内),

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

提供sendMoney.jsp的代码,

<%@ page import="com.puut.bitcoin.WalletSendMoneyController" %>

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

我希望在提交弹窗后,我应该重定向到原来的index.jsp 页面。

相反,我收到以下错误,

HTTP Status [404] – [Not Found] after the submission

应用结构,

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>

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

我没有其他 mapping 然后是 @RequestMapping("/")

如果我从 index.jsp 中删除 action="sendMoney.jsp" 并按照建议使用 POST 方法的另一个控制器,我会收到以下错误堆栈,

Type Exception Report

Message Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.springframework.http.MediaType.compareTo(Lorg/springframework/http/MediaType;)I

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.springframework.http.MediaType.compareTo(Lorg/springframework/http/MediaType;)I
    org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1259)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

如何解决这个问题?谢谢。

【问题讨论】:

  • 使用 @RequestMapping("/sendMoney") 将 sendMoney.jsp 代码移动到新控制器中,并在其中重定向主页。设置 html 表单 action="sendMoney" 来调用它。

标签: java jsp spring-mvc


【解决方案1】:

请尝试处理来自控制器的发布请求

@RequestMapping(value="/", method=RequestMethod.POST)
   public ModelAndView PostBitcoinWallet(@RequestParam String amount,@RequestParam String address) {

      ModelMap modelMap = new ModelMap();
        modelMap.put("amount", amount);
        modelMap.put("address", address);

      return new ModelAndView("sendMoney",modelMap);
   }

在 sendMoney.jsp 上,您可以获取放在 modelMap 上的参数:

<label>Amount</label> <span>${amount}</span>
<label>Adress</label> <span>${address}</span>

为了最佳实践,不要在 jsp 文件中包含 java 代码

【讨论】:

  • 我不想加入URL localhost:8080/sendMoney.jspsend money 按钮应弹出提供的提交选项,在 send 之后应进入原始页面。我该如何解决?
  • 您可以像这样在 Post Request 映射上返回重定向:return "redirect:http://www.google.com"
  • 我已将您的代码放置到位。不过还是不行。
  • 能否请您分享新控制器以进行更多调查
  • 我只是测试了一个简单的控制器,它可以进行重定向:@RequestMapping(value = { "/"}, method = RequestMethod.POST) public String defaultPage() { return "redirect:http://www.google.com"; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多