Клиентская часть, написанная на PHP

Index.php

<?

header("Content-Type: text/html; charset=utf-8");

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Система учета прохода в здание</title>

<link href="http://127.0.0.1:8080/AccessInBuilding-war/css.css" type="text/css" rel="stylesheet" />

<link href="http://127.0.0.1:8080/AccessInBuilding-war/css/jquery-ui-1.9.1.custom.css" type="text/css" rel="stylesheet">

<script src="http://127.0.0.1:8080/AccessInBuilding-war/jquery-1.8.2.min.js"></script>

<script src="http://127.0.0.1:8080/AccessInBuilding-war/jquery-ui.js"></script>

<script type='text/javascript'>jQuery.noConflict();</script>

<script src="/js.js"></script>

</head>

<body>

<table border="0" cellpadding="0" cellspacing="0" width="700" align="center" class="body">

<tr>

<td>

<h1>Система учета прохода в здание</h1>

<div align="right" class="add_b">

<div align="right">Добавить нового пользователя</div>

</div>

<form action="add.jsp" method="post" enctype="multipart/form-data" class="add_form">

Имя<sup>*</sup>: <input type="text" name="name" id="add_name" value="" />

&nbsp;Код: <input type="text" name="code" id="add_code" value="" />

<input type="submit" value="Добавить пользователя" class="add" /><span class="add_load">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>

<div class="add_err"></div>

</form>

<form action="find.jsp" method="post" enctype="multipart/form-data" class="find_form">

Имя<sup>*</sup>: <input type="text" name="name" id="find_name" value="" />

&nbsp;Код: <input type="text" name="code" id="find_code" value="" />

<input type="submit" value="Найти" class="find" /><span class="find_load">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>

<div class="find_err">Поиск пользователя, например: <span>Иванов Иван</span> </div>

</form>

<br>

<div class="cnt_act"></div>

<div class="users"></div>

<div align="right"><br><span class="log"></span></div>

</td>

</tr>

</table>

</body>

</html>

Connect.php

<?

include $_SERVER['DOCUMENT_ROOT']."/connect_funcs.php";

$clogin = new ConnectLogin();

header('Content-Type: application/json; charset=utf8');

header('Cache-Control: no-cache');

usleep (100);

if( ($type=$_REQUEST['type']) != "" && $clogin->token ) {

switch($type) {

case "act":

echo $clogin->getData($type);

break;

case "users":

echo $clogin->getData($type);

break;

case "logs":

echo $clogin->getData($type);

break;

case "add":

echo $clogin->getData($type,$opt = array("name"=>$_REQUEST['name'], "code"=>$_REQUEST['code']));

break;

case "find":

echo $clogin->getData($type,$opt = array("name"=>$_REQUEST['name'], "code"=>$_REQUEST['code']));

break;

case "update_act":

echo $clogin->getData($type,$opt = array("id"=>$_REQUEST['id'], "act"=>$_REQUEST['act']));

break;

}

exit;

}

$error = $clogin->error;

if( $error ) echo $error;

else echo '{"error":"101"}';

?>

connect_funcs.php

<?

session_start();

if( !function_exists('json_decode') ) {

include_once $_SERVER['DOCUMENT_ROOT']."/JSON.php";

$json = new Services_JSON();

function json_decode($str) { global $json; return $json->decode($str); }

function json_encode($value) { global $json; return $json->encode($value); }

}

define("TIME_TO_SESSION_LIVE", 3600*24*30); # Время жизни сессии = 3600*24*30 = месяц.

class ConnectLogin {

var $login = "client";

var $pwd = "pwd_client";

var $URL = "http://localhost:8080/AccessInBuilding-war/connect.jsp";

var $token;

var $error;

function ConnectLogin() {

$this->token = $_COOKIE['token'];

if( !$this->token ) {

$this->token = $this->Autorization();

if( $this->token ) setcookie('token', $this->token, time()+TIME_TO_SESSION_LIVE, '/', $_SERVER['HTTP_HOST']);

}

return $this->token;

}

function Autorization() {

$ch = curl_init();//echo "[".$this->URL . "?auth_login=" . $this->login . "&auth_pwd=" . $this->pwd."]";

curl_setopt($ch, CURLOPT_URL, $this->URL . "?auth_login=" . $this->login . "&auth_pwd=" . $this->pwd);

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_TIMEOUT, 30);

curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT']."/cookies.dat");

curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT']."/cookies.dat");

if( !is_file($_SERVER['DOCUMENT_ROOT']."/cookies.dat") ) file_put_contents($_SERVER['DOCUMENT_ROOT']."/cookies.dat", "");

$result = curl_exec($ch);

curl_close($ch);

$result = json_decode($result);

if( $result->token ) {

return $result->token;

} elseif( $result->error ) {

$this->error = json_encode($result);

}

}

function getData($type="act", $opt=array()) {

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $this->URL . "?token=" . $this->token . "&type=" . $type. (sizeof($opt) > 0 ? "&".http_build_query($opt) : ""));

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_TIMEOUT, 30);

curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT']."/cookies.dat");

curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT']."/cookies.dat");

if( !is_file($_SERVER['DOCUMENT_ROOT']."/cookies.dat") ) file_put_contents($_SERVER['DOCUMENT_ROOT']."/cookies.dat", "");

$result = curl_exec($ch);

curl_close($ch);

return $result;

}

function disconect() {

$this->token = "";

setcookie('token', "", time()-TIME_TO_SESSION_LIVE, '/', $_SERVER['HTTP_HOST']);

}

}

?>

Js. js

var timer;

jQuery(document).ready(function() {

function showMessage(id,msg) {

jQuery(id).hide().html(msg).show();

setTimeout(function(){ jQuery(id).fadeOut(500); }, 3000);

}

function updateCnt(obj) {

var _this = obj;

jQuery.get("/connect.php",{type:"act"},function(data) {

data = eval(data);

if( data.cnt > 0 ) txt = "В здании находится " + data.cnt + " человек(а)";

else txt = "В здании никого нет";

jQuery(_this).fadeOut(0).html(txt).fadeIn(1000);

});

}

function updateUsers(obj) {

var _this = obj;

jQuery.get("/connect.php",{type:"users"},function(data) {

data = eval(data);

data = data.users;

if( data != "" ) {

jQuery(_this).fadeOut(0).html(data).fadeIn(1000);

jQuery(".radio").buttonset().refresh();

}

});

}

function updateLogs(obj) {

var _this = obj;

jQuery.get("/connect.php",{type:"logs"},function(data) {

data = eval(data);

data = data.logs;

if( data == "error" ) data = "Ошибка подключения к базе";

jQuery(_this).html(data);

});

}

jQuery(".add_b div").click(function(){

if( jQuery(this).is(".show") ) {

jQuery(this).removeClass("show");

jQuery(".add_form").slideUp().removeClass("add");

} else {

jQuery(this).addClass("show");

jQuery(".add_form").slideDown();

}

});

jQuery(".add").click(function() {

_this = this;

jQuery(".add_load").show();

name = jQuery("#add_name").val();

code = parseInt(jQuery("#add_code").val()) || 0;

jQuery(_this).parent().removeClass("add");

if( name != "" ) {

jQuery.get("/connect.php",{type:"add", name:name,code:code},function(data) {

data = eval(data);

data = data.data;

if( jQuery.trim( data ) == "done" ) {

showMessage(".add_err","Пользователь добавлен");

jQuery(_this).parent().addClass("add");

updateUsers(jQuery(".users").get(0));

updateLogs(jQuery(".log div").get(0));

} else {

showMessage(".add_err","Ошибка добавления");

}

jQuery(".add_load").hide();

});

} else {

showMessage(".add_err","Ошибка, не заполнено обязательное поле");

jQuery(".add_load").hide();

}

return false;

});

jQuery(".find").click(function() {

_this = this;

jQuery(".find_load").show();

var name = jQuery("#find_name").val();

code = parseInt(jQuery("#find_code").val()) || 0;

if( name != "" || code > 0 ) {

jQuery.get("/connect.php",{type:"find", name:name,code:code},function(data) {

data = eval(data);

data = data.data;

if( data == "error" ) {

showMessage(".find_err","Ошибка доступа к базе");

} else if( data > 0 ) {

showMessage(".find_err",name + ", в базе есть");

jQuery(".find_load").hide();

} else if( data == 0 ){

showMessage(".find_err","Нет");

jQuery(".find_load").hide();

};

jQuery(".find_load").hide();

});

} else {

showMessage(".find_err","Ошибка, не заполненно не одно из полей");

jQuery(".find_load").hide();

}

return false;

});

jQuery(".find_err span").click(function() {

jQuery(".find_form #find_name").val(jQuery(this).text());

jQuery(".find").trigger("click");

});

jQuery(".cnt_act").each(function() {

updateCnt(this);

});

jQuery(".users").each(function() {

updateUsers(this);

});

jQuery( '.radio' ).buttonset();

jQuery(".radio span").live("click",function(){

row = jQuery(this).parent().attr("for").split('_');

jQuery.get("/connect.php",{type:"update_act", id:parseInt(row[1]),act:parseInt(row[2])},function(data) {

updateCnt(jQuery(".cnt_act").get(0));

updateLogs(jQuery(".log div").get(0));

});

});

jQuery(".log").each(function() {

jQuery(this).html("Лог посещаемости<div class='logs'></div>");

});

jQuery(".log").live("click",function(){

div = jQuery('.logs',this);

if( div.is('.show') ) {

div.removeClass("show").slideUp('fast');

} else {

updateLogs(div);

div.addClass("show").slideDown();

}

});

});

cookies.dat –файл хранящий куку, созданный сервером для взаимосвязи склиен-сервера

# Netscape HTTP Cookie File

# http://curlm.haxx.se/rfc/cookie_spec.html

# This file was generated by libcurl! Edit at your own risk.

localhost FALSE /AccessInBuilding-war FALSE 0 JSESSIONID cf8604e6f1026fb4d5de0b7fc587
Выводы

В процессе выполнения работы, мы ознакомились с принципами построения корпоративных распределенных приложений на основе технологии EJB. Разработали распределенное корпоративное Java-приложение, содержащее серверную часть в форме EJB-модуля и клиентскую часть с web-интерфейсом. Для этого мы спроектировали схему БД и реализовали хранение данных в СУБД Java DB с помощью технологии Java EE 5 Persistence. Дополнительно было изучено взаимодействие между 2-я приложениями, реализованными на разных языках программирования: java – серверная часть и много клиентов на php, которые взаимодействуют с помощью JSON запросов.

Наши рекомендации