鍦ㄦ垜浠繍琛?/span>Controller涔嬪墠錛屽繀欏誨鍏惰繘琛岀紪璇戙傛垜浠彲浠ヤ嬌鐢?/span>javac鎴栬呬換浣?/span>IDE鍘葷紪璇?/span>Controller銆傛帴涓嬫潵錛屾垜浠璁?/span>Tomcat鐭ラ亾鎴戜滑鐨?/span>web搴旂敤紼嬪簭銆傛垜浠渶瑕佸垱寤轟竴涓?/span>war鍖咃紝鐒跺悗閮ㄧ講鍒?/span>Tomcat涓紝榪欐鍙渶瑕佸皢war鍖呮嫹璐濆埌:/dev/Tomcat6/webapps鐩綍涓嬨?/span>
鎴戜滑鐨?/span>.war鏂囦歡涓殑/WEB-INF鏂囦歡澶瑰寘鍚互涓嬫枃浠?/span>:
web.xml
induction-demoapp.xml
浠ヤ笅.jar鏂囦歡鍦?/span>WEB-INF/lib涓?/span>:
acciente-induction-1.x.xb.jar
acciente-commons-1.x.xb.jar
鏈鍚?/span>,浠ヤ笅宸ュ叿jar鍖呬篃鍚屾牱鍦?/span>WEB-INF/lib涓?/span>:
apache-bcel-5.2.jar
apache-commons-collections-3.2.1.jar
apache-commons-digester-1.8.jar
apache-commons-fileupload-1.2.1.jar
apache-commons-io-1.4.jar
apache-commons-logging-1.1.1.jar
apache-freemarker-2.3.12.jar
榪欎簺.jar鏂囦歡鍒嗗埆鏉ヨ嚜浜庤繖浜涘伐紼?/span>:Apache Commons搴撳拰Apache BCEL搴撴潵鑷?/span>Apache Software Foundation. Freemarker搴撴簮鑷?/span>Visigoth Software Society.
鎴戜滑涓繪剰鍒板簲鐢ㄧ▼搴忕被鐨勪唬鐮?/span>(鍦ㄨ繖閲?/span>,灝辨槸鍗曚釜Controller綾?/span>)娌℃湁瀛樺偍鍦?/span>.war鏂囦歡涓?/span>,鐩稿弽,鎴戜滑浼?xì)鍦ㄥ簲鐢ńE嬪簭鐨勯厤緗枃浠?/span>induction-demoapp.xml涓寚鏄庣紪璇戝悗.class鏂囦歡鐨勪綅緗?/span>.涓嶇鎴戜滑浠涔堟椂鍊欓噸鏂扮紪璇戜竴涓簲鐢ㄧ▼搴忕被,涓嬩竴嬈¤闂繖涓被鐨勬椂鍊?/span>,Induction浼?xì)妫嫻嬪嚭class鏂囦歡鍙戠敓浜嗗彉鍖?/span>,鐒跺悗"鐑儴緗?/span>"鍒?/span>JVM涓?/span>.鍥犳,褰撴垜浠慨鏀規(guī)垨鑰呯紪璇戝簲鐢ㄧ▼搴忕被鐨勬椂鍊?/span>,娌℃湁蹇呰鍘婚噸鏂板垱寤烘垨鑰呴噸鏂伴儴緗?/span>war鍖?/span>.
Induction鍚屾牱涔熸敮鎸佸皢搴旂敤紼嬪簭綾繪斁鍒?/span>.war鐨?/span>/WEB-INF/classes涓?/span>,鎴栬呭皢.jar鏀懼埌/WEB-INF/lib涓?/span>,鎴栬?/span>Tomcat鍙互鎵懼埌鐨?/span>classpath涓嬬殑鍏朵粬浠諱綍浣嶇疆.涓嶈繃鍦ㄥ紑鍙戜腑,鎴戜滑鎺ㄨ崘灝嗗簲鐢ㄧ▼搴忕被鏀懼湪war鍖呭闈?/span>,榪欐牱鍙互閫氳繃class鐨?/span>"鐑噸杞?/span>"鏉ユ彁楂樼敓浜х巼.濡傛灉鏈夊繀瑕佺殑璇濓紝搴旂敤紼嬪簭綾誨彲浠ラ噸鏂版墦鍖呮垚.war鏂囦歡鐢ㄤ簬浼犻?/span>.鎺ヤ笅鏉?/span>,鎴戜滑鏉ョ湅鐪?/span>war鍖呴噷闈㈢殑鍐呭.
棣栧厛鏉ョ湅鐪?/span>web.xml.鎴戜滑鍦?/span>web.xml涓墍闇瑕佸仛鐨勫氨鏄畾涔?/span>Induction鐨?/span>dispatcher servlet鍘誨鐞嗗搴旂敤紼嬪簭鐨勮姹?/span>.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<description>DemoApp</description>
<servlet>
<servlet-name>demoapp</servlet-name>
<servlet-class>com.acciente.induction.dispatcher.HttpDispatcher</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>demoapp</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
鎴戜滑鍐嶆潵鐪嬬湅induction-demoapp.xml鐨勫唴瀹?/span>.鍋囪鎴戜滑緙栬瘧鍚庣殑搴旂敤紼嬪簭綾繪槸鏀懼湪c:/project/demoapp/classes鐩綍涓?/span>,induction-demoapp.xml鐨勫唴瀹瑰氨鏄?/span>:
<!-- this file contains the configuration for the Induction dispatcher -->
<config>
<!-- The following section allows you to specify locations from which
Induction will automatically reload a class if the file has changed -->
<java-class-path>
<compiled-directory>
<directory>c:/project/demoapp/classes</directory>
</compiled-directory>
</java-class-path>
</config>
鍒涘緩濂戒笂闈㈡墍鎻忚堪鐨?/span>war鍖呭悗,閮ㄧ講鍒?/span>Tomcat涓?/span>.鐜板湪,鎴戜滑鍙互寮濮嬭繍琛屾垜浠殑搴旂敤紼嬪簭浜?/span>.
Running the application
鍋囪Tomcat榪愯鍦?/span>localhost:8080,war鍖呯殑鍚嶅瓧鏄?/span>induction-demo.war,鍦ㄦ祻瑙堝櫒涓緭鍏ヤ互涓?/span>URL:
http://localhost:8080/induction-demo/demoapp/helloworld1_app/HelloWorldController/
浣犱細(xì)鍦ㄦ祻瑙堝櫒杈撳嚭鐣岄潰鐪嬪埌瀛楃涓?/span>:
Hello World, using a simple println()
Controlling the URL resolution
鐜板湪鎴戜滑鏉ヨ繘涓姝ョ殑鐪嬩笅鐢ㄦ潵榪愯Controller鐨?/span>URL:http://localhost:8080/induction-demo/demoapp/helloworld1_app/HelloWorldController/.絎竴閮ㄥ垎http://localhost:8080/induction-demo閫氳繃Tomcat鎸囧悜dispatcher servlet,涔熷氨鏄榪欎竴閮ㄥ垎鏄笌Induction鏃犲叧鐨?/span>.閫氳繃Induction澶勭悊鐨?/span>URL閮ㄥ垎鏄?/span>/demoapp/helloworld1_app/HelloWorldController/.
Induction鎶?/span>URL鍒嗚В鎴愬畬鏁寸殑Controller綾誨拰鏂規(guī)硶鍚?/span>.鎶?/span>URL杞崲鎴?/span>Controller鐨勭被鍚嶅拰鏂規(guī)硶鍚?/span>,鏄氳繃Induction鐨?/span>ControllerResolver綾誨彛瀹屾垚鐨?/span>.褰撳紑鍙戣呮病鏈夋寚瀹氫竴涓畾鍒剁殑Controller resolver鏃?/span>,Induction浼?xì)榛樿鋴社敤涓涓浉褰撶畝鍗曠殑controller resolver.榛樿鐨?/span>controller resolver鏄繖涔堝伐浣滅殑:鍒嗘瀽璺緞/demoapp/helloworld1_app/HelloWorldController/,鎶婄涓涓?/span>'/'鍒版渶鍚庝竴涓?/span>'/'涔嬮棿鐨勫唴瀹逛綔涓哄畬鏁寸殑綾誨悕(/demoapp/helloworld1_app/HelloWorldController/灝辨槸瀵瑰簲鍒?/span>demoapp.helloworld1_app.HelloWorldController).鏈鍚庝竴涓?/span>'/'鍚庢墍鏈夌殑鍐呭浣滀負(fù)鏂規(guī)硶鍚?/span>.鍦ㄦ垜浠殑渚嬪瓙涓?/span>,鏈鍚庝竴涓?/span>'/'鍚庢病鏈変換浣曞瓧絎︿覆,鍥犳榛樿鐨?/span>resolver浼?xì)鋴社敤涓涓殣鎬х殑鏂規(guī)硶鍚?/span>(榛樿鐨?/span>resolver浣跨敤"handler"浣滀負(fù)闅愭х殑鏂規(guī)硶鍚?/span>,涓嶈繃鍙互鍦?/span>Induction鐨勯厤緗枃浠朵腑榪涜淇敼).
Dynamic reloading
鎴戜滑鏉ユ壘鐐逛箰瀛?/span>,淇敼涓涓?/span>controller涓墦鍗扮殑瀛楃涓茬殑鍊?/span>,緙栬瘧鍚庨噸鏂板埛鏂頒綘鐨勬祻瑙堝櫒,浣犱細(xì)鍙戠幇淇敼璧蜂簡浣滅敤.涓嶅繀鍐嶇粡榪?/span>"鍒涘緩war鍖?/span>->閲嶆柊閮ㄧ講->絳夊緟"鐨勮繃紼嬩簡.
Conclusion
鎬葷粨涓涓嬫垜浠殑鎸囧崡.鍦ㄦ寚鍗椾腑,鎴戜滑璁ㄨ浜嗕竴浜涘叧閿殑鎬濇兂,鍦ㄦ帴涓嬫潵鐨?/span>view Tutorial涓細(xì)浠嬬粛鍦?/span>Induction涓浣曚嬌鐢?/span>views.Modles浼?xì)鍦?/span>Modles Tutorial涓繘琛屼粙緇?/span>.
嬈㈣繋浣跨敤Induction錛両nduction鏄嬌鐢╦ava緙栫▼璇█榪涜web搴旂敤寮鍙戠殑鍋ュ.楂樻ц兘鐨勬鏋躲侷nduction灞炰簬鍩轟簬璇鋒眰鐨剋eb妗嗘灦錛屼綔涓轟竴涓猻ervlet閮ㄧ講鍦╯ervlet瀹瑰櫒涓侷nduction瀹f壃MVC鐨勬柟娉曡繘琛寃eb搴旂敤寮鍙戙侷nduction鐨勫嚑涓叧閿璁$洰鏍囨槸錛? 鍘熸枃鍦板潃錛?a >http://www.inductionframework.org/getting-started-tutorial.html 鍏堢炕璇戜竴閮ㄥ垎鏀句笂鏉ワ紝鍚庨潰鐨勪細(xì)灝藉揩璐村嚭銆?/p>
緲昏瘧鐨勪笉閫氱晠鐨勫湴鏂癸紝璇瘋璋厏
1.褰搈odles錛寁iews鍜宑ontrollers鍙戠敓鍙樺寲鏃訛紝娑堥櫎瀵箇eb搴旂敤紼嬪簭蹇呴』閲嶈澆鐨勯渶姹傦紙鎴戜滑鐩鎬俊涓嬈$畝鍗曠殑欏甸潰鍒鋒柊灝辮凍澶熶簡錛?
2.modles錛寁iews錛宑ontrollers涔嬮棿鐨勭粦瀹氭槸澹版槑寮忕殑錛岃繖縐嶆柟寮忓彲浠ュ湪浠諱綍IDE涓兘鑳借瑙f瀽
3.浣垮緱鏁版嵁璺熻釜鍦ㄧ敤鎴風(fēng)晫闈㈡ā鏉夸腑鍙敤錛堝挨鍏舵槸HTML妯℃澘錛?
4.鏂囦歡涓婁紶澶勭悊搴旇綆鍗曞埌寰堝鉤鍑$殑鍦版
5.鍦℉TML琛ㄦ牸涓紝鏁扮粍錛坅rrays錛夊拰瀛楀吀綾誨瀷錛坉ictionary types 錛夌殑浣跨敤搴旇灝藉彲鑳界畝鍗?
6.鏄庢櫤鐨勪嬌鐢╔ML錛堝湪姣忎釜搴旂敤紼嬪簭涓紝Induction鍙渶瑕佷竴涓猉ML鏂囦歡錛?
7.鏄竴縐嶈兘澶熼傚簲澶氱pattern搴旂敤鐨勫彲鎵╁厖鐨勬灦鏋?
8.楂樻ц兘
9.浠嶫DK1.4鍒?.6閮藉吋瀹癸紙鍖呮嫭1.4鍜?.6錛?
About this tutorial
榪欎喚鎸囧崡鐨勭洰鐨勬槸璁╀綘鏇村揩鐨勪嬌鐢↖nduction銆侷nduction闇瑕佷竴涓猻ervlet瀹瑰櫒銆傚湪榪欎喚鎸囧崡涓紝鎴戜滑浣跨敤Apache鐨凾omcat錛屼笉榪囦綘鍙互閫夋嫨浣跨敤浠諱綍鏈嶄粠鏍囧噯鐨剆ervlet瀹瑰櫒銆?
Installing
鎴戜滑鍋囪浣犲凡緇忓湪c:/dev/Tomcat6瀹夎浜員omcat6銆侷nduction鏈韓涓嶉渶瑕佷換浣曠殑瀹夎姝ラ錛屽畠鐨刯ar鍖呭彲浠ュ緢瀹規(guī)槗鍦板紩鍏ュ埌浣犵殑web搴旂敤紼嬪簭涓?
Writing our first application - hello world
鍦ㄨ繖浠芥寚鍗椾腑錛屾垜浠細(xì)鍐欎竴涓畝鍗曠殑"hello world"搴旂敤錛屽湪榪欎釜搴旂敤閲屾垜浠細(xì)鍒椾婦鍑篒nduction鐨勮澶氶噸瑕佹蹇點?
Writing a controller
棣栧厛鎴戜滑鍐欎竴涓猚ontroller浣滀負(fù)鎴戜滑鎸囧崡鐨勫紑濮嬶紝鍥犱負(fù)controllers鏄痺eb搴旂敤紼嬪簭涓竴涓吀鍨嬬殑entry銆傚ソ錛岀幇鍦ㄨ鎴戜滑寮濮嬪啓涓涓猚ontroller錛岃瀹冨湪嫻忚鍣ㄤ腑鎵撳嵃涓涓插瓧絎︺?/p>
package demoapp.helloworld1_app;
import com.acciente.induction.controller.Controller;
import com.acciente.induction.controller.Response;
import java.io.IOException;
/**
* A very simple controller that does the customary "Hello World"
*/
public class HelloWorldController implements Controller
{
public void handler( Response oReponse ) throws IOException
{
oReponse.setContentType( "text/plain" );
oReponse.out().println( "Hello World, using a simple println()" );
}
}
鍦ㄦ垜浠繍琛岃繖涓猚ontroller涔嬪墠錛屽厛浠旂粏鐨勭湅涓涓嬨傞鍏堟垜浠敞鎰忓埌HelloWorldController綾誨疄鐜頒簡Induction鐨凜ontroller錛孋ontroller鎺ュ彛鍙槸涓涓畝鍗曠殑鏍囪鎺ュ彛錛屾病鏈夊畾涔変換浣曟柟娉曠粰瀹冪殑瀹炵幇綾匯傚綋Induction鎺ユ敹鍒頒竴涓猺equest璇鋒眰鍚庯紝嬋媧諱竴涓狢ontroller瀹炵幇錛屾瘮濡侶elloWorldController綾伙紝Induction棣栧厛鏍稿疄榪欎釜綾繪槸鍚︽槸瀹炵幇Controller鎺ュ彛銆傚洜姝ょ洰鍓岰ontroller鎺ュ彛鐨勫瓨鍦ㄧ殑鍞竴鐞嗙敱鏄畨鍏紙涓昏鑰冭檻鍒癈ontroller鎺ュ彛鐨勫彲閰嶇疆鎬э級銆傚洜涓篊ontroller鍙槸涓涓爣璁版ф帴鍙o紝鎵浠andler鏂規(guī)硶騫朵笉鏄帴鍙e畾涔夌殑銆?
鎺ヤ笅鏉ワ紝鎴戜滑鍙互鐪嬪埌handler鏂規(guī)硶鏈変竴涓猂esponse鍙傛暟錛孯esponse綾繪槸緇ф壙javax.servlet.http.HttpServletResponse鎺ュ彛錛屽茍綆鍗曠殑瀵箂ervlet瀹瑰櫒鐨剅esponse瀵硅薄榪涜浜嗗皝瑁呫侷nduction閫氳繃娉ㄥ叆鐨勬柟寮忥紝灝嗗弬鏁癛esponse鍊間紶緇檋andler鏂規(guī)硶銆備竴浜涜兘澶熶綔涓篽andler鍙傛暟鐨勫鹼紝涔熸槸閫氳繃鑷姩娉ㄥ叆鐨勬柟寮忥紝鍙瀹冧滑鏄伒寰互涓嬬被鍨嬶細(xì)
Type
Description
Request
facade to the servlet request, extends javax.servlet.http.HttpServletRequest
Response
facade to the servlet response, extends javax.servlet.http.HttpServletResponse
Form
provides access to the HTML form (if any) submitted with this request
ControllerResolver.Resolution
provides access to the controller resolution object (very useful for writing generic parameterized controllers)
model_class_name
instance of a user provided model class, the instance is managed to conform to a user specified lifecycle
涓婇潰鐨勭被鍚嶆槸涓嶅畬鏁寸殑錛孯equest, Response鍜孎orm綾葷殑鏇村淇℃伅錛屽湪package com.acciente.induction.controller涓煡鐪嬨?