Java 网络应用只能在 Netbeans 中运行
Java web app only working in Netbeans
我正在开发一个 Spring 网络应用程序,当我 运行 它来自 netbeans 时一切正常。我的项目完全基于注释,context.xml 文件是空的,没有其他 XML 文件可言。构建过程产生的 war 文件在 tomcat 管理器网页下部署良好,我能够访问登录页面。一旦按下登录按钮,通常不会重定向到主页。我注意到的一件事是,当我在 tomcat 管理器中单击我的应用程序时,我被带到 localhost:8080/MDHIS_WebClient,它正确显示了登录页面。一旦我点击登录,它就会给我一个 404 错误 URL localhost:8080/login 这是我的主控制器中执行登录过程的 post 方法的名称(注意webapp 名称不再在 URL 中)。无论我在 URL 栏中手动输入什么,已知有效的 URLs,我从来没有得到一个实际的页面,看起来登录过程甚至没有发生。我查看了所有 Tomcat 日志,没有任何错误记录。我确实阅读了其他 posts 但我没有发现一组类似的症状。我完全被这个弄糊涂了,我什至没有看到我可以在这里 post 什么相关代码。
如果您遇到过这个问题,请帮忙。
此致
* 编辑 *
这是我的 ApplicationInitializer 中的 onStartup() 方法 class :
@Override
public void onStartup(ServletContext container) throws ServletException
{
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(ApplicationConfiguration.class);
ctx.setServletContext(container);
ContextLoaderListener contextLoaderListener = new ContextLoaderListener(ctx);
ctx.getServletContext().addListener(contextLoaderListener);
ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.setLoadOnStartup(1);
servlet.addMapping("/");
}
终于在另一个论坛的 post 中找到了答案:
在你的 tomcat 的 conf/server.xml 添加:
<Context path="" docBase="NameOfYourWar" debug="0" reloadable="true"></Context>
在结束标记之前的 server.xml 文件中
这将确保您的上下文在根目录中没有 war 文件名的情况下被加载。替代方法是将您的 war 文件重命名为 ROOT.war 并删除 webapps 中的 ROOT 文件夹,然后部署您自己的 ROOT.war 文件。
我可以确认这有效!
我正在开发一个 Spring 网络应用程序,当我 运行 它来自 netbeans 时一切正常。我的项目完全基于注释,context.xml 文件是空的,没有其他 XML 文件可言。构建过程产生的 war 文件在 tomcat 管理器网页下部署良好,我能够访问登录页面。一旦按下登录按钮,通常不会重定向到主页。我注意到的一件事是,当我在 tomcat 管理器中单击我的应用程序时,我被带到 localhost:8080/MDHIS_WebClient,它正确显示了登录页面。一旦我点击登录,它就会给我一个 404 错误 URL localhost:8080/login 这是我的主控制器中执行登录过程的 post 方法的名称(注意webapp 名称不再在 URL 中)。无论我在 URL 栏中手动输入什么,已知有效的 URLs,我从来没有得到一个实际的页面,看起来登录过程甚至没有发生。我查看了所有 Tomcat 日志,没有任何错误记录。我确实阅读了其他 posts 但我没有发现一组类似的症状。我完全被这个弄糊涂了,我什至没有看到我可以在这里 post 什么相关代码。
如果您遇到过这个问题,请帮忙。
此致
* 编辑 *
这是我的 ApplicationInitializer 中的 onStartup() 方法 class :
@Override
public void onStartup(ServletContext container) throws ServletException
{
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(ApplicationConfiguration.class);
ctx.setServletContext(container);
ContextLoaderListener contextLoaderListener = new ContextLoaderListener(ctx);
ctx.getServletContext().addListener(contextLoaderListener);
ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.setLoadOnStartup(1);
servlet.addMapping("/");
}
终于在另一个论坛的 post 中找到了答案:
在你的 tomcat 的 conf/server.xml 添加:
<Context path="" docBase="NameOfYourWar" debug="0" reloadable="true"></Context>
在结束标记之前的 server.xml 文件中
这将确保您的上下文在根目录中没有 war 文件名的情况下被加载。替代方法是将您的 war 文件重命名为 ROOT.war 并删除 webapps 中的 ROOT 文件夹,然后部署您自己的 ROOT.war 文件。
我可以确认这有效!