一、环境和资源准备

  1. 离线资源下载:
  • V979946-01.zip (Oracle Autovue 软件)
  • apache-tomcat-9.0.40-windows-x64.zip
  • jdk-8u65-windows-x64.exe

二、服务器运行环境部署和配置

1、JDK 安装和apache-tomcat-9.0.40-windows-x64

2、系统环境变量设置

JAVA_HOME=C:\Program Files\Java\jdk1.8.0_65

Classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

Path=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

CATALINA_BASE=E:\apache-tomcat-9.0.40;

CATALINA_HOME=E:\apache-tomcat-9.0.40;

三、安装AutoVue服务器和部署配置

1、安装 InstallClientServer.exe

2、指定安装目录,然后点击下一步(注意:记住这个安装目录,每台服务器的Autovue的安装目录必须完全一致)

3、选择自定义,然后点击下一步

4、身份验证

5、配置AutoVue文件

用记事本打开:C:\Oracle\AutoVue\bin\jvueserver.properties,修改如下信息

jvueserver.rmi.host.1 --其它服务器地址

jvueserver.authentication.enable --是否启用身份验证

jvueserver.processPoolSize --进程数

#########################################
# AutoVue Server Configuration         #
#########################################[Options]
# MAIN SETTINGS:
# -------------
# * jvueserver.hostname specifies the name of the primary AutoVue server
jvueserver.hostname=XXX.com
# * RMI Registry port number
jvueserver.rmi.host.1=【服务器1】:1099
jvueserver.rmi.host.2=【服务器2】:1099
jvueserver.rmi.host.3=【服务器3】:1099
jvueserver.rmi.port=1099
# * RMI remote objects ports
# *   Specify a range of ports to use, or leave commented for automatic allocation.
#jvueserver.rmi.objectPorts=2020-2120
# * Enable Socket connections to the server
jvueserver.socket.enable=true
# * Socket port number
jvueserver.socket.port=5099
# * Ini file for VueServer settings. Default: VueServer.ini
jvueserver.inifile=VueServer.ini
# * Set the process pool size for the server
jvueserver.processPoolSize=10
# * Enable streaming file cache on the server
jvueserver.metacache.enable=true
# * Set the Encryption Algorithm
jvueserver.encryption.algorithm=AES
# * Set the Key Agreement Algorithm (Secret key)
jvueserver.encryption.keyagreement.algorithm=EC
# * Specify client authentication plug-in to load at AutoVue server startup
#jvueserver.authenticator=com.cimmetry.jvueserver.JAASAuthenticator
jvueserver.authentication.enable=FALSE
#
# Collaboration settings
#
# * Enable or disable collaboration
jvueserver.collaboration.enable=true
# * Communication protocol
jvueserver.collaboration.protocol=rmi
# * Minimum of IDs for collaboration
jvueserver.collaboration.id.min=0
# * Filter out sensitive DMS arguments from the DocID that is passed to collaboration session guests
jvueserver.collaboration.dmsargsfilter=.*(JSESSIONID|USERNAME|PASSWORD).*#
# PROXY SETTINGS:
# --------------
# * Define the proxy server (if any) that is needed to access
# * the network. Warning: Please specify the correct values, otherwise
# * the AutoVue Server will report "File not found" errors.
# * Note: This is not the client proxy machine, but the proxy, if any,
# *       that the server uses to connect to the network.
#jvueserver.http.proxyhost=my.proxyhostname.com:80
#jvueserver.ftp.proxyhost=my.proxyhostname.com:80#
# Base dir
#--------------------------------
jvueserver.basedir=C:\Oracle\AutoVue\#
# Bin dir
#--------------------------------
jvueserver.bindir=C:\Oracle\AutoVue\bin\#
# PROGRAM STARTUP OPTIONS:
# -----------------------
jvueserver.classpath=C:\Oracle\AutoVue\bin\jvueserver.jar;C:\Oracle\AutoVue\bin\jsonrpc4j.jar;C:\Oracle\AutoVue\bin\log4j-api.jar;C:\Oracle\AutoVue\bin\log4j-core.jar;C:\Oracle\AutoVue\bin\log4j-web.jar;C:\Oracle\AutoVue\bin\jackson-dataformat-xml-2.6.3.jar;C:\Oracle\AutoVue\bin\jackson-module-jaxb-annotations-2.6.3.jar;C:\Oracle\AutoVue\bin\stax2-api-3.0.1.jar;C:\Oracle\AutoVue\bin\woodstox-core-5.0.3.jar;C:\Oracle\AutoVue\bin\servlet.jar
jvueserver.jre=C:\Oracle\AutoVue\jre\bin\javaw.exe
jvueserver.cmdline=-Xmx128M -Djava.security.policy="C:\Oracle\AutoVue\bin\policy" -Dlog4j.configurationFile="file:/C:\Oracle\AutoVue\bin\log4j.xml" com.cimmetry.jvueserver.JVueServer -p"C:\Oracle\AutoVue\bin\jvueserver.properties"docserver.cmdline=-Xmx128M -Djava.security.policy="C:\Oracle\AutoVue\bin\policy" -Dlog4j.configurationFile="file:/C:\Oracle\AutoVue\bin\log4j.xml" com.cimmetry.jvueserver.docserver.DocServer -p"C:\Oracle\AutoVue\bin\jvueserver.properties"# Server garbage collection delay
jvueserver.timer.delay=20000jvueserver.cache.directory=C:\Oracle\AutoVue\bin\Cache
jvueserver.cache.size=20480
jvueserver.markups.directory=C:\Oracle\AutoVue\bin\Markups
jvueserver.users.directory=C:\Oracle\AutoVue\bin\Profiles
jvueserver.users.defaultini=default.ini
jvueserver.users.allusersini=allusers.ini
jvueserver.help.file.en=http://xxx1.com:5098/Autovue/help/en/AutoVueOnlineHelp.html
jvueserver.help.file.de=http://xxx1.com:5098/Autovue/help/de/AutoVueOnlineHelp.html
jvueserver.help.file.fr=http://xxx1.com:5098/Autovue/help/fr/AutoVueOnlineHelp.html

6、设置自动启动服务

  • 设置允许运行的服务域账号:在【本地策略】->【用户权限分配】->【作为服务登录】->添加【运行的域账号】
  • 运行CMD命令 定位安装路径下: jvueserverX.exe –install 【域账号】 【密码】

  • 在服务列表可以看到安装window服务名称:Oracele Autovue Server

7、Tomcat 的WebApp 部署Selver

  • E:\apache-tomcat-9.0.40\webapps 下新建 【Autovue】 文件夹
  • 【C:\Oracle\AutoVue\bin】里的文件,autovue.jnlp、autovue.js、gluegen-rt.jar、jogl.jar、jsonrpc4j.jar、jvue.jar 拷贝到【Autovue\AutoVueClient】
  • 【C:\Oracle\AutoVue\examples\WarSample\Autovue\WEB-INF\lib】里的文件拷贝到【Autovue\WEB-INF\lib】
  • 修改【WEB-INF\web】的配置文件,信息如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0">
<filter><filter-name>SimpleCORSFilter</filter-name><filter-class>com.XX.autovue.SimpleCORSFilter</filter-class><init-param><param-name>Origin</param-name><param-value>http://xxx1.com,http://xxx2.com</param-value></init-param><init-param><param-name>Methods</param-name><param-value>POST, GET, OPTIONS, DELETE</param-value></init-param><init-param><param-name>Age</param-name><param-value>3600</param-value></init-param><init-param><param-name>Headers</param-name><param-value>Content-type,x-requested-with,Authorization,x-ui-request,lang,Accept</param-value></init-param>   <init-param><param-name>Credentials</param-name><param-value>true</param-value></init-param>
</filter>
<filter-mapping><filter-name>SimpleCORSFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping><servlet><servlet-name>VueJNLPServlet</servlet-name><servlet-class>com.cimmetry.servlet.VueJNLPServlet</servlet-class><init-param><param-name>URL-Dir</param-name><param-value>/AutoVueClient</param-value></init-param><init-param><param-name>Cookies</param-name><param-value>JSESSIONID;</param-value></init-param></servlet><servlet><servlet-name>VueRDVServlet</servlet-name><servlet-class>com.cimmetry.servlet.VueRDVServlet</servlet-class></servlet><servlet><servlet-name>VueKeyPairServlet</servlet-name><servlet-class>com.cimmetry.servlet.VueKeyPairServlet</servlet-class></servlet><servlet><servlet-name>VueServlet</servlet-name><servlet-class>com.cimmetry.servlet.VueServlet</servlet-class><init-param><param-name>JVueServer</param-name><param-value>xx1.com:5099;xx2.com:5099;xx3.com:5099</param-value></init-param><init-param><param-name>Verbose</param-name><param-value>false</param-value></init-param><init-param><param-name>EnableSSL</param-name><param-value>false</param-value></init-param></servlet><servlet-mapping><servlet-name>VueRDVServlet</servlet-name><url-pattern>/servlet/VueRDVServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>VueJNLPServlet</servlet-name><url-pattern>/servlet/VueJNLPServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>VueKeyPairServlet</servlet-name><url-pattern>/servlet/VueKeyPairServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>VueServlet</servlet-name><url-pattern>/servlet/VueServlet</url-pattern></servlet-mapping><session-config><session-timeout>200</session-timeout></session-config>
</web-app>

8、将tomcat设置为window 服务运行,运行命令:

cd E:\apache-tomcat-9.0.40\bin\
service install

9、访问如下地址检测是否部署成功

http://xxx.com:8080/Autovue/servlet/VueServlet

附件:

自定义过滤器

package com.XXX.autovue;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;public class SimpleCORSFilter implements Filter {private String origin;private String methods;private String age;private String headers;private String credentials;public void init(FilterConfig filterConfig) throws ServletException {origin= filterConfig.getInitParameter("Origin");methods=filterConfig.getInitParameter("Methods");age=filterConfig.getInitParameter("Age");headers=filterConfig.getInitParameter("Headers");credentials=filterConfig.getInitParameter("Credentials");}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;String []  allowDomain= origin.split(",");Set<String> allowedOrigins= new HashSet<String>(Arrays.asList(allowDomain));String originHeader=request.getHeader("Origin");if (allowedOrigins.contains(originHeader)) {//跨域请求,*代表允许全部类型)response.setHeader("Access-Control-Allow-Origin",originHeader);//允许请求方式 "POST, GET, OPTIONS, DELETE"response.setHeader("Access-Control-Allow-Methods",this.getMethods());//用来指定本次预检请求的有效期,单位为秒,在此期间不用发出另一条预检请求 "3600"response.setHeader("Access-Control-Max-Age", this.getAge());//请求包含的字段内容,如有多个可用哪个逗号分隔如下 "Content-type,x-requested-with,Authorization,x-ui-request,lang,Accept"response.setHeader("Access-Control-Allow-Headers",this.getHeaders() );//访问控制允许凭据,true为允许response.setHeader("Access-Control-Allow-Credentials", this.getCredentials());// 浏览器是会先发一次options请求,如果请求通过,则继续发送正式的post请求// 配置options的请求返回if (request.getMethod().equals("OPTIONS")) {response.setStatus(200);response.getWriter().write("OPTIONS returns OK");return;}}// 传递业务请求处理chain.doFilter(servletRequest, servletResponse);}public String getOrigin() {return origin;}public void setOrigin(String origin) {this.origin = origin;}public String getMethods() {return methods;}public void setMethods(String methods) {this.methods = methods;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getHeaders() {return headers;}public void setHeaders(String headers) {this.headers = headers;}public String getCredentials() {return credentials;}public void setCredentials(String credentials) {this.credentials = credentials;}
}

四、第三方集成系统调用

1、脚本引入:autovue.js

2、编写客户端启动脚本如下,调用showFile 方法启动AutoVue客户端浏览;

var loc = 'http://xxx.com:8080/Autovue/';//AutoVue代理地址
var basedir = loc.substring(0, loc.lastIndexOf('/') + 1);// Location of the jVue samples files
var avSamples = basedir + 'samples/';// AutoVue Codebase Location
var CODEBASE = basedir + 'AutoVueClient';// AutoVue Server Host
var JVUESERVER = basedir + 'servlet/VueServlet';// JNLP Servlet HOST
var JNLP_HOST = basedir + 'servlet/VueJNLPServlet';// Rendezvous Servlet HOST
var RDVSERVLET_HOST = basedir + 'servlet/VueRDVServlet';// Client Ports to try for communication between browser and AutoVue Client
//var CL_PRTS = [2345, 7575,8888];
var CL_PRTS = null;
//CL_PRTS = [2345, [7500, 7510], [8500, 8510], 8888];   // Example with port intervals// Client Communication Protocol (Loop-Back vs. Rendez-Vous)
var com_protocol = getComProtocol();
if (com_protocol != null) {if (com_protocol === 'LOOPBACK' || com_protocol === 'LBK') {// Force a Loop-Back connectionRDVSERVLET_HOST = null;} else if (com_protocol === 'RENDEZVOUS' || com_protocol === 'RDV') {// Force a Rendez-Vous approachCL_PRTS = null;} else {console.error('No support for communication protocol ' + com_protocol + '. Using the default one: ' +(document.location.protocol === 'https' ? 'Rendezvous approach' : 'Loopback connection'));}
}// AutoVue Client Parameters
var INIT_PARAMS = { 'JVUESERVER': JVUESERVER, 'RDVSERVLET': RDVSERVLET_HOST, 'VERBOSE': 'false' };// Encrypt the cookies by default but don't do it under the Rendez-Vous
// communication protocol since we cannot safely transmit the decryption key
var ENCRYPT_COOKIES = RDVSERVLET_HOST == null;/*********************** AutoVue JavaScript Object ***********************/
/*************************************************************************/var myAvApp = null;/************************** Startup  Callbacks ***************************/
/*************************************************************************/// User Data to send with the start an retrieve within failure notification if the browser fails to communicate with AutoVue
var USER_DATA = null;// Function to call when AutoVue starts and deploys its scripting API. Ready to run
var ONINIT = onAvStartup;// Function to use in case AutoVue fails to start
var ONINITERROR = onAvInitError;/*** Called when AutoVue started and Scripting service deployed. Ready to run now!* Close the popup window.*/
function onAvStartup() {closePopupDlg();window.status = 'Connected to AutoVue';
}/*** Called on user's request when AutoVue fails to load.* The following function provides a simple example of error* handling including SSL failure and email notification.* @param xmlhttp_request   The http request object used to communicate with AutoVue* @param error_msg         The string containing error description* @param user_data         User Data sent within the start method*/
function onAvInitError(xmlhttp_request, error_msg, user_data) {closePopupDlg();if (xmlhttp_request == null) {// This is an early error. Didn't even start AutoVue.if (confirm(error_msg + '. Would you like send an e-mail to the server\'s administrator?')) {// email to server adminvar to = "admin@yourcompany.com";var subject = "Oracle AutoVue Client Error";window.open('mailto:' + to + '?subject=' + subject + '&body=' + error_msg, 'email');}return;}var msg = 'Failed to connect to AutoVue. ';if (document.location.protocol == 'https:' && RDVSERVLET_HOST == null) {// Warn about the localhost SSL certificate in the direct localhost connection casemsg += 'Ensure that you imported a localhost certificate to connect to AutoVue in SSL mode. '}if (++onAvInitError.count < 3) {// Propose Retry 3 timesif (confirm(msg + 'Would you like to retry?')) {myAvApp.connect(ONINIT, ONINITERROR, USER_DATA);}} else if (confirm(msg + 'Would you like to send an e-mail to the server\'s administrator?')) {// email to server adminvar to = "admin@yourcompany.com";var subject = "Oracle AutoVue Client Error";window.open('mailto:' + to + '?subject=' + subject + '&body=' + msg + error_msg, 'email');}
}
onAvInitError.count = 0;/***************************** Popup  Dialog *****************************/
/*************************************************************************/window.popupDlg = window.open('', 'popupDlg', 'height=50,width=200,resizable=1,\n\titlebar=0,scrollbars=0,status=0,menubar=0,toolbar=0');window.msgConnecting ='<html><title>Loading AutoVue<' + '/title>' +'<body bgcolor="#cccccc" style="padding:0; margin:0;"><center><br/>\n\<span style="font-family:Arial,Helvetica,sans-serif;font-size:10pt;">\n\Connecting to AutoVue...</span><' + '/center><' + '/body><' + '/html>';/* Open the popup window */
function openPopupDlg() {if (window.popupDlg != null) {window.popupDlg.document.open();window.popupDlg.document.write(window.msgConnecting);window.popupDlg.document.close();window.status = 'Connecting to AutoVue...';setTimeout('closePopupDlg()', 50000);}
}/* Close the popup window */
function closePopupDlg() {if (window.popupDlg != null && !window.popupDlg.closed) {window.popupDlg.close();}window.status = '';
}/*********************** Display  Helper Functions ***********************/
/*************************************************************************//* Read from the URL, the protocol required for client communication (RDV vs. LBK) */
function getComProtocol() {if (window.location.search != null) {var search_string = window.location.search.toUpperCase();if (search_string.startsWith('?PROTOCOL=')) {return search_string.substring(10);}}// No client communcation protocol properly appended to the page URL, if we get here
}/* The function to call on body loading */
function onBodyLoad() {openPopupDlg();if (ENCRYPT_COOKIES && typeof getEncryptionKeys !== 'undefined') {// Set Encryption Keys generated by VueKeyPairServletmyAvApp.setEncryptionKeyPair(getEncryptionKeys().public_key, getEncryptionKeys().private_key);}myAvApp.start(ONINIT, ONINITERROR, USER_DATA)
}/* The function to call before before unloading */
function onBeforeBodyUnload() {myAvApp.closeAutoVue()
}/*浏览文件*/
function showFile(httpRoot, spListId, itemId) {if (!myAvApp) {myAvApp = new AutoVue(JNLP_HOST, CODEBASE, CL_PRTS, INIT_PARAMS, ENCRYPT_COOKIES);onBodyLoad();}var file = 'http://xxx.com/api/ListItem?httpRoot=' + httpRoot +'&spListId=' + spListId + '&itemId=' + itemId;//获取附件地址myAvApp.setFile(file);
}

五、客户端自动启动JNLP文件默认打开

1、需按照JRE 文件:jre-8u271-windows-x64.exe

2、Google 浏览器策略配置:

  • 下载最新Google 安装包文件:GoogleChromeEnterpriseBundle64.zip
  • 复制文件到admx文件夹里面文件:将 chorme.admx和google.admx 到 c:\Windows\PolicyDefinitions
  • 复制文件到admx\en_US文件夹里面文件:将 chorme.adml和google.adml 到c:\Windows\PolicyDefinitions\en_US
  • 设置默认打开jnlp文件
1、输入命令:gpedit.msc
2、计算机配置->关联模板->Google->Google Chrome->List of file type that should be automatically opened on download
3、点击【已启用】->【显示】->输入 :jnlp
  • 设置不提示安全告警
1、计算机配置->关联模板->Google->Google Chrome->Safe Browsing settings->Configure the list of domians on which Safe Browsing will not trigger warnings
2、点击【已启用】->【显示列表】->输入:xxx.com(Autvue的服务地址)

六、设置GUI

myAvApp.setGUI(\'custom.gui\');

七、控制GUI菜单,隐藏

MENUITEM VueActionFileOpen, , PERM_HIDE

在 Windows Service 服务上部署 AutoVue_EMP_21_0_2 的操作手册相关推荐

  1. [转]在Windows server 2012上部署DPM 2012 SP1 RTM之安装配置

    在Windows server 2012上部署DPM 2012 SP1 RTM之安装配置 源地址:http://543925535.blog.51cto.com/639838/1152928 在上篇文 ...

  2. vs.net c# 安装、注册windows service服务,判断服务是否存在,是否启动

    vs.net c# 安装.注册windows service服务,判断服务是否存在,是否启动 一.安装服务: private void InstallService(IDictionary state ...

  3. 【已解决】Windows Service服务 出现System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可访问的日志: Security。

    bat文件 内容为 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319\ InstallUtil.exe   InstallUtil F:\Windows ...

  4. Windows Service服务 出现System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志

    [已解决]Windows Service服务 出现System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志.不可访问的日志: Security. 青 ...

  5. C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)(转载)...

    系列一: 制作一个可安装.可启动.可停止.可卸载的Windows service(downmoon原创) 系列二:演示一个定期执行的windows服务及调试(windows service)(down ...

  6. C# Windows Service服务开发的简单实现(Topshelf)

    概念:(Copyed From 百科) Windows服务是指Windows NT操作系统中的一种运行在后台的计算机程序.它在概念上类似于Unix守护进程.Windows服务必须匹配服务控制管理器(负 ...

  7. 在Windows Server 2008上部署SVN代码管理总结

    这段时间在公司开发Flex程序,所以使用TortoiseSVN作为团队代码管理器,今天在公司服务器上部署SVN服务器,并实验成功,总结如下: 服务器环境: 操作系统:Windows Server 20 ...

  8. 【C#】C#创建Windows Service服务

    目录结构: contents structure [+] 创建Windows服务 配置 安装Windows服务 在Visual Studio中调试 常见问题 最近写了一个TCP连接的程序,由于这种通信 ...

  9. 在VM虚拟机Windows Server r2上部署安装Microsoft Dynamics CRM 2016 步骤详解(一)

    应公司需求,最近在学微软的Dynamics CRM.在搭建环境的过程中也遇到了一些雷坑,在这里分享一下安装部署过程当中所遇到的一些问题, 安装Microsoft Dynamics CRM 2016的几 ...

  10. 如何在Windows即服务上安装Memcached Server

    In my earlier post, I explained how to install Memcached server on Mac OS. Today I will explain how ...

最新文章

  1. 使用 Boost.Lambda 库创建并存储在 Boost.Function 对象中的函子中使用 Boost.Units 的数量、单位和绝对类型
  2. Flume数据传输事务分析[转]
  3. Codechef January Challenge 2018 - Killjee and k-th letter
  4. 基于dnn的车牌识别_自然场景中文文字识别,身份证火车票都能识别
  5. html字符串转svg,【SVG】如何操作SVG Text
  6. Django的核心思想ORM
  7. docker挂载文件躺过的坑
  8. matlab getsplitpic,MATLAB_9-模式识别笔记
  9. PowerShell挂起功能--Confirm参数
  10. 以太坊私链环境搭建和发币全过程
  11. 怎么在eclipse中安装properties插件使其显示中文
  12. 几款好用的滤波器设计软件
  13. Fe3O4纳米颗粒的表面接枝修饰/氨基乙酸|L-半胱氨酸(L-Cys)修饰的Fe3O4包裹TiO2(Fe3O4@TiO2/L-Cys)复合纳米粒子
  14. 给初学者推荐一个摆脱变量命名纠结的神器
  15. “新基建”将改变什么
  16. 反思抑郁症的原因:抑郁症能否遗传?
  17. MAX31865模块的使用-基于ZigBee_CC2530芯片 PT100测温
  18. xtu oj 1375斐波纳契
  19. RPG Maker MV-去掉开头动画
  20. [弹幕词云姬]硬核b站up主一周撸出来的小工具,根据b站弹幕生成词云(一)

热门文章

  1. html平行四边形按钮,如何绘制平行四边形按钮
  2. 以太网协议------802.1q,802.1d,802.1x
  3. SpringCloudStream、Spring事件监听机制、SpringCloudBus
  4. chrome添加网页单词翻译插件
  5. kettle 用cmd bat来运行ktr和kjb
  6. anguarjs 上传图片预览_前端战五渣学前端——FileReader预览本地文件
  7. win10内存占用率过高怎么办?Win10电脑内存占用率很高的原因和解决方法
  8. 基于scrapy的智联职位爬取
  9. 阿里定向广告最新突破:面向下一代的粗排排序系统 COLD
  10. [苹果开发者账号]04 申请苹果开发者账号 美国报税表