開發Spring MVC應用程序(1)

1、基本應用程序和環境的建立

(譯者:該教程原來是使用Ant手動編譯和部署的,這裡使用Eclipse開發環境,有差別的地方,可以參考原文)

1)開發環境

l Java SDK 1.4.2

l Apache Tomcat 5.0.25

l Eclipse 3.0

l Eclipse插件:

? EMF SDK 2.0.1:Eclipse建模框架,lomboz插件需要,可以使用runtime版本)

? lomboz 3.0:J2EE插件,用來在Eclipse中開發J2EE應用程序

? Spring IDE 1.0.3:Spring Bean配置管理插件

l SpringFramework 1.0.2

2)插件配置

下面簡單講一下上面插件在Eclipse中的主要配置:

lomboz

l Window/Customize Perspective/Shoutcuts/New:選中Java/Lomboz J2EE Wizards/ Lomboz J2EE Project

l Window/Customize Perspective/Commands:選中Lomboz Actions

l Window/Preferences/Lomboz:指定JDK Tools.jar的位置

l Window/Preferences/Lomboz/Server Difinitions:選擇Server types為Apache Tomcat v5.0.x,在Properties中指定Tomcat的安裝目錄,HTTP訪問的地址和埠號(譯者:這裡使用8888),以及classpath變數TOMCAT_HOME的值(即Tomcat的安裝目錄)

Spring IDE

l Window/Customize Perspective/Shoutcuts/Show View:選中Spring IDE

3)創建J2EE工程

l File/New/ Lomboz J2EE Project

l Project settings:指定工程名springapp

l Java settings:注意默認輸出目錄是bin,改為springapp/springapp/WEB-INF/classes

l Create J2EE Module:選擇Web Modules頁,點擊add按鈕指定Web模塊名springapp;選擇Targeted Servers頁,Type選擇Apache Tomcat v5.0.x,點擊add按鈕增加

l 點擊Finish按鈕,完成工程的創建

4index.jsp

創建應用程序的入口頁面index.jsp,這裡只是對環境的一個測試:

<html>

<head><title>Example :: Spring Application</title></head>

<body>

<h1>Example - Spring Application</h1>

<p>This is my test.</p>

</body>

</html>

5)部署應用程序到Tomcat

l 工具欄上點擊Press to open a J2EE Project Outliner按鈕,打開Lomboz J2EE View視圖

l 在Modules頁中選擇springapp工程的springapp模塊,右擊選擇Deploy

6)測試應用程序

l 在瀏覽器中輸入http://localhost:8888/springapp,看到正常的測試頁面,說明環境已經建立好了

l 下面開始開發Spring MVC應用程序

7)修改WEB-INF目錄的web.xml

l 定義DispatcherServlet來控制所有的請求,同時具有一個標準的servlet-mapping映射到*.htm URL模式

<servlet>

<servlet-name>springapp</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>springapp</servlet-name>

<url-pattern>*.htm</url-pattern>

</servlet-mapping>

l 創建springapp-servlet.xml(應用程序名--servlet.xml),配置DispatcherServlet要使用的Web應用程序context

? 定義名為springappController的Bean條目,指向SpringappController控制器

? 使用SimpleUrlHandlerMapping來定義URL映射,將/hello.htm映射到SpringappController控制器

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<!--

- Application context definition for "springapp" DispatcherServlet.

-->

<beans>

<bean id="springappController" class="SpringappController"/>

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<property name="mappings">

<props>

<prop key="/hello.htm">springappController</prop>

</props>

</property>

</bean>

</beans>

l (譯者:補充Spring IDE的使用)

? 選擇springapp工程,右擊選擇add Spring Beans Project Nature,工程圖標原來的J符號變成了S

? Window/Show View/Spring Beans,打開Spring Beans視圖

? 在視圖中選擇springapp,右擊選擇Properties

? Config Files頁中點擊add按鈕,將springapp-servlet.xml加入

? 在Spring Beans視圖中,可以看到springapp-servlet.xml的結構樹,雙擊springapp-servlet.xml可以打開文件,雙擊具體結構,可以自動定位

? 選擇springapp-servlet.xml,右擊選擇Show Graph,可以顯示文件的視圖結構

8)拷貝jarsWEB-INF/lib目錄

l 將dist/spring.jar、lib/jakarta-commons/commons-logging.jar、lib/log4j/log4j-1.2.8.jar文件導入到springapp工程的springapp/WEB-INF/lib目錄下

9)創建控制器

l 實現Controller介面的handleRequest()方法來處理請求

l 這裡添加日誌記錄,檢查是否執行到這裡

l handleRequest()方法返回的ModelAndView沒有指定Model,所以直接重定向到指定的視圖hello.jsp

import org.springframework.web.servlet.mvc.Controller;

import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

public class SpringappController implements Controller {

/** Logger for this class and subclasses */

protected final Log logger = LogFactory.getLog(getClass());

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

logger.info("SpringappController - returning hello view");

return new ModelAndView("hello.jsp");

}

}

10)創建視圖hello.jsp

<html>

<head><title>Example :: Spring Application</title></head>

<body>

<h1>Hello - Spring Application</h1>

<p>Greetings.</p>

</body>

</html>

11)拷貝和修改log4j.properties

l SpringFramework使用log4j記錄日誌,所以導入samples/petclinic/war/WEB-INF/classes/log4j.properties文件到springapp工程的springapp/WEB-INF/classes目錄下

l 修改log4j.properties,指定日誌輸出文件:

# For JBoss: Avoid to setup log4j outside $JBOSS_HOME/server/default/deploy/log4j.xml!

# For all other servers: Comment out the Log4J listener in web.xml too.

# log4j.rootLogger=INFO, stdout, logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n

log4j.appender.logfile=org.apache.log4j.RollingFileAppender

log4j.appender.logfile.File=${springapp.root}/WEB-INF/springapp.log

log4j.appender.logfile.MaxFileSize=512KB

# Keep three backup files.

log4j.appender.logfile.MaxBackupIndex=3

# Pattern to output: date priority [category] - message

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

l (譯者:在部署時提示下面錯誤,log4j無法正常工作,望高手指正)

log4j:WARN No appenders could be found for logger (org.apache.catalina.session.ManagerBase).

log4j:WARN Please initialize the log4j system properly.

12)重新部署應用程序

l 通過前面的方法重新部署應用程序

l (譯者:在重新部署之前,需要先刪除Tomcat的webapps目錄下的springapp目錄,否則Tomcat,不會將新的war文件解壓。什麼問題?)

l 在瀏覽器中輸入http://localhost:8888/springapp/hello.htm,能夠正常顯示hello.jsp的內容

推薦閱讀:

八字天機應用——婚姻總論
八字天機應用——六親遊走

TAG:程序 | Spring | C應用 |