前言:
真的是很久沒搞java的web服務開發了, 最近一次搞還是讀研的時候, 想來感慨萬千. 英雄沒落, Eclipse的盟主地位隱隱然有被IntelliJ IDEA超越的趨勢. Spring從2.x到現在4.x, 一眨眼已是二代的積淀.
本文想借助Idea, 來簡單搭建一個基於springmvc的web程序, 一為體驗, 二為技術積累.
環境配置:
idea版本為14.0.2, tomcat版本為8.0.23, idea創建的springmvc為4.1.1.RELEASE.
網上有很多圖文並茂的搭建案例, 同時也有很多教學視頻. 但我一直覺得: 紙上得來終覺淺,絕知此事要躬行. 權作學習筆記.
項目創建:
1). idea中新建工程, 選擇左側的Spring項, 再右側選擇Spring MVC標簽.
2). 選中"Create project from template"標簽, 使用默認模板.
3). 填充Project Name以及Application server.
4). springmvc項目創建完成
其是由maven管理的web服務工程
其web.xml自動填充為如下內容:
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring MVC Application</display-name> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
springmvc的DispatcherServlet會自動裝載以mvc-dispatcher開頭的xml配置文件.
而mvc-dispatcher-servlet.xml配置文件, 其內容如下所示:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.springapp.mvcaa"/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
這些配置文件和文件目錄組織都是自動生成的, 大大降低了開發springmvc的門檻. 體驗First, 然后才是熟悉和深入.
服務測試:
• web應用服務配置
1). 配置web應用服務, 點擊Run->Edit Configurations菜單項
選中tomcat服務器, 其HTTP port和JMX port端口會自動填充
2). 在Deployment子Tab中, 添加工程的war包
• 代碼准備
springmvc在創建時, 就已經帶有了HelloController的sample類.
package com.springapp.mvcaa; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/") public class HelloController { @RequestMapping(method = RequestMethod.GET) public String printWelcome(ModelMap model) { model.addAttribute("message", "Hello world!"); return "hello"; } }
具體的代碼細節, 我們暫且擱置不細講, 大致為填充key/value對 (message=>Hello World), 然后控制器轉到名為hello的jsp文件進行渲染.
• 瀏覽器測試
1). 啟動tomcat服務
2). 瀏覽器訪問
遺憾的是出現Unable to compile class for JSP的錯誤.
網上尋找資料后知曉, 該問題由maven引入的servlet-api和tomcat自帶的servlet-api版本發生了沖突.
解決方案如下:
maven的pom文件中, 把servlet-api依賴項的scope改為provided(即參與compile和test, 但不參與package).
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency>
改為如下所示:
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency>
再次重啟web服務, 瀏覽器訪問, 這次正常.
總結:
idea創建springmvc項目, 還是比較順利, "Hello World"的sample樣例也自動幫我們生成了. 唯一一個坑就是 servlet-api的版本沖突問題. 解決方案對maven的依賴理解可以更深入一步. 下文將講解基於springmvc的restful項目的搭建, 希望越來越好.
寫在最后:
如果你覺得這篇文章對你有幫助, 請小小打賞下. 其實我想試試, 看看寫博客能否給自己帶來一點小小的收益. 無論多少, 都是對樓主一種由衷的肯定.