輸入地址,瀏覽器只顯示404,並沒有其它多餘提示,在Controller類裏下斷點發現並無執行。糾結了一天後才百度到是由於servlet.xml裏沒有配置<mvc:annotation-driven />。html
<mvc:annotation-driven />是一種簡寫形式,徹底能夠手動配置替代這種簡寫形式,簡寫形式可讓初學都快速應用默認配置方案。<mvc:annotation-driven /> 會自動註冊DefaultAnnotationHandlerMapping與AnnotationMethodHandlerAdapter 兩個bean,是spring MVC爲@Controllers分發請求所必須的。沒有這兩個bean@Controller、@RequestMapping
、@RequestBody
/ResponseBody等spring mvc
註解沒法工做。web
與<mvc:annotation-driven />相似的是<context:annotation-config>,它使通用註解得以工做,如:
spring@Required
, @Autowired
, @PostConstruct。
api 註解問題解決後瀏覽器依然報404錯誤,不過有了提示,路徑不對找不到訪問資源。再次檢查servlet.xml配置,發現是文件映射路徑解析配置錯誤。
<bean 瀏覽器
class="org.springframework.web.servlet.view.InternalResourceViewResolver"服務器
p:viewClass="org.springframework.web.servlet.view.JstlView"mvc
p:prefix="classpath/view/jsp/" app
p:suffix=".jsp" />jsp
緣由是classpath在p:prefix裏不起做用,會被直接解析成「classpath」字符串。映射路徑解析規則 :假設Controller類裏returned login, 拼接prefix、suffix值造成classpath/view/jsp/login.jsp。服務器裏沒有classpath/view/jsp這個目錄,頁面發佈在/WEB-INF/classes/view/jsp/目錄下,將classpath/view/jsp/改成/WEB-INF/classes/view/jsp/,成功反問到頁面。單元測試
404錯誤解決後能夠訪問到jsp頁面,但沒法正常顯示,報500錯誤附帶提示 Unable to compile class for JSP…… The method getJspApplicationContext(ServletContext)
is undefined for the type JspFacto錯誤。 緣由是lib包中存在兩個servlet-api包引發衝突,註釋了pom.xml裏的jsp依賴後低版本的servlet-api包消失,頁面可以正常訪問。
3、spring集成Junit單元測試問題
低版本Junit jar包不兼容spring,建議用4.11以上版本。起先用4.1版本的junit包,對service層代碼進行單元測試的時候程序報錯,後來換成4.8版本仍是報錯,最後換成4.11版本才成功運行。
關於Command Object。我並無配置Command Object,Controller裏也沒有寫任何相關的代碼,或許有點關係的是我把Command類和Controller類一塊放在web包下,servlet.xml配置了這個包的掃描,且表單input標籤name屬性值和Command類屬性值一致。運行程序時竟然可以自動將表單提交數據(userName和password)封裝到Command類裏,這真實太神奇啦!這個問題待進一步學習過程當中解決。