首先先简单介绍下hessian ,protocol buffer, easyUI框架

hessian:

Hessian是一个轻量级的remoting on http工具,采用的是Binary RPC协议,所以它很适合于发送二进制数据,同时又具有防火墙穿透能力。Hessian一般是通过Web应用来提供服务,因此非常类似于平时我们用的 WebService。只是它不使用SOAP协议,但相比webservice而言更简单、快捷。Hessian官网:http://hessian.caucho.com/

Hessian 可通过Servlet提供远程服务,需要将匹配某个模式的请求映射到Hessian服务。也可Spring框架整合,通过它的 DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessian的server端提供一个servlet基类, 用来处理发送的请求,而Hessian的这个远程过程调用,完全使用动态代理来实现的,,建议采用面向接口编程,Hessian服务通过接口暴露。

Hessian处理过程示意图:客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果

使用hessian所要下载的包:hessian-4.0.37.jar;

protocol buffer:

protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

EasyUI:

jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签。

案例如下:

需求介绍:

实现Server1上的用户账号可在其他应用(Server2)上登录的功能,达到一号多用和用户数据共享的目的。

主要功能点如下:

① 用户登录

② 显示用户信息

登录流程

①用户通过浏览器访问Server2的登陆界面。

②用户输入账号密码,点击登陆按钮。

③Server2收到用户的登录请求,调用Server1的账号验证接口。

④Server1验证Server2发送过来的账号信息(用户名、密码)后,返回验证结果。

⑤Server2收到并处理Server1返回的验证结果,再将相关信息返回给用户(提示登录失败或者显示用户信息)。

技术需求

①所有网页界面均采用easyui编写。

②服务器之间(Server1和Server2)的通信基于protobuf和 hessian(protobuf用于数据传输,hessian用于远程接口调用)。

③hessian远程接口方法的入参和返回值类型均为字节数组。

Server2调用Server1的接口时,先构造protobuf对象,将属性填充完毕后,将该对象序列化得到的字节数组填入接口方法传给Server1;Server1收到该请求,将Server2传过来的字节数组反序列化成protobuf对象,获取其中的属性值(比如用户帐号、密码),处理完成后,将处理结果填入protobuf对象,并返回该对象的序列化结果(字节数组)。

流程图:

具体实现:

先下载所必须的包 hessioan-4.0.37.jar,必须安装protocol buffer,下载easyUI包

首先先写服务端:

创建web项目hessianServer

目录如下:

在protocol安装目录下的examples下创建user.proto文件

package com.hessian.model;
option java_package="com.hessian.model";
option java_outer_classname="UserProtos";
message User{required string name=1;required string password=2;required string birth=3;optional string email = 4;optional int64 phone=5;
}

进入XXX\protobuf-2.4.1\examples目录,可以看到user.proto文件,执行命令 protoc --java_out=. user.proto 命令,如果生成com文件夹并在最终生成UserProtos类。

将UserProtos.java和XXX\protobuf-2.4.1\java\target目录下的protobuf-java-2.4.1.jar, hessioan-4.0.37.jar导入到web项目中

下面编写服务端代码

IService:

package com.hessian.service;public interface IService {public Boolean login(byte[] user);}

ServiceImpl

package com.hessian.service.impl;import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import com.google.protobuf.InvalidProtocolBufferException;
import com.hessian.model.UserProtos;
import com.hessian.model.UserProtos.User;
import com.hessian.service.IService;public class ServiceImpl implements IService {public Boolean login(byte[] user) {UserProtos.User use=null;try {use=UserProtos.User.parseFrom(user); //将字节数组转化为对象
            System.out.println(use);} catch (InvalidProtocolBufferException e) {// TODO Auto-generated catch block
            e.printStackTrace();}//进行用户名,密码验证if(use.getName().equals("oumyye")&&use.getPassword().equals("oumyye")){return true;}else {return false;}}}

web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><servlet><!-- 配置 HessianServlet,Servlet的名字随便配置,例如这里配置成ServiceServlet--><servlet-name>ServiceServlet</servlet-name><servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class><!-- 配置接口的具体实现类 --><init-param><param-name>service-class</param-name><param-value>com.hessian.service.impl.ServiceImpl</param-value></init-param></servlet><!-- 映射 HessianServlet的访问URL地址--><servlet-mapping><servlet-name>ServiceServlet</servlet-name><url-pattern>/ServiceServlet</url-pattern></servlet-mapping></web-app>

到此服务service1编写完成

进入http://localhost:8080/HessianServer/ServiceServlet出现

则编写成功,将src下的代码打包成hessian-common.jar文件。

下面进行service2客户端的编写loginClient

首先也要导入相关jar包,及目录如下:

编写前端代码:

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>ValidateBox - jQuery EasyUI Demo</title><link rel="stylesheet" type="text/css" href="themes/default/easyui.css"><link rel="stylesheet" type="text/css" href="themes/icon.css"><link rel="stylesheet" type="text/css" href="demo.css"><style type="text/css">input,textarea{width:200px;border:1px solid #ccc;padding:2px;}</style><script type="text/javascript" src="jquery/jquery-1.7.2.min.js"></script><script type="text/javascript" src="jquery/jquery.easyui.min.js"></script>
</head>
<body><h2>登陆</h2>${info}<div><form action="Login" method="post"><table><tr><td>用户名:</td><td><input class="easyui-validatebox" data-options="required:true,validType:'length[1,3]'" name="name"></td></tr><tr><td>密码:</td><td><input class="easyui-validatebox" data-options="validType:'password'" name="password"></td></tr></table><input type="submit"  value="登陆" style="width: 50px"></form></div></body></html>

success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>ValidateBox - jQuery EasyUI Demo</title><link rel="stylesheet" type="text/css" href="themes/default/easyui.css"><link rel="stylesheet" type="text/css" href="themes/icon.css"><link rel="stylesheet" type="text/css" href="demo.css"><style type="text/css">input,textarea{width:200px;border:1px solid #ccc;padding:2px;}</style><script type="text/javascript" src="jquery/jquery-1.7.2.min.js"></script><script type="text/javascript" src="jquery/jquery.easyui.min.js"></script>
</head>
<body><h2>登陆成功</h2>${name}</body></html>

然后编写servlet代码

package com.hessian.servlet;import java.io.IOException;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.caucho.hessian.client.HessianProxyFactory;
import com.hessian.model.UserProtos.User.Builder;
import com.hessian.service.IService;public class loginServlet extends HttpServlet {/*** */private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String url = "http://192.168.2.108:8080/HessianServer/ServiceServlet";HessianProxyFactory factory = new HessianProxyFactory();IService service = (IService) factory.create(IService.class, url);//创建IService接口的实例对象com.hessian.model.UserProtos.User.Builder ump=com.hessian.model.UserProtos.User.newBuilder();ump.setName(request.getParameter("name"));ump.setPassword(request.getParameter("password"));ump.setEmail("54654@qq.com");ump.setBirth("19931223");ump.setPhone(12313213);com.hessian.model.UserProtos.User info=ump.build();byte[] user=info.toByteArray();if(service.login(user)){RequestDispatcher dispatcher = request.getRequestDispatcher("success.jsp");dispatcher .forward(request, response);}else {request.setAttribute("info", "登陆失败!");RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");dispatcher .forward(request, response);}}}

编写web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><servlet><servlet-name>Login</servlet-name><servlet-class>com.hessian.servlet.loginServlet</servlet-class></servlet><servlet-mapping><servlet-name>Login</servlet-name><url-pattern>/Login</url-pattern></servlet-mapping>
</web-app>

这样整个代码就算编写完成了,下面进行测试:

http://localhost:8080/loginClient/ 可进行登陆,当用户名密码为oumyye时可登陆成功,跳转success.jsp页面

使用hessian+protocol buffer+easyUI综合案例--登陆相关推荐

  1. Protocol buffer的使用案例

    Protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.google 提供了多种语言的实现:java.c#.c++.go 和 python,每一种实 ...

  2. 跨语言RPC框架Hessian、Thrift、Protocol Buffer之间的选择

    为什么80%的码农都做不了架构师?>>>    总结在几者之间选择的考量: 1. 如果你不需要很多语言相互调用, 希望保持清晰的java接口代码(无任何业务不相关的接口继承和方法,属 ...

  3. Golang 使用Protocol Buffer 案例

    目录 1. 前言 2. Protobuf 简介 2.1 Protobuf 优点 2.2 Protobuf 缺点 2.3 Protobuf Golang 安装使用 3. Protobuf 通讯案例 3. ...

  4. 【Nodejs】文件读写综合案例

    一.核心模块-文件读写 核心模块 就是nodejs自带的模块,在安装完nodejs之后,就可以任意使用啦.相当于学习js时使用的Math对象一样 自定义模块 程序员自己写的模块.相当于我们在学习js时 ...

  5. Protocol Buffer入门——轻松搭建java环境 .

    http://blog.csdn.net/xyz317100759/article/details/6261236 2011-03-19 15:44 1185人阅读 评论(5) 收藏 举报 由于项目的 ...

  6. Java与C++进行系统间交互:Protocol Buffer

    在一次项目中,因笔者负责的java端应用需要与公司C++系统进行交互,公司选定Protocol Buffer方案,故简单的了解一下 有需要的可以看一下其他作者的文章,了解一下Protobuf: htt ...

  7. 综合案例-注册页面(HTML)

    综合案例-注册页面(HTML) <!DOCTYPE html> <html lang="en"><head><meta charset=& ...

  8. 知心王姐小饭桌 IM消息应用开发:一看看懂Protocol Buffer(协议篇)

    前言 由于笔者业团队的业务对即时通讯服务有很大的依赖,春节结束后的第一天,红包没到,产品同学先到了,产品同学和我说要做一款IM,看到需求文档后和设计图后笔者大吃一斤 这不就是一个翻版的web qq吗? ...

  9. WEB综合案例 黑马面面 day04 用户与角色绑定功能 登录用户菜单控制和权限效验

    WEB综合案例 day04 用户与角色绑定功能 登录用户菜单控制和权限效验 1. 用户与角色 思路: 根据用户去找角色的信息,然后需要用到两个表的查询,在前端页面显示信息的时候用for:each通过遍 ...

最新文章

  1. 张钹、朱松纯、黄铁军等同台激辩:人工智能的“能”与“不能”
  2. C++编译期多态与运行期多态
  3. 西南往事回忆录—工作点滴
  4. [NOIP2015提高组]运输计划
  5. 前端学习(2226):react之组件
  6. js将long日期格式转换为标准日期格式
  7. acdsee pro3 安装序列号
  8. bjui—关闭dialog以及当前标签
  9. 刚刚,神舟十三号载人飞船即将撤离空间站核心
  10. 剑三 服务器状态查询,数据互通全面启动_剑侠情缘网络版叁_金山游戏官方网站_金山逍遥Xoyo.com...
  11. Python中实现控制小数点位数的方法
  12. 追求得到之日即其终止之时, 寻觅的过程亦即失去的过程。——村上
  13. 用DOS命令格式化U盘
  14. 360浏览器代码修改浏览模式
  15. 大一作业HTML期末网页作业(化妆品网站制作) html+css+js 雅诗兰黛美妆网站制作
  16. TCP/IP OSI各层协议,ARP属于哪一层的协议
  17. 关于面试党的那些刁问题
  18. 微信公众号调起扫码功能
  19. 矩阵分解算法与因子分解机
  20. linux毁了所有数据,小心!数据在你不注意的时候居然偷偷损毁了

热门文章

  1. 如何搭建测试平台?理清思路很重要
  2. 软件测试工程师—从零到月入过万你只需要看这篇就够了(基础篇)
  3. python生成一个数组_在for循环中创建多个数组(Python)
  4. json 文档拆分工具_如何把PDF多页文档拆为单页?快看高手私藏实用的技巧
  5. BB-UNet:带有包围框先验的U-Net
  6. DenseNet实验
  7. 徐州工程学院计算机报名,2019年3月江苏徐州工程学院计算机等级考试报名时间...
  8. python查找当前路径,在Python中查找当前终端选项卡的当前目录
  9. android+警告声音,android – 如何使用带有setAudioAttributes的警报音量播放铃声?
  10. asp.net gridview 模板列 弹出窗口编辑_Mac桌面多窗口整理工具Moom,使用教程