在 Tomcat 部署 Appfuse SpringMCV

Deploy Appfuse SpringMCV in Tomcat

我想问一下如何在tomcat等应用服务器中部署应用程序,我使用SpringMVC,运行在idea中使用jetty,当我运行在localhost:8080, 它可以工作,但是当在 tomcat 中使用 war 部署时,url 将类似于 localhost:8080/app,显示登录,但是当控制器调用新页面时失败了,请帮帮我

我重现Appfuse的步骤是:

  1. http://appfuse.org/display/APF/AppFuse+QuickStart、运行 之后生成的 mvn 命令
  2. mvn appfuse:full-源码
  3. 直到这一步,当我运行 "mvn jetty:run",它运行 OK,要么我使用"mvn jetty:run-war"创建war并且有demo.war 并且我部署到 tomcat 仍然可以
  4. 我添加了一些菜单和页面,其中之一是 accountStatement.jsp 和 accountStatementResult.jsp 及其控制器。 accountStatement页面选择期间日期,然后点击ext按钮后会有accountStatement的结果。
  5. accountStatement.jsp 的结果如下: 你可以在这个 link 中试试,我已经在 amazonaws.ec2 服务器上部署了: http://ec2-54-175-88-32.compute-1.amazonaws.com:8080/demo/ 用户名是 user/user 或 admin/admin

  6. 我使用提交按钮,在AccountStatementController.java里面一些重要的代码如下:

    public AccountStatementController() {
    setCancelView("redirect:home");
    setSuccessView("/accountStatementResult");
    

    }

    @RequestMapping(方法=RequestMethod.POST) public 字符串 onSubmit( @RequestParam(value = "periodType", required = false) final String periodType, @RequestParam(value = "datepickerFrom", required = false) final String datepickerFrom, @RequestParam(value = "datepickerUntil", required = false) final String datepickerUntil, @RequestParam(value = "months", required = false) final String months, final RedirectAttributes redirectAttributes, 最终的 HttpServletRequest 请求) 抛出异常 { String period = datepickerFrom + " - " + datepickerUntil; 如果(periodType.equals("monthly")){ 期间 = 月; }

    redirectAttributes.addFlashAttribute("period", period);
    
    return getSuccessView();
    

    }

  7. 当我运行从intellij Idea使用"mvn jetty:run"它运行完美,按下提交按钮后,它将重定向到accountStatementResult页面。

  8. 但是当我创建demo.war并在tomcat中部署时它运行错误,在accountStatement页面和按钮之后,结果是错误的。

  9. 我认为错误在 urlwriter.xml,我曾经在我以前的办公室使用 appfuse 1.9 制作过应用程序,现在我想使用 appfus 创建和销售我自己的应用程序。非常感谢您的帮助。

我也在google代码上创建了源代码库,如果你需要查看完整代码,可以问我密码。谢谢

在 accountStatement.jsp 中,将表单的 "action" 更改为以下之一:

<form:form commandName="account" method="post" action="accountStatement" id="accountForm">

这会生成一个相对于您要提交到的控制器的 URL。或者您可以指定绝对 URL:

<form:form commandName="account" method="post" action="${ctx}/account/accountStatement" id="accountForm">

我测试并确保这两种解决方案都有效。