JSPGenSDF軟件開發框架(於2014年5月5號發佈4.0版),簡稱JSPGen,專用Java Web方面平臺式軟件開發,整個框架也能夠說是前臺與後臺的一個粘合劑,如今對JSPGenSDF進行開發配置,看看最基礎的配置和最基本的使用方法。css
JSPGenSDF學習成本不高,採用的都是Java原生態編碼方式,按照官方說法:稍有Java基礎知識都可作開發,這也是我打算整理此教程的根本緣由(題外話:這次版本與以前版本區別很大,網上資料不多,官方資料又太過專業,但願此教程能幫助你們更好、更快熟悉這個開發框架)。html
本次demo工程是一個官網提供的示例項目工程,開發方面咱們採用官網提供的Eclipse3.7中文版進行Java開發以及項目管理。java
一、下載項目運行環境:WATMServer2.6web
二、下載項目運行(開發)時所需第三方jar組件包:Jar20140505ajax
三、下載開發環境(工具):Eclipse3.7apache
四、獲取JSPGen示例項目:api
有兩種獲取方式:瀏覽器
a、到官網在線預約,選免費型(建議選這種方式,獲取都是最新版本);緩存
b、加入官網提供的QQ交流羣:12349848,在羣共享裏下載。安全
環境下載地址:http://www.jspgen.com
示例項目獲取:http://www.jspgen.com
視頻教程下載:http://help.jspgen.com/vteach/jspgen4_01.rar
框架所構建的平臺基本信息配置:
<?xml version="1.0" encoding="UTF-8"?> <jspgen version="4.0"> <!-- 平臺主題、地址 --> <host> <title>JSPGen-讓Java(Web)軟件開發變得更敏捷! www.JSPGen.com</title> <!-- 多個半角逗號間隔 --> <url>http://127.0.0.1:8080/</url> </host> <!-- 開發者信息 --> <company>JSPGen.com</company> <url>http://www.jspgen.com/</url> <email>JSPGen@163.com</email> <!-- 時區Id(爲空則爲系統默認時區) --> <timezoneid>Asia/Shanghai</timezoneid> <!-- 區域語言環境(爲空則爲系統默認區域) --> <locale>zh_CN</locale> <!-- 頁面編碼 --> <charset>UTF-8</charset> <!-- 平臺受權碼 --> <serialno></serialno> <!-- 開啓IE緩存 --> <iecache>true</iecache> <!-- 靜態資源 --> <static> <!-- 訪問地址(若靜態生成配置中有發佈點的,以發佈點訪問地址爲準) --> <url></url> <!-- 存儲地址:相對於平臺根目錄下 --> <uri>static/</uri> </static> <!-- 上傳文件 --> <upload status="true"> <!-- 訪問地址(若上傳配置中有發佈點的,以發佈點訪問地址爲準) --> <url></url> <!-- 臨時存儲地址:相對於項目根目錄下 --> <uri>temp/upload/</uri> <!-- 容許大小:默認值1M --> <size>1M</size> </upload> <!-- 下載文件 --> <download status="false"> <!-- 存儲地址:相對於項目根目錄下 --> <uri>temp/download/</uri> </download> <!-- 安全 --> <safe> <!-- 平臺密鑰 (爲cookie 僞靜態 … 加密服務防cookie欺騙) --> <authkey>JSPGen</authkey> <!-- 容許訪問IP範圍 (支持格式127.0.0.1 127.0.0.* 127.0.0.0-127.0.0.10 多個用半角逗號間隔) --> <allowip></allowip> <!-- 禁止訪問IP範圍 (支持格式127.0.0.1 127.0.0.* 127.0.0.0-127.0.0.10 多個用半角逗號間隔) --> <denyip></denyip> </safe> <!-- 郵件服務 --> <mail status="true"> <smtp> <!-- 發送類型(SMTP MX) --> <type>SMTP</type> <server>smtp.163.com</server> <port>25</port> <email>jspgen@163.com</email> <name>JSPGen官網</name> <username>jspgen</username> <password>jspgen</password> <!-- 內容格式(text html url) --> <format>html</format> <!-- 內容簽名 --> <sign>JSPGen-讓Java(Web)軟件開發變得更敏捷! www.JSPGen.com</sign> </smtp> </mail> </jspgen>
業務動做配置,爲後臺業務與前臺顯示視圖進行配對服務,這裏須要注意僅定義Action所在包的地址,而非具體Action文件地:
<?xml version="1.0" encoding="UTF-8"?> <jspgen version="4.0"> <!-- 初始化參數 --> <props name="action"> <!-- 開啓開發模式,開啓後將錯誤信息直接輸出至瀏覽器,不然將信息記錄至日誌文件 --> <prop name="jspgen.devMode">true</prop> <prop name="jspgen.antiAttack">false</prop> <!-- 開啓表單指令驗證 --> <prop name="jspgen.formHash">false</prop> <!-- 可忽略表單指令驗證地址 --> <prop name="jspgen.formHash.invalidURI"></prop> <!-- Action訪問地址擴展名 --> <prop name="jspgen.action.extension">gen</prop> <!-- Action名與方法名間隔符 --> <prop name="jspgen.action.separator">!</prop> <!-- Action返回關鍵字模板文件存放路徑,相對於框架根目錄下 --> <prop name="jspgen.result.uri">/WEB-INF/template/</prop> <!-- 模板路徑自適應,不啓用的狀況下:若關鍵字不存在,顯示未定義返回關鍵字 --> <!-- 啓用狀況下(只在應用區模板下有用):在應用區、框架區都沒有定義返回關鍵字的狀況下,則自動組裝模板路徑(可由組裝變量自動匹配,便可實現Action零配置開發) --> <!-- 組裝變量:${space}、${action}、${method}、${result},分別爲:空間名(模板目錄)、Action名、方法名、返回關鍵字;Action名爲Action類文件名前綴,開頭字母小寫,其他大寫字母轉小寫並在開頭添加下劃線。 --> <prop name="jspgen.template.auto">true</prop> <!-- <prop name="jspgen.template.default">${space}/${action}_${method}_${result}.jsp</prop> --> <prop name="jspgen.template.default">${space}/${action}_${result}.jsp</prop> </props> <!-- 返回配對:公共關鍵字 --> <results> <!-- 公共關鍵字:默認有none error success ajax[message],其中none無需定義,優先級最高用於內容直接輸出,其餘關鍵字低於模板自適應及私有關鍵字配對; 公共關鍵字:模板文件均位於框架模板目錄下(默認方案)。 --> <result name="error">error.jsp</result> <result name="success">success.jsp</result> </results> <!-- 動做配對 --> <actions> <!-- Action定義:space(空間名)爲訪問路徑前綴,type(類型)爲Action所在包地址,若開頭有 "redirect:" 特殊字符串,則爲URL跳轉地址,將直接跳轉到定義地址 --> <action space="/" type="demo.action"> <!-- 返回配對:返回關鍵字對應空間所在包內的全部Action,因此模板文件名建議採用組裝變量式定義; 私有關鍵字:優先級高於公共關鍵字,支持模板類型:jsp[JSTL] vm[Velocity] ftl[FreeMarker] --> <result name="demo">demo.jsp</result> <result name="mail">demo_mail.jsp</result> <result name="upload">demo_upload.jsp</result> <result name="list">demo_upload_list.jsp</result> </action> </actions> </jspgen>
國際化資源配置,主要用於Java程序中提示語句配置:
<?xml version="1.0" encoding="UTF-8"?> <i18n version="4.0"> <!-- 全局 --> <props name="global"> <prop key="access_ip">您的IP地址是:{0}</prop> <!-- 基本提示 --> <prop key="error">操做失敗</prop> <prop key="success">操做成功</prop> <!-- 上傳提示 --> <prop key="upload_error">上傳失敗</prop> <prop key="upload_success">上傳成功</prop> </props> </i18n>
日誌輸出配置,僅修改輸入文件地址便可:
# DEBUG < INFO < WARN < ERROR < FATAL log4j.rootLogger=DEBUG,console,rollingFile # ----------------------------------------------------------------------------------------- log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Threshold=DEBUG log4j.appender.console.encoding=UTF-8 log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%-5p [%t] (%F:%L) - %m%n # ----------------------------------------------------------------------------------------- log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender log4j.appender.rollingFile.File=E:/web/log.log log4j.appender.rollingFile.MaxFileSize=500KB log4j.appender.rollingFile.Threshold=INFO log4j.appender.rollingFile.encoding=UTF-8 log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} [%-5p] (%F:%L) - %m%n
視圖(模板)解析配置,通常狀況下不須要修改,保持默認便可:
<?xml version="1.0" encoding="UTF-8"?> <jspgen version="4.0"> <!-- 初始化參數 --> <props name="parse"> <!-- JSTL 參數 --> <prop name="jstl.template.import"></prop> <!-- Velocity 參數 --> <prop name="velocity.default.encoding">UTF-8</prop> <prop name="velocity.input.encoding">UTF-8</prop> <prop name="velocity.output.encoding">UTF-8</prop> <prop name="velocity.directive.parse.max.depth">5</prop> <!-- Freemarker 參數 --> <prop name="freemarker.locale">zh_CN</prop> <prop name="freemarker.url_escaping_charset">UTF-8</prop> <prop name="freemarker.template_update_delay">1</prop> <prop name="freemarker.whitespace_stripping">true</prop> </props> <parse> <type name="jsp">jspgen.parse.provider.JSTLProvider</type> <type name="vm">jspgen.parse.provider.VelocityProvider</type> <type name="ftl">jspgen.parse.provider.FreemarkerProvider</type> <!-- 此處工具對於JSTL文件無效,JSTL文件須要在jspgen.tld裏定義函數標記方可以使用 --> <!--tool name="Grapes">grapes.Grapes</tool--> </parse> </jspgen>
默認視圖動做:
package demo.action; import grapes.Dates; import java.io.IOException; import javax.servlet.http.HttpServletResponse; import jspgen.action.Action; /** * Action類:默認主頁 * * @author JSPGen * @copyright (c) JSPGen.com * @created 2013年03月 * @email jspgen@163.com * @address www.jspgen.com */ publicclass IndexAction extends Action { /** * 默認方法 */ @Override public String execute() { HttpServletResponse response = getResponse(); try { // 直接輸出字符串 response.getWriter().write("<h2>Hello JSPGener!</h2>"); response.getWriter().write("Time:"+Dates.getDateTime()); } catch (IOException e) { thrownew IllegalArgumentException(e); } return NONE; } }
演示動做:
package demo.action; import grapes.Dates; import grapes.Files; import grapes.Grapes; import grapes.tools.Browser; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Map; import jspgen.action.Action; /** * Action類:演示 * * @author JSPGen * @copyright (c) JSPGen.com * @created 2013年03月 * @email jspgen@163.com * @address www.jspgen.com */ publicclass DemoAction extends Action { /** Action文件經常使用方法對象: 獲取用戶端請求對象:HttpServletRequest request = getRequest(); 獲取服務端響應對象:HttpServletResponse response = getResponse(); 獲取用戶端IP地址:String ip = Browser.getIP(getRequest()); 獲取用戶界面表單值:String name = getParameter("name"); // 接收表單值(表單名稱:name) 獲取當前系統時間戳:long dateline = Dates.getTimeMillis(); 向用戶界面(模板)賦值:setAttribute("屬性名稱", 屬性值); // 屬性值能夠是對象或具體數值 向用戶界面直接輸出:response.getWriter().write("<h2>Hello JSPGener!</h2>這是一個 Action 演示頁面…"); 向日志文件輸出:logger.info("日誌輸出:"+ ip); */ /** * 建立 */ @Override protected String create() { // 先處理父級方法,再處理本類定義 String result = super.create(); if (NONE.equalsIgnoreCase(result) || ERROR.equalsIgnoreCase(result) ) return result; // -------------------------- // 本類定義 return SUCCESS; } /** * 銷燬 */ @Override protectedvoid destroy() { // 本類定義 // -------------------------- // 先處理本類定義,再處理父級方法 super.destroy(); } // ----------------------------------------------------------- /** * 默認方法 */ @Override public String execute() { String ip = Browser.getIP(getRequest()); String youIp = getMessageValue("global.access_ip", new Object[]{ ip }); // 資源調用 // 日誌輸出 logger.info("日誌輸出:"+ youIp); // 字符串輸出 String str = "<h2>Hello JSPGener!</h2> 這是一個演示Action中的默認方法… " + youIp; setAttribute("message", str); // 跳轉頁面(若直接輸出,則跳轉無用,主要與模板結合使用) // this.redirectUrl = "http://www.jspgen.com/"; return "demo"; } }
演示視圖(模板)文件:
<%@page trimDirectiveWhitespaces="true"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@taglib prefix="g" uri="http://api.jspgen.com/taglib/jstl"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>演示</title> <link type="text/css" href="${config.staticUrl}ui/prompt.css" rel="stylesheet"> </head> <body> <div class="prompt tip info"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td>${message}</td> </tr> <tr> <td align="right"><a href="${config.host}">返回首頁</a></td> </tr> </table> </div> </body> </html>
本文由 JSPGener 提供,做者:西雅