EasyUI动用hessian+protocol buffer+easyUI综合案例–登六

率先先轻松介绍下hessian ,protocol buffer, easyUI框架

hessian:

Hessian是3个轻量级的remoting on http工具,选用的是Binary
CRUISERPC协议,所以它很合乎于发送贰进制数据,同时又富有防火墙穿透能力。Hessian1般是经过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 进行数据交换快许多。能够把它用来分布式应用之间的数据通讯可能异构环境下的数据沟通。作为一种作用和包容性都很特出的2进制数据传输格式,能够用于诸如互联网传输、配置文件、数据存款和储蓄等诸多世界。

EasyUI,EasyUI:

jQuery EasyUI是1组依照jQuery的UI插件集合体,而jQuery
EasyUI的对象便是帮助web开垦者更轻巧的创设出功用丰裕并且美观的UI分界面。开采者不要求编制复杂的javascript,也不须要对css样式有深远的问询,开垦者要求精通的唯有壹部分大概的html标签。

案例如下:

必要介绍:

福如东海Server壹上的用户账号可在别的应用(Server2)上登录的功用,达到一号多用和用户数量共享的目的。

重视作用点如下:

一 用户登录

二 展现用户音信

登录流程

一用户通过浏览器访问Server二的登6界面。

二用户输入账号密码,点击登陆按键。

三Server二接到用户的报到请求,调用Server一的账号验证接口。

肆Server1验证Server二发送过来的账号音讯(用户名、密码)后,再次回到验证结果。

伍Server二收下并拍卖Server一再次来到的认证结果,再将有关音信再次回到给用户(提醒登录失败也许呈现用户音讯)。 

技巧须要

1全数网页分界面均使用easyui编写。

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

叁hessian远程接口方法的入参和重临值类型均为字节数组。

Server二调用Server壹的接口时,先构造protobuf对象,将质量填充完成后,将该对象体系化获得的字节数组填入接口方法传给Server一;Server一收到该请求,将Server贰传过来的字节数组反连串化成protobuf对象,获取在这之中的属性值(比如用户帐号、密码),处理完了后,将处理结果填入protobuf对象,并赶回该指标的体系化结果(字节数组)。

流程图:

EasyUI 1

现实落到实处:

先下载所必须的包 hessioan-四.0.叁七.jar,必须安装protocol
buffer,下载easyUI包

第贰先写服务端:

创建web项目hessianServer

目录如下:

EasyUI 2

在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-二.肆.一.jar, hessioan-四.0.三七.jar导入到web项目中

上面编辑服务端代码

EasyUI 3

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出现

EasyUI 4

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

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

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

EasyUI 5

编辑前端代码:

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页面