问题
现有个web项目, 尝试了两种方式启动:
- 方式1: 将其部署到Tomcat中, 直接启动tomcat, 能够初始controller类.
- 方式2: 以maven方式启动, 却不能够初始化controller类. 利用内置的tomcat6, 还是手动添加tomcat7插件均不能成功. 结果是项目能够正常启动, 但是访问controller报404, 因为启动项目时根本就没有初始化controller.
maven方式启动过程:
-
tomcat7:run
命令启动项目 - 加载springmvc的Servlet, 加载
DispatcherServlet
. - 放行后, 如果能够加载controller类, 则会跳至controller类的构造方法. Tomcat方式启动能够跳转, 但是maven方式启动, 直接过了, 项目启动结束.
相关配置
web.xml中配置springmvc的前端控制器
<!-- springmvc前端控制器 -->
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载springmvc核心配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:springmvc.xml</param-value>
</init-param>
<!-- 框架随着web容器启动而初始化 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置访问拦截的url -->
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
springmvc.xml配置
controller类
@Controller
//@Log4j
public class ItemController {
public static final Logger log = Logger.getLogger(ItemController.class);
public ItemController() {
log.info("com.e3.controller.ItemController.ItemController 初始化..."); //加断点
}
@RequestMapping("/foo2")
@ResponseBody
public String foo2(){
System.out.println("ok"); //加断点
return "ok";
}
}
pom.xml文件中tomcat7插件配置
<!--配置tomcat7插件-->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!--web项目url根路径-->
<path>/</path>
<!--tomcat运行端口-->
<port>8082</port>
</configuration>
</plugin>
</plugins>
把 <load-on-startup>改大一点试一试