当前位置: 首页 > 知识库问答 >
问题:

Eclipse动态web模块3.0中的Apache tomcat问题

江子石
2023-03-14

@Controller
public class HomeController {

private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

/**
 * Simply selects the home view to render by returning its name.
 */
@RequestMapping(method = RequestMethod.GET)
public String home(Locale locale, Model model) {
    logger.info("Welcome home! The client locale is {}.", locale);

    Date date = new Date();
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);

    String formattedDate = dateFormat.format(date);

    model.addAttribute("serverTime", formattedDate );

    return "home";
}
}

没有任何错误的新控制台输出是:

2015年6月20日下午6:33:38组织。阿帕奇。卡特琳娜。果心ApplicationContext日志信息:初始化Spring根WebApplicationContext信息:org。springframework。网状物上下文ContextLoader-根WebApplicationContext:初始化已开始信息:org。springframework。网状物上下文支持XmlWebApplicationContext-刷新根WebApplicationContext:启动日期[2015年6月20日星期六18:33:38 PKT];上下文层次结构信息的根:org。springframework。豆。工厂xml。XmlBeanDefinitionReader-从ServletContext资源[/WEB-INF/spring/root-context.XML]信息:org加载XML bean定义。springframework。豆。工厂支持DefaultListableBeanFactory—在组织中预实例化单例。springframework。豆。工厂支持DefaultListableBeanFactory@1a8f100:定义bean[];工厂层次结构信息的根:组织。springframework。网状物上下文ContextLoader-根WebApplicationContext:初始化于893 ms 2015年6月20日下午6:33:39 org完成。阿帕奇。卡特琳娜。果心ApplicationContext日志信息:正在初始化Spring FrameworkServlet“appServlet”信息:org。springframework。网状物servlet。DispatcherServlet-FrameworkServlet“appServlet”:初始化已开始信息:org。springframework。网状物上下文支持XmlWebApplicationContext-刷新命名空间“appServlet servlet”的WebApplicationContext:启动日期[Sat Jun 20 18:33:39 PKT 2015];父:根WebApplicationContext信息:org。springframework。豆。工厂xml。XmlBeanDefinitionReader-从ServletContext资源[WEB-INF/spring/appServlet/servlet-context.XML]信息:org加载XML bean定义。springframework。上下文注释。ClassPathBeanDefinitionScanner-JSR-250’javax。注释。找到并支持组件扫描信息:org的ManagedBean。springframework。上下文注释。ClassPathBeanDefinitionScanner-JSR-330’javax。注射已找到并支持名为“”的批注,用于组件扫描信息:org。springframework。豆。工厂注释。AutowiredAnnotationBeanPostProcessor-JSR-330’javax。注射自动关联信息:org找到并支持Inject注释。springframework。豆。工厂支持DefaultListableBeanFactory—在组织中预实例化单例。springframework。豆。工厂支持DefaultListableBeanFactory@1c047f0:定义bean[org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0,org.springframework.web.servlet.handler.MappeInterceptor#0,org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver#0,或g、 springframework。网状物servlet。mvc。注释。ResponseStatusExceptionResolver#0,组织。springframework。网状物servlet。mvc。支持DefaultHandlerExceptionResolver#0,组织。springframework。网状物servlet。处理程序。BeanNameUrlHandlerMapping,org。springframework。网状物servlet。mvc。HttpRequestHandlerAdapter,org。springframework。网状物servlet。mvc。SimpleControllerHandlerAdapter,org。springframework。网状物servlet。资源ResourceHttpRequestHandler#0,组织。springframework。网状物servlet。处理程序。SimpleUrlHandlerMapping#0,组织。springframework。网状物servlet。看法InternalResourceViewResolver#0,homeController,组织。springframework。上下文注释。内部配置AnnotationProcessor,组织。springframework。上下文注释。InternalAutowiredNotationProcessor,组织。springframework。上下文注释。internalRequiredAnnotationProcessor,组织。springframework。上下文注释。internalCommonAnnotationProcessor,组织。springframework。上下文注释。ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0];父级:组织。springframework。豆。工厂支持DefaultListableBeanFactory@1a8f100信息:组织。springframework。网状物servlet。mvc。方法注释。RequestMappingHandlerMapping-将“{[/],方法=[获取],参数=[],头=[],消耗=[],生产=[],自定义=[]}”映射到公共java上。lang.字符串回家。通用域名格式。网状物HomeController。主页(java.util.Locale,org.springframework.ui.Model)信息:org。springframework。网状物servlet。处理程序。SimpleUrlHandlerMapping—将URL路径[/resources/**]映射到处理程序的组织上。springframework。网状物servlet。资源ResourceHttpRequestHandler#0’信息:org。springframework。网状物servlet。DispatcherServlet-FrameworkServlet“appServlet”:初始化在2619毫秒内完成

这个在http://localhost:8080还显示HTTP状态404在这种情况下有任何提示吗?我该怎么办?

共有1个答案

缑永年
2023-03-14

您的问题与eclipse或eclipse中的动态web模块无关,只是存在多个问题。您的spring配置中存在一般性问题。

您正在尝试通过RequestMapping映射“/”,这甚至在Spring MVC 4.1.6中都不起作用,与eclipse或动态web模块无关。

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
- Mapped "{[/],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}"
onto public java.lang.String sd.sdse.dsdds.HomeController.home(java.util.Locale,org.springframework.ui.Model)

关于如何在spring.io论坛中定义到上下文根目录的映射,还有更多类似的问题,例如“@Request estMap指向/”

您可以通过将Spring Dispatcher Servlet映射到“/”not“/*”并从@Request estMap注释中删除显式映射到“/”来归档它。

您共享的项目不是生成日志输出的项目。该项目在Tomcat上部署和执行时甚至不会启动SpringContext。

要启动SpringContext,您必须在web中配置ContextLoadListener和/或DispatcherServlet。xml如下所示:

<display-name>Home</display-name>
   <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/servlet-config.xml</param-value>
</context-param>

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value></param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> 

或者,您需要一个实现WebApplicationInitializer接口的类,如下所示:

public class WebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext context) {
        XmlWebApplicationContext rootContext = 
                new XmlWebApplicationContext();
        rootContext.setConfigLocation("/WEB-INF/spring/root-context.xml");

        context.addListener(new ContextLoaderListener(rootContext));

        // Create the dispatcher servlet's Spring application context
        XmlWebApplicationContext servletContext = 
                new XmlWebApplicationContext();
        servletContext.setConfigLocation("/WEB-INF/spring/appServlet/servlet-context.xml");

        // add the dispatcher servlet and map it to /
        ServletRegistration.Dynamic dispatcher = 
                context.addServlet("springDispatcher", new DispatcherServlet(servletContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");

    }

}

它从项目中使用的位置加载spring配置文件(root-context.xml,servlet-context.xml)。

可以在github上找到使用WebApplicationInitializer的固定版本。我给你发了一个请求。

固定版本的控制台输出为:


INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@76dc331c: defining beans [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0,org.springframework.web.servlet.handler.MappedInterceptor#0,org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver#0,org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver#0,org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver#0,org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#0,org.springframework.web.servlet.view.InternalResourceViewResolver#0,homeController,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@5c23f9fd
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.dom.son.HomeController.home(java.util.Locale,org.springframework.ui.Model)
INFO : org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/resources/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'springDispatcher': initialization completed in 430 ms
Jun 21, 2015 12:45:28 PM org.apache.coyote.AbstractProtocol start
Information: Starting ProtocolHandler ["http-bio-8080"]
Jun 21, 2015 12:45:28 PM org.apache.coyote.AbstractProtocol start
Information: Starting ProtocolHandler ["ajp-bio-8009"]
Jun 21, 2015 12:45:28 PM org.apache.catalina.startup.Catalina start
Information: Server startup in 2048 ms
INFO : com.dom.son.HomeController - Welcome home! The client locale is de_DE.

为了修复eclipse问题,我建议从eclipse中删除旧项目,并从github重新导入固定版本。

在Eclipse中:

  • 在服务器视图中,停止Tomcat实例
  • 从Tomcat(上下文菜单)中删除部署-

 类似资料:
  • 我有一个mavenized的基于代码配置的Spring 3.2.4 web应用程序。当我第一次用maven/pom.xml构建应用程序时,我得到了一个错误,即web.xml丢失了。首先,我尝试创建一个空的web.xml。这是项目方面发生变化的时刻(我不知道为什么)。它从动态Web模块3.0切换到3.1,这是不可逆转的。我怎样才能把它再次改为动态Web模块3.0??? 另外,我不能删除JAX-RS。

  • 问题内容: 我的问题是,即使将“ Deployment Assembly”设置为包括maven依赖项,这也导致找不到我的类,我也不知道该怎么办。 我只是注意到该类,因为其他类似乎已包含在我的软件包中。 我的文件pom.xml 我的文件web.xml 问题答案: 出现此问题的原因可能是: 某些库版本不匹配(例如,要编译的Java版本!= Web应用程序服务器上的Java版本)。 部署期间不包括必需的

  • 我想把.html文件和.java文件放在同一个包中,放在/src/main/java下,但是在创建新的.html文件时,Eclipse提供/webapp作为默认文件夹。有没有办法改变这种行为?

  • 我在Eclipse中有一个动态Web项目。使用带有Axis2的Tomcat7。在project facets中,我已经用Dynamic Web Module2.2配置了AXIS2(因为AXIS2不能使用Web Module3.0)。 但是当我尝试使用WebService wizard(new->Web Service)时,Eclipse尝试使用Web模块3.0创建Web服务,忽略origin项目的

  • 看起来好像什么都没有出问题,但我一定是错过了什么,因为我总是收到这个错误。 下面是my.settings/org.eclipse.wst.common.project.facet.core.xml的内容 在我试图压制这个看似不相关的错误消息时,任何帮助都非常感谢。 编辑:添加了pom.xml内容

  • 我有这个问题:无法将project facet Dynamic Web Module的版本更改为3.0 你有主意吗?多谢了。