讀古今文學網 > Maven實戰 > 12.3.2 account-web的主代碼 >

12.3.2 account-web的主代碼

account-web的主代碼包含了2個JSP頁面和4個Servlet,它們分別為:

·signup.jsp:賬戶註冊頁面。

·login.jsp:賬戶登錄頁面。

·CaptchaImageServlet:用來生成驗證碼圖片的Servlet。

·LoginServlet:處理賬戶註冊請求的Servlet。

·ActivateServlet:處理賬戶激活的Servlet。

·LoginServlet:處理賬戶登錄的Servlet。

Servlet的配置可以從web.xml中獲得,該文件位於項目的src/main/webapp/WEB-INF/目錄。其內容見代碼清單12-9。

代碼清單12-9 account-web的web.xml

web.xml首先配置了該Web項目的顯示名稱,接著是一個名為ContextLoaderListener的ServletListener。該listener來自spring-web,它用來為Web項目啟動Spring的IoC容器,從而實現Bean的注入。名為contextConfigLocation的context-param則用來指定Spring配置文件的位置。這裡的值是四個模塊的Spring配置XML文件,例如classpath://account-persist.xml表示從classpath的根路徑讀取名為account-persist.xml的文件。我們知道account-persist.xml文件在account-persist模塊打包後的根路徑下,這一JAR文件通過依賴的方式被引入到account-web的classpath下。

web.xml中的其餘部分是Servlet,包括各個Servlet的名稱、類名以及對應的URL模式。

下面來看一個位於src/main/webapp/目錄的signup.jsp文件,該文件用來呈現賬戶註冊頁面。其內容如代碼清單12-10所示。

代碼清單12-10 signup.jsp

該JSP的主題是一個name為signup的HTML FORM,其中包含了ID、Email、名稱、密碼等字段,這與一般的HTML內容並無差別。不同的地方在於,該JSP文件引入了Spring的ApplicationContext類,並且用此類加載後台的accountService,然後使用accountService先生成一個驗證碼的key,再在FORM中使用該key調用captcha_image對應的Servlet生成其標識的驗證碼圖片。需要注意的是,上述代碼中略去了css片段。

賬戶註冊頁面如圖12-1所示。

上述JSP中使用到了/captcha_image這一資源獲取驗證碼圖片。根據web.xml,我們知道該資源對應了CaptchaImageServlet。下面看一下它的代碼,見代碼清單12-11。

圖12-1 賬戶註冊頁面

代碼清單12-11 CaptchaImageServlet.java

CaptchaImageServlet在init()方法中初始化Spring的ApplicationContext,這一context用來獲取Spring Bean。Servlet的doGet()方法中首先檢查key參數,如果為空,則返回HTTP 400錯誤,標識客戶端的請求不合法;如果不為空,則載入AccountService實例。該類的generateCaptchaImage()方法能夠產生一個驗證碼圖片的字節流,我們將其設置成image/jpeg格式,並寫入到Servlet相應的輸出流中,客戶端就能得到圖12-1所示的驗證碼圖片。

代碼清單12-10中FROM的提交目標是signup,其對應了SignUpServlet。其內容如代碼清單12-12所示。

代碼清單12-12 SignUpServlet.java

SignUpServlet的doPost()接受客戶端的HTTP POST請求,首先它讀取請求中的id、name、email等參數,然後驗證這些參數的值是否為空,如果驗證正確,則初始化一個SignUpRequest實例,其包含了註冊賬戶所需要的各類數據。其中的activateServiceUrl表示服務應該基於什麼地址發送賬戶激活鏈接郵件,這裡的值是與signup平行的activate地址,這正是ActivationServlet的地址。SignUpServlet使用AccountService註冊賬戶,所有的細節都已經封裝在AccountService中,如果註冊成功,服務器打印一條簡單的提示信息。

上面介紹了一個JSP和兩個Servlet,它們都非常簡單。鑒於篇幅的原因,這裡就不再詳細解釋另外幾個JSP及Servlet。感興趣的讀者可以自行下載本書的樣例源碼。