JSPGenSDF软件开发框架(于2014年5月5号发布4.0版),简称JSPGen,专用Java Web方面平台式软件开发,整个框架也可以说是前台与后台的一个粘合剂,现在对JSPGenSDF进行开发配置,看看最基础的配置和最基本的使用方法。
JSPGenSDF学习成本不高,采用的都是Java原生态编码方式,按照官方说法:稍有Java基础知识均可做开发,这也是我打算整理此教程的根本原因(题外话:此次版本与之前版本区别很大,网上资料很少,官方资料又太过专业,希望此教程能帮助大家更好、更快熟悉这个开发框架)。
本次demo工程是一个官网提供的示例项目工程,开发方面我们采用官网提供的Eclipse3.7中文版进行Java开发以及项目管理。
一、准备工作
1、下载项目运行环境:WATMServer2.6+
2、下载项目运行(开发)时所需第三方jar组件包:Jar20140505
3、下载开发环境(工具):Eclipse3.7
4、获取JSPGen示例项目:
有两种获取方式:
a、到官网在线预定,选免费型(建议选这种方式,获取都是最新版本);
b、加入官网提供的QQ交流群:12349848,在群共享里下载。
环境下载地址:http://www.jspgen.com/html/node/NodeX6.html
示例项目获取:http://www.jspgen.com/CMS/Node.gen?Id=8
二、环境安装及项目导入
视频教程下载:http://help.jspgen.com/vteach/jspgen4_01.rar
三、项目配置
A、项目结构
B、配置文件
1、jspgen-config.xml
框架所构建的平台基本信息配置:
<?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>
<!-- 开启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>
2、jspgen-action.xml
业务动作配置,为后台业务与前台显示视图进行配对服务,这里需要注意仅定义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>
3、i18n_zh_CN.xml
国际化资源配置,主要用于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>
4、log4j.properties
日志输出配置,仅修改输入文件地址即可:
# 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
5、jspgen-parse.xml
视图(模板)解析配置,一般情况下不需要修改,保持默认即可:
<?xml version="1.0" encoding="UTF-8"?>
<jspgen version="4.0">
<!-- 初始化参数 -->
<props name="parse">
<!-- JSTL 参数 -->
<prop name="jstl.template.import"><![CDATA[
<%@page trimDirectiveWhitespaces="true"%>
<%@page import="java.util.*"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="gen" uri="http://help.jspgen.com/taglib/jstl" %>
]]></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>
C、业务动作处理
1、IndexAction.java
默认视图动作:
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;
}
}
2、DemoAction.java
演示动作:
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 boolean begin() {
// 先处理父级方法,再处理本类定义
boolean isflag = super.begin();
if (!isflag) return isflag;;
// --------------------------
// 本类定义
return true<span style="font-family: Arial, Helvetica, sans-serif;">;</span>
}
/**
* 结束
*/
@Override
protectedvoid end() {
// 本类定义
// --------------------------
// 先处理本类定义,再处理父级方法
super.end();
}
// -----------------------------------------------------------
/**
* 默认方法
*/
@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";
}
}
3、demo.jsp
演示视图(模板)文件:
<%@page trimDirectiveWhitespaces="true"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="gen" uri="http://help.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>
四、项目发布
A、项目部署至Tomcat
B、进行测试
技术交流QQ群:12349848