14 October 2010

要使用Spring MVC架構,請先去下載Spring的jar檔,

一個是spring-webmvc.jar

一個是spring.jar

一個是commons-logging.jar

接著打開web.xml設定servlet-mapping

跟他說當user  request到哪個url時,要呼叫到Spring  的dispatch,

透過該dispatch,在引導該url至該controller

如下:

<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/html/*</url-pattern>
</servlet-mapping>





上面的範例是指當user request到/html/底下任何的page

都會導引到servlet-name為springmvc的servlet去

但是我們現在沒有servlet-name為springmvc的servlet

所以也要在設定

如下:

<servlet>
<servlet-name>springmvc</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-config.xml</param-value>
</init-param>
</servlet>






上面的範例意思是當您的servlet-mapping裡servlet-name為springmvc時

會mapping到此org.springframework.web.servlet.DispatcherServlet class

且你要指定該dispatch的config location

這裡預設為/WEB-INF/spring-mvc-config.xml

在這個檔案裡面會主要會放置了url-mapping

用來告訴dipatch該怎麼分配至應該分配的controller


對了!!有個很重要的東西要注意到,

在web.xml中的root element裡面的attribute一定要設為2.4,一開始建立project是預設2.5,

在controller return view的時候,view會無法使用${}tag

如下:

<web-app 
version="2.4"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd" >







接著就會說到該spring-mvc-config.xml的檔案架構

如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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-2.5.xsd">


<!--
(1)
會先看這個urlMapping
這裡的設置意思是當您的page是在/html/action/*
意思是/html底下的/action/底下的任何page,
則就呼叫bean id為customerController的class
-->
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<value>
/action/*=customController
</value>
</property>
</bean>

<!--
(2)
因為上面的設定是當/html/action/底下任何page會指定到此bean
也就是說他會呼叫到net.ken.test.mvc此package底下的.multiActionController
等等會說明multiActionController此檔案
-->
<bean id="customController" class="net.ken.test.mvc.multiActionController"></bean>


<!--
(3)
這裡是指你要對應到的view的路徑名稱
-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>



</beans>




接著就來撰寫multiActionController此controller的code

package springmvc.web;

import org.springframework.web.servlet.mvc.multiaction.MultiActionController;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;


//首先要繼承MultiActionController
public class CustomerController extends MultiActionController{


//這邊的method命名規則是根據您的page名稱來命名,如果您的page是在/html/action/Add.do
//則會呼叫到下面這個method。
public ModelAndView Add(HttpServletRequest request,
HttpServletResponse response) throws Exception {

/*
* 會return一個型態為ModelAndView的物件回去,
* 第一個參數為view的名稱,就是要接收此物件的jsp檔案名稱,在此例子就是說會傳到hello_world.jsp此page去
* 第二個是view要接收的參數名稱
* 第三個是參數的值
*/
return new ModelAndView("hello_world", "message","testAddCustomer() method");

}

public ModelAndView Delete(HttpServletRequest request,
HttpServletResponse response) throws Exception {

return new ModelAndView("hello_world", "message","testDeleteCustomer() method");

}

public ModelAndView Update(HttpServletRequest request,
HttpServletResponse response) throws Exception {

return new ModelAndView("hello_world", "message","testUpdateCustomer() method");

}


}




接著來寫個接收modelAndView的code吧!(就是hello_world.jsp)

${message}的意思就是接收上面ModelAndView此物件的第二個參數的參數名稱

<html>
<body>
<p>This is my message: ${message} </p>
</body>
</html>





最後就寫個簡單的html來測試是否work,

你會發現點選第一個link,

您的page就會show出This is my message: testAddCustomer() method此訊息


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Hello App Engine</title>
</head>

<body>
<h1>Hello App Engine!</h1>

<table>
<tr>
<td><a href="/html/action/Add.htm">Go to Add() </a></td>
</tr>
<tr>
<td><a href="/html/action/Delete.htm">Go to Delete() </a></td>
</tr>
<tr>
<td><a href="/html/action/Update.htm">Go to Update() </a></td>
</tr>

</table>
</body>
</html>




這篇教學寫得好亂,真不好意思。

有不清楚的再問我吧!



blog comments powered by Disqus