RequestValue是系统中获取参数使用的对象,它将From,Cookie,Session,Query,数据集(DTTable)等对象传递的参数作为一个对象统一处理。从而简便编程环境。
RequestValue基本使用是getString(参数名),例如getString(‘xmlname’)是获取配置文件名称。getRequest()是获取页面的request对象。
DataConnection是数据库连接,用于系统和数据库的操作,调用WEB容器的数据库连接池。使用方法:
生成对象
DataConnection conn=new DataConnection();
conn.setConfigName(‘test’); //在EwaConnection.xml中定义的名称
获取结果集
//设置参数集合对象
conn.setRequestValue(requestValue);
//执行带参数查询命令
conn.executeQuery(‘select * from users where uid=@uid’);
ResultSet rs=null; //结果集
if(conn.getErrorMsg()==null || conn.getErrorMsg().length==0){
rs=conn.getLastResult().getResultSet(); //获取结果集
….
}
conn.close(); //关闭连接
Log是记录日志的信息类,包括执行的配置文件(xmlname),配置项(itemname),调用的活动(Action),日期,IP,执行时间,日志描述信息等,在编写自定义类中调用。
页面权限可根据需要自行编写权限控制类,控制类需要根据IAcl接口派生(com.gdxsoft.easyweb.acl.IAcl)。
|
函数 |
说明 |
参数 |
返回值 |
备注 |
|
canRun |
是否可继续执行 |
|
true/false |
如果true则继续执行,否则跳转到指定的页面 |
|
getGotoUrl |
获取跳转页面 |
|
String |
canRun为false时调用 |
|
setGotoUrl |
赋值跳转页面 |
|
|
好像用处不大。 |
|
getRequestValue |
获取参数值对象 |
|
RequestValue |
用于内部调用判断用 |
用户在编写自定义Acl时,主要编写canRun方法。基本思路是根据传递的参数来判别该模块是否当前用户可执行。如果不可执行,设置getGotoUrl获取的地址供系统调用。
使用方式是在配置项的Page参数表中设置Acl参数,填写你自定义的类的全称,例如:“your.pakagename.MyAcl”,系统会自动调用并执行。
举例说明,要点是注意两点,首先是判断是否允许执行,可从数据库,session或其他资源获取相应数据,其次根据参数设定不同的跳转地址。
package your.pakagename;
import
com.gdxsoft.easyweb.script.RequestValue;
import com.gdxsoft.easyweb.acl.IAcl;
import com.gdxsoft.easyweb.datasource.DataConnection;
import com.gdxsoft.easyweb.datasource.Data.DTTable;
public class MyAcl implements
IAcl {
private String _XmlName;
private String _ItemName;
private RequestValue _RequestValue;
private String _GoToUrl; //验证失败跳转页面
public boolean canRun() {
//在session中保存了管理员编号 ADM_ID
//在表USER_ACL保存了权限数据,字段ALLOW表示是否可执行
String
sql = ”SELECT ALLOW FROM USER_ACL WHERE ”
+
” USER_ID=@ADM_ID AND ITEM_NAME=@ITEMNAME ”
+
” AND XML_NAME=@XMLNAME”;
DataConnection
conn=new DataConnection();
cnn.setConfigName(‘test’);
//设置参数集合对象
conn.setRequestValue(this._RequestValue);
//执行带参数查询命令
conn.executeQuery(sql);
ResultSet
rs=null; //结果集
boolean isCanRun=false; //返回值
if(conn.getErrorMsg()==null || conn.getErrorMsg().length==0){
rs = conn.getLastResult().getResultSet();
//获取结果集
//使用DTTable获取rs数据集
DTTable table = new DTTable();
table.initData(table);
if(table.isOk()
&& table.getCount()>0){
//获取指定字段的值
Object
o = table.getRow(0).getCell(“ALLOW”).getValue();
if(o!=null
&& o.toString().equals(“YES”)){
isCanRun=true;
}
}
}
conn.close();
//关闭连接
if(!isCanRun){
//指向相应地址
String
xn=._RequestValue.getString(‘XMLNAME’).toLower();
//根据XmlName判断,设置跳转地址
if(xn.indexOf(“|admin.xml”)>){
this._ GoToUrl=”/messages/errors/deny.html”;
}else{
this._
GoToUrl=”/messages/errors/user_deny.html”;
}
}
return isCanRun;
}
//赋值参数对象,类里要有对象接收
public void setRequestValue(RequestValue
requestValue) {
this._RequestValue
= requestValue;
}
//获取跳转地址,注意要赋值 _GoToUrl
public
String getGoToUrl() {
return
_GoToUrl;
}
public
RequestValue getRequestValue() {
return _RequestValue;
}
public MyAcl() {
}
public MyAcl(String xmlName, String itemName) {
this._ItemName = itemName;
this._XmlName = xmlName;
}
public String getXmlName() {
return _XmlName;
}
public void setXmlName(String xmlName) {
_XmlName = xmlName;
}
public String getItemName() {
return _ItemName;
}
public void setItemName(String itemName) {
_ItemName = itemName;
}
public void setGoToUrl(String goToUrl) {
_GoToUrl = goToUrl;
}
}
日志可根据需要自行编写日志记录类,控制类需要根据ILog接口派生(com.gdxsoft.easyweb.log.ILog)。
|
函数 |
说明 |
参数 |
返回值 |
备注 |
|
write |
写日志 |
|
|
主要编写部分 |
|
setLog |
赋值日志 |
log 日志信息 |
|
|
|
getLog |
获取日志 |
|
String |
|
用户在编写自定义Log时,主要编写write方法,作用是记录日志信息,无论是填写到数据库还是到文件用户需要自行编写。
使用方式是在配置项的Page参数表中设置Log参数,填写你自定义的类的全称,例如:“your.pakagename.MyLog”,同时,要在Action参数表中的CallSet部分填写记录日志的信息,例如“用户@username调用@xmlname的@ItemName”,系统会自动调用并执行。
举例说明。
package
your.pakagename;
import
com.gdxsoft.easyweb.datasource.DataConnection;
import
com.gdxsoft.easyweb.script.RequestValue;
public
class MyLog implements ILog {
private Log _Log;
public void
Write() {
if
(super.getLog().getMsg() == null) {
return;
}
/*
System.out.println(super.getLog().getXmlName()
+ ", "
+
super.getLog().getItemName() + ", " + super.getLog().getMsg()
+
", " + super.getLog().getRunTime() + ", "
+
super.getLog().getDate());
*/
this.WriteToLog();
}
/**
* 参考定义自己的写入日志的方法, 下面的例子是个参考,是用于写入数据库的日志
*
* CREATE TABLE LOG_MAIN( LOG_ID INT
IDENTITY, USER_ID INT, LOG_MSG
* NVARCHAR(1000), LOG_TIME DATETIME,
LOG_IP VARCHAR(19), LOG_XMLNAME
* VARCHAR(200), LOG_ITEMNAME
VARCHAR(244), LOG_RUNTIME INT, LOG_ACTION
* VARCHAR(233), LOG_URL varchar(1500),
LOG_REFERER varchar(1500), LOG_DES
* nvarchar(200) )
*/
private
void WriteToLog() {
//
根据自己的日志表结构生成写入日志的方法
Log
log = super.getLog();
String
sql = "INSERT INTO LOG_MAIN(LOG_DES, LOG_MSG, LOG_TIME,"
+
" LOG_IP, LOG_XMLNAME, LOG_ITEMNAME, LOG_RUNTIME"
+
", LOG_ACTION, LOG_URL, LOG_REFERER)"
+
" VALUES (@LOG_DES, @LOG_MSG, @LOG_TIME,"
+
" @LOG_IP, @LOG_XMLNAME, @LOG_ITEMNAME, @LOG_RUNTIME, "
+
"@LOG_ACTION, @LOG_URL,
@LOG_REFERER)";
RequestValue
rv = new RequestValue();
rv.addValue("LOG_DES",
log.getDescription());
rv.addValue("LOG_MSG",
log.getMsg());
rv.addValue("LOG_TIME",
log.getDate(), "Date", 100);
rv.addValue("LOG_IP",
log.getIp());
rv.addValue("LOG_XMLNAME",
log.getXmlName());
rv.addValue("LOG_ITEMNAME",
log.getItemName());
rv.addValue("LOG_RUNTIME",
log.getRunTime());
rv.addValue("LOG_ACTION",
log.getActionName());
rv.addValue("LOG_URL",
log.getUrl());
rv.addValue("LOG_REFERER",
log.getRefererUrl());
DataConnection
cnn = new DataConnection();
cnn.setConfigName(‘test’);
try
{
//
设在日志的 RequestValue
cnn.setRequestValue(rv);
cnn.executeUpdate(sql);
}
catch (Exception e) {
System.err.println(e);
}
finally {
cnn.close();
}
}
public Log getLog() {
return
_Log;
}
public void setLog(Log log) {
_Log
= log;
}
}