Spring MVC sample

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>




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

有不清楚的再問我吧!

read more »


Eclipse show line number

11 October 2010

Eclipse show line number

想知道你寫了多少行的code嗎?

或者想知道這行code是在第幾行?

先點選Window->Preferences

打開視窗以後,點選General->Editors->Text Editor

把Show line numbers勾選起來。

這樣就會顯示出line number了。

read more »


Eclipse Classic with Java Server Page (JSP)

10 October 2010

因為有再寫GAE和android

大家也都知道Eclipse分很多種版本

1. Eclipse classic

2. Eclipse IDEfor Java EE Developer

3. Eclipse IDEfor Java Developer

等等之類的!

如果你想寫JSP、又想寫一般的java application。

有些人會去下載兩種 eclipse(2、3)

然後想寫JSP,就開第二個,想寫java就開第三個。

會不會太麻煩勒?



我也遇到個問題,想在同個IDE環境中寫GAE和Android。

該怎麼做呢?

先去下載Eclipse classic

解壓縮出來後,

就去install new software(android、GAE)

安裝這兩個的步驟就不說明了!

直接跳過!



完成後,當你建立一個.jsp檔案時,

有沒有發現完全沒有highlight,也沒有content assist!!

那是因為沒有裝pluging!

那就把它裝起來吧!

首先!

首先先點選Install New Software

接著選取圖中選取的項目,注意!版本不同,項目中的版本名稱會有所不同,此版本為HELIOS

接著拉到最下面,點選Web, XML , Java EE Developement




點開以後,點選Web Page Editor就好!

不要安裝其他的(要裝也是可以拉,你有需求的話)

安裝完成以後,就會發現*.jsp檔案中的highlight和content assist都出現了!

















































read more »