跟阿根一起学Java Web开发一:开发环境搭建及JSPGen基础配置
JSPGenSDF软件开发框架(于2014年5月5号公布4.0版)。简称JSPGen,专用Java Web方面平台式软件开发,整个框架也能够说是前台与后台的一个粘合剂,如今对JSPGenSDF进行开发配置。看看最基础的配置和最主要的用法。
JSPGenSDF学习成本不高。採用的都是Java原生态编码方式,依照官方说法:稍有Java基础知识均可做开发,这也是我打算整理此教程的根本原因(题外话:此次版本号与之前版本号差别非常大,网上资料非常少,官方资料又太过专业,希望此教程能帮助大家更好、更快熟悉这个开发框架)。
本次demoproject是一个官网提供的演示样例项目project,开发方面我们採用官网提供的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
演示样例项目获取: Id=8">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返回keyword模板文件存放路径,相对于框架根文件夹下 -->
<prop name="jspgen.result.uri">/WEB-INF/template/</prop>
<!-- 模板路径自适应,不启用的情况下:若keyword不存在,显示未定义返回keyword -->
<!-- 启用情况下(仅仅在应用区模板下实用):在应用区、框架区都未定义返回keyword的情况下,则自己主动组装模板路径(可由组装变量自己主动匹配,就可以实现Action零配置开发) --> <!-- 组装变量:${space}、${action}、${method}、${result}。分别为:空间名(模板文件夹)、Action名、方法名、返回keyword。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> <!-- 返回配对:公共keyword -->
<results>
<!--
公共keyword:默认有none error success ajax[message],当中none无需定义,优先级最高用于内容直接输出。其它keyword低于模板自适应及私有keyword配对;
公共keyword:模板文件均位于框架模板文件夹下(默认方案)。
-->
<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">
<!--
返回配对:返回keyword相应空间所在包内的全部Action,所以模板文件名称建议採用组装变量式定义;
私有keyword:优先级高于公共keyword。支持模板类型: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
跟阿根一起学Java Web开发一:开发环境搭建及JSPGen基础配置的更多相关文章
- 跟阿根一起学Java Web开发二:使用Ajax技术及XML与JSON实现输出
如今B/S结构的系统使用Ajax技术是再平常只是的了.今天我们就来探讨下在JSPGenSDF第四版中:怎样使用Ajax技术.怎样输出XML文件及JSON格式数据输出. 怎样搭建一个最基础的JSPGen ...
- JAVA WEB快速入门之环境搭建
前言 我是一直致力于:.NET技术栈.WEB前端.架构设计相关的开发与管理工作,但因国内大环境影响及公司技术方向发生转变(由.NET全部转为JAVA),需要熟练掌握JAVA WEB相关的知识,故我也得 ...
- 【JAVA WEB教程】jsp环境搭建+部署网站(eclipse+tomcat)【详细+图文】
下载tomcat7.X 下载地址为:http://tomcat.apache.org/download-70.cgi 下载完成之后就开始安装 Next I Agree 选中所有的复选框 ...
- 【JAVA WEB教程】jsp环境搭建(eclipse)【详细+图文】
下载JDK(如果你的系统是64位的,那么就下载64位版本的) 然后安装,点击下一步 再点击下一步 安装成功 下载针对JAVA EE的Eclipse(如果你的系统是64位的,那么就下载6 ...
- 实战突击: Java Web项目整合开发(PDF)
实战突击: Java Web项目整合开发(PDF)
- SpringBoot系列教程web篇之Freemaker环境搭建
现在的开发现状比较流行前后端分离,使用springboot搭建一个提供rest接口的后端服务特别简单,引入spring-boot-starter-web依赖即可.那么在不分离的场景下,比如要开发一个后 ...
- 使用Kotlin开发Android应用 - 环境搭建 (1)
一. 在Android Studio上安装Kotlin插件 按快捷键Command+, -> 在Preferences界面找到Plugins -> 点击Browse repositorie ...
- Tiny4412 开发板 编译环境搭建【转】
本文转载自:http://blog.csdn.net/beijiwei/article/details/51055369 版权声明:本文为博主原创文章,未经博主允许不得转载. /*********** ...
- SpringBoot系列教程web篇之Beetl环境搭建
前面两篇分别介绍了目前流行的模板引擎Freemaker和Thymeleaf构建web应用的方式,接下来我们看一下号称性能最好的国产模板引擎Beetl,如何搭建web环境 本文主要来自官方文档,如有疑问 ...
随机推荐
- nginx + 一个端口 部署多个单页应用(history模式)
目前web开发 使用一般前后端分离技术,并且前端负责路由.为了美观,会采用前端会采用h5 history 模式的路由.但刷新页面时,前端真的会按照假路由去后端寻找文件.此时,后端必须返回index(i ...
- CSS3的-字体 @font-face
http://www.w3cplus.com/content/css3-font-face http://www.w3cplus.com/css3/web-icon-with-font-face ht ...
- sql优化工具--美团SQLAdvisor
美团点评SQL优化工具SQLAdvisor开源 介绍 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 SQL 优化,不仅可以提升程序性能,还能够降低线上故障的概率. 目前常用的 S ...
- SQLServer数据库查看死锁、堵塞情况
在压力测试过程中,不间断的按F5键执行上面的SQL语句,如果出现死锁或者堵塞现象,就会在执行结果中罗列出来.如果每次连续执行SQL,都有死锁或者堵塞出现,说明死锁或者堵塞的比较严重. --每秒死锁数量 ...
- 浅谈 HTTP 协议
一. HTTP简介 超文本传输协议 Hyper Text Transfer Protocol 是一种用于分布式.协作式和超媒体信息系统的应用层协议 HTTP是万维网的数据通信的基础 HTTP有很多应用 ...
- 正负无穷float('inf')的一些用法
Python中可以用如下方式表示正负无穷: float("inf"), float("-inf") 利用 inf 做简单加.乘算术运算仍会得到 inf > ...
- python27 mysqldb window install
https://www.codegood.com/archives/129 下载地址 : https://i.cnblogs.com/Files.aspx
- 自己项目使用了ARC,项目中使用第三方库继续引用ARC
Objective-C引入ARC(Automatic Reference Counting)后,我们经常会面对这样一种困境:自己的项目使用了ARC,却发现要使用的第三方类库是non-ARC的:又或者自 ...
- BNUOJ 19297 Code Refactoring
Code Refactoring Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Ori ...
- python类可以截获Python运算符
类可以截获Python运算符 现在,让我们来看类和模块的第三个主要差别: 运算符重载.简而言之,运算符重载就是让用类写成的对象,可截获并响应用在内置类型上的运算:加法.切片.打印和点号运算等.这只是自 ...