鍍金池/ 問答/Java  Linux  網(wǎng)絡(luò)安全/ 為什么maven+tomcat插件啟動web項(xiàng)目后無法初始化controller

為什么maven+tomcat插件啟動web項(xiàng)目后無法初始化controller類?

問題

現(xiàn)有個web項(xiàng)目, 嘗試了兩種方式啟動:

  • 方式1: 將其部署到Tomcat中, 直接啟動tomcat, 能夠初始controller類.
  • 方式2: 以maven方式啟動, 卻不能夠初始化controller類. 利用內(nèi)置的tomcat6, 還是手動添加tomcat7插件均不能成功. 結(jié)果是項(xiàng)目能夠正常啟動, 但是訪問controller報(bào)404, 因?yàn)閱禹?xiàng)目時根本就沒有初始化controller.

maven方式啟動過程:

  1. tomcat7:run命令啟動項(xiàng)目
  2. 加載springmvc的Servlet, 加載DispatcherServlet.

    clipboard.png

  3. 放行后, 如果能夠加載controller類, 則會跳至controller類的構(gòu)造方法. Tomcat方式啟動能夠跳轉(zhuǎn), 但是maven方式啟動, 直接過了, 項(xiàng)目啟動結(jié)束.

相關(guān)配置

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

clipboard.png

controller類

@Controller
//@Log4j
public class ItemController {
    public static final Logger log = Logger.getLogger(ItemController.class);
    public ItemController() {
        log.info("com.e3.controller.ItemController.ItemController 初始化...");    //加斷點(diǎn)
    }

    @RequestMapping("/foo2")
    @ResponseBody
    public String foo2(){
        System.out.println("ok");    //加斷點(diǎn)
        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項(xiàng)目url根路徑-->
                    <path>/</path>
                    <!--tomcat運(yùn)行端口-->
                    <port>8082</port>
                </configuration>
            </plugin>
        </plugins>
回答
編輯回答
疚幼
問題已解決

初步原因

原來是maven在編譯的時候, 沒有將resources目錄下的.xml文件編譯到classes目錄下, 導(dǎo)致SpringMvc的Servlet讀取不到配置文件. 也就無法初始化controller類了.

至于為什么沒有將配置文件放進(jìn)classes目錄下的原因尚不明了.

解決辦法

在pom.xml中配置, 指定將resource目錄下的文件包含即可.

clipboard.png

注意: <filtering>true</filtering>可能會導(dǎo)致讀取xml文件IO異常. 若是, 換成: <filtering>false</filtering>.
這個標(biāo)簽是什么意思, 筆者暫時不知! 有知道的麻煩評論告知, 多謝!

2017年4月14日 14:42
編輯回答
失魂人

把 <load-on-startup>改大一點(diǎn)試一試

2017年2月5日 01:09