初学spring mvc
初學(xué)spring mvc,自己學(xué)習(xí)做了hello world小例子,步驟如下:
1:從springsource.org下載spring的包,從apache.org下載common-logging的包(供spring使用)。?
?
2: 備好IDE和web server,我用Eclipse(Helios Service Release 1)和Tomcat6.0.29。
2.1 Eclipse:window->show->show view->servers打開servers窗口,右鍵new->server,找到Apache tomcat6并點擊,然后指定本機tomcat安裝目錄后點finish。這樣就在
Eclipse中注冊了tomcat6。
2.2 新建Dynamic Web Project,工程名spring-mvc-demo,Target runtime選項中點new runtime按鈕,選擇tomcat6,點finish。 這樣我們的web project就自動引入了servlet-api.jar,
jsp-api.jar,el-api.jar等web project需要的包。 將step1中jar包放到web project的WEB-INF/lib中,刷新工程,這樣我們就準(zhǔn)備好了hello world小例子的jar包環(huán)境。
3:打開web.xml,配置DispatcherServlet
?<web-app id="WebApp_ID" 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">
?? ?<servlet>
?? ??? ?<servlet-name>mvc-dispatcher</servlet-name>
?? ??? ?<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
?? ??? ?<load-on-startup>1</load-on-startup>
?? ??? ?<init-param>
?? ??? ??? ?<param-name>contextConfigLocation</param-name>
?? ??? ??? ?<param-value>/WEB-INF/spring-mvc.xml</param-value>
?? ??? ?</init-param>
?? ?</servlet>
?? ?<servlet-mapping>
?? ??? ?<servlet-name>mvc-dispatcher</servlet-name>
?? ??? ?<url-pattern>/</url-pattern>
?? ?</servlet-mapping>
</web-app>
3.1 <init-param>給DispatcherServlet指定了配置文件的路徑,如果不配置<init-param>,默認(rèn)路徑是"/WEB-INF/+<servlet-name>+'-servlet.xml'",所以本例中默認(rèn)路徑就是"/WEB-INF/mvc-dispatcher-servlet.xml",現(xiàn)在讓我們在WEB-INF目錄下新建一個spring-mvc.xml文件備用。
4:編寫測試類。
4.1 新建com.test.controller.DemoController.java類:
?
package com.test.controller;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class DemoController extends AbstractController {
?? ?@Override
?? ?protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
?? ??? ??? ?HttpServletResponse arg1) throws Exception {
?? ??? ?return new ModelAndView("demo");
?? ?}
}
4.1.1 AbstractController是spring mvc控制器抽象類,我們自定義的控制器只要繼承這個抽象類并實現(xiàn)handleRequestInternal()方法就可以實現(xiàn)最基本的處理和跳轉(zhuǎn)了。
在spring3版本之前,繼承AbstractController是要實現(xiàn)handleRequest()方法的,spring3以后,在AbstractController的handleRequest()方法中調(diào)用了handleRequestInternal(),
改為由開發(fā)者自己實現(xiàn)handleRequestInternal()。
4.1.2 ModelAndView 是代表視圖層和模型層的類,在我們的項目中一般就是指jsp文件。
5.配置spring mvc
5.1 打開spring-mvc.xml,寫入以下配置:
?
<beans xmlns="http://www.springframework.org/schema/beans"?? ?xmlns:context="http://www.springframework.org/schema/context"
?? ?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
?? ?xsi:schemaLocation="
??????? http://www.springframework.org/schema/beans??? ?
??????? http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
??????? http://www.springframework.org/schema/context?
??????? http://www.springframework.org/schema/context/spring-context-3.0.xsd">
??? <bean name="/demo" class="com.test.controller.DemoController"></bean>
??? <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
?? ??? ?<property name="prefix">
?? ??? ??? ?<value>/WEB-INF/pages/</value>
?? ??? ?</property>
?? ??? ?<property name="suffix">
?? ??? ??? ?<value>.jsp</value>
?? ??? ?</property>
?? ?</bean>
</beans>
5.1.1 第一個<bean>在spring 中配置了DemoController,name="/demo"的意思是,我可以使用"http://localhost:8080/spring-mvc-demo/demo"來調(diào)用
DemoController。5.1.2 第二個<bean>定義了視圖處理器,在以上的配置完成以后,我只需要在Controller類的方法里返回new ModelAndView("demo"),spring 就會自動在"demo"前后
加入前綴和后綴作為查找視圖層文件的路徑,在這里就是"/WEB-INF/pages/demo.jsp"
5.2 在/WEB-INF/pages路徑下新建demo.jsp文件:
?
<html><body>
?? ?<h1>demo page</h1>?? ?
</body>
</html>
6.將工程部署到Tomcat,啟動Tomcat:?
6.1在servers視窗中右鍵tomcat6->add and remove->加入spring-mvc-demo->finish。?
6.2打開瀏覽器,訪問http://localhost:8080/spring-mvc-demo/demo,如果看到一個顯示著"demo page"兩個單詞的頁面,就算成功了。
7.使用注解?:我們可以使用annotation來簡化xml文件中的配置。
7.1? 新建類com.test.controller.HelloController.java
?
package com.test.controller;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
public class HelloController {
???
??? @RequestMapping("/welcome")???
??? public String printWelcome(ModelMap model) {
?? ??? ?return "hello";
?? ?}
}
7.1.1 @Controller聲明了HelloController類是一個Controller類,@RequestMapping配置說明當(dāng)訪問"http://localhost:8080/spring-mvc-demo/welcome"時會調(diào)用
?
printWelcome()方法。
7.1.2 雖然 printWelcome()方法返回類型是String,但是spring還是會自動為返回的字符串按照ViewResolver配置的信息自動添加前綴后綴并查找對應(yīng)的視圖。本例中
?
printWelcome()方法就是跳轉(zhuǎn)到了"/WEB-INF/pages/hello.jsp"。7.1.3? 我們也可以給HelloController加上@RequestMapping,但具體的含義我還不了解,需要繼續(xù)學(xué)習(xí)#^^#。
7.2 在/WEB-INF/pages下新建hello.jsp:
?
<html><body>
?? ?<h1>Hello World!</h1>?? ?
</body>
</html>
7.3 在spring-mvc.xml中注冊spring annotation
?
<beans xmlns="http://www.springframework.org/schema/beans"?? ?xmlns:context="http://www.springframework.org/schema/context"
????xmlns:mvc="http://www.springframework.org/schema/mvc"
??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
?? ?xsi:schemaLocation="
?? ??? ?http://www.springframework.org/schema/mvc?
?? ??? ?http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
??????? http://www.springframework.org/schema/beans??? ?
??????? http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
??????? http://www.springframework.org/schema/context?
??????? http://www.springframework.org/schema/context/spring-context-3.0.xsd">
?? ?
?? ?<!-- @Controller, @Service, @Configuration, etc. -->???
?????<context:component-scan base-package="com.test.controller" />
????
?? ?<bean name="/demo" class="com.test.controller"></bean>
?? ?<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
?? ??? ?<property name="prefix">
?? ??? ??? ?<value>/WEB-INF/pages/</value>
?? ??? ?</property>
?? ??? ?<property name="suffix">
?? ??? ??? ?<value>.jsp</value>
?? ??? ?</property>
?? ?</bean>
?? ?<!-- Enables the Spring MVC @Controller programming model -->
??? <mvc:annotation-driven />
</beans>
7.3.1 <context:component-scan>指定了在"com.test.controller"下查找annotation。?
7.3.2? 在spring2.5以后spring3之前,@Controller,@Service,@Repository與@Component是一樣的,都表示<bean>的聲明,但從他們的區(qū)分我們可以看出
spring即將在以后的版本中對bean進(jìn)行mvc分層細(xì)化,現(xiàn)在,當(dāng)我們在spring3下使用@Controller的時候,就沒有人再為了找不到他們之間的區(qū)別而感到困惑了。
7.3.3 本例中,如不使用<mvc:annotation-driven>也是可以的。<mvc:>是spring3新增的tag,關(guān)于
<context:component-scan>和<mvc:annotation-driven>的區(qū)別,可以參考"http://blog.springsource.org/2009/12/21/mvc-simplifications-in-spring-3-0/"。7.4 重新部署工程,啟動Tomcat,訪問"http://localhost:8080/spring-mvc-demo/welcome" ,你看到熟悉的"Hello World!"了嗎?
參考資料:
http://blog.springsource.com/2011/01/04/green-beans-getting-started-with-spring-mvc/?
http://blog.springsource.org/2010/01/25/ajax-simplifications-in-spring-3-0/轉(zhuǎn)載于:https://www.cnblogs.com/zhangliang0115/archive/2012/02/22/2362463.html
總結(jié)
以上是生活随笔為你收集整理的初学spring mvc的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 配置IIS Silverlight运行环
- 下一篇: HTML5标签的语义认知和理解