服务器终于恢复,tomcat自启动其实只需2行代码

网上教程多如牛毛,大多都是将tomcat配置成一个服务,然后让服务自启动,感觉麻烦。

通过/etc/rc.d/rc.local的配置,添加2行代码其实就可以实现tomcat的自启动

 

正向代理,反向代理

一直不能理解这2者的区别。感觉在实际使用上,二者也并没有显著区别。都是代理。

模糊理解如下:

1 、正向代理,大多适用于跳板式访问,即利用代理访问不同的网站,比如GOOGLE;

2、反向代理,是指用户访问的指定域名,比如baidu.com,在baidu服务器上被反向代理到google,这样用户的浏览器网址显示是baidu.com,但打开的实际是google。

现在说重点,apache的ProxyPass和ProxyPassReverse

如果按正向代理,反向代理的概念来理解,完全理解不了。。。感觉全是反向代理么。

所以,就不要按这个去理解了。

ProxyPass 这个 就是代理,实现到目标URL的代理功能,比如baidu.com 代理到 192.168.10.5:8080 ,注意,这里的“正向”主要体现在,代理服务器并不代表192.168.10.5:8080,假若192.168.10.5:8080有比如重定向到bb目录的操作,将会给用户重定向到192.168.10.5:8080/bb

而ProxyPassReverse,会让192.168.10.5:8080与代理服务器变成一个整体。

es6 箭头函数

http://www.cnblogs.com/huansky/p/5684867.html

 

基本用法

ES6允许使用“箭头”(=>)定义函数。

上面的箭头函数等同于:

如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。

复制代码

复制代码

如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。

由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号。

箭头函数可以与变量解构结合使用。

复制代码

复制代码

使用注意点

箭头函数有几个使用注意点。

(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。

(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。

(4)不可以使用yield命令,因此箭头函数不能用作Generator函数。

除了this,以下三个变量在箭头函数之中也是不存在的,指向外层函数的对应变量:argumentssupernew.target

复制代码

复制代码

上面代码中,箭头函数内部的变量arguments,其实是函数fooarguments变量。

另外,由于箭头函数没有自己的this,所以当然也就不能用call()apply()bind()这些方法去改变this的指向。

复制代码

复制代码

上面代码中,箭头函数没有自己的this,所以bind方法无效,内部的this指向外部的this

长期以来,JavaScript语言的this对象一直是一个令人头痛的问题,在对象方法中使用this,必须非常小心。箭头函数”绑定”this,很大程度上解决了这个困扰。

函数绑定

箭头函数可以绑定this对象,大大减少了显式绑定this对象的写法(callapplybind)。但是,箭头函数并不适用于所有场合,所以ES7提出了“函数绑定”(function bind)运算符,用来取代callapplybind调用。虽然该语法还是ES7的一个提案,但是Babel转码器已经支持。

函数绑定运算符是并排的两个双冒号(::),双冒号左边是一个对象,右边是一个函数。该运算符会自动将左边的对象,作为上下文环境(即this对象),绑定到右边的函数上面。

复制代码

复制代码

如果双冒号左边为空,右边是一个对象的方法,则等于将该方法绑定在该对象上面。

复制代码

复制代码

由于双冒号运算符返回的还是原对象,因此可以采用链式写法。

尾调用优化

什么是尾调用?

尾调用(Tail Call)是函数式编程的一个重要概念,本身非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。

上面代码中,函数f的最后一步是调用函数g,这就叫尾调用。

严格模式

ES6的尾调用优化只在严格模式下开启,正常模式是无效的。

这是因为在正常模式下,函数内部有两个变量,可以跟踪函数的调用栈。

  • func.arguments:返回调用时函数的参数。
  • func.caller:返回调用当前函数的那个函数。

尾调用优化发生时,函数的调用栈会改写,因此上面两个变量就会失真。严格模式禁用这两个变量,所以尾调用模式仅在严格模式下生效。

复制代码

复制代码

箭头函数与常规函数对比

一个箭头函数与一个普通的函数在两个方面不一样:

  • 下列变量的构造是词法的: arguments , super , this , new.target
  • 不能被用作构造函数:没有内部方法 [[Construct]] (该方法允许普通的函数通过 new 调用),也没有 prototype 属性。因此, new (() => {}) 会抛出错误。

除了那些意外,箭头函数和普通的函数没有明显的区别。例如, typeof 和 instanceof 产生同样的结果:

复制代码

复制代码

函数表达式和对象字面量是例外,这种情形下必须放在括号里面,因为它们看起来像是函数声明和代码块。

使用ES 6模板字符串

http://www.html5online.com.cn/articles/2015051202.html

 

JavaScript字符串历来受到限制,缺乏其他语言中所具有的一些特性。ES 6中的模板字符串(自Chrome 41版开始支持)从根本上改变了这个局面。它通过DSLs(domain-specific languages)提供了一种全新的字符串定义方式,在以下几方面进行了增强:

  • 字符串修改
  • 内置表达式
  • 多行字符串
  • 字符串格式化
  • 为安全的HTML本地化而提供的字符串标签

语法

模板字符串使用返回标记(),而不是我们平时在字符串中使用的单引号或双引号。因此一个模板字符串如下所示:

字符串替代

模板字符串的第一个优点是字符串替代。替代允许我们在模板字符串中使用任何有效的JavaScript表达式或变量,其结果将输出被计算后的字符串。

模板字符串可以通过使用${…}语法来包含为替代字符串使用的占位符,代码如下所示:

因为模板字符串中的所有替代字符串均为JavaScript表达式,所以我们可以使用变量名之外的各种表达式。例如,我们可以使用计算表达式:

甚至可以在表达式中使用函数:

${}表达式中也可以包含各种属性值或方法:

如果在字符串中包含返回标记,可以在其之前使用反斜杠字符\。

多行字符串

目前在JavaScript代码中需要对多行字符串进行一些处理。通常需要为多行字符串添加一个反斜杠,代码如下所示:

也可以使用如下所示的方式:

虽然大多数现代浏览器都支持上述两种方式,但它们都需要一些特殊处理。模板字符串可以使多行字符串的书写方式变得更自然,任何返回标记中的空格都将被视为字符串中的一部分:

标签化的模板

现在,我们已经介绍了如何使用模板字符串进行字符串替代及书写多行字符。另一个强大特性是可以书写标签化的模板。标签化的模板通过在模板字符串前放置一个函数名来修改模板字符串,代码如下所示:

标签化的模板字符串的语义与标准字符串的语义完全不同。它们是函数调用的一种特殊形式,上述代码等同于以下代码:

一个标签化的模版字符串的使用代码示例如下所示:

本文小结

自Chrome 41、IE Tech Preview、Firefox 35以上版本的浏览器中均支持模板字符串的使用。它为JavaScript带来了一些重要特性,这些包含以一种更好的方式书写字符串、修改字符串、书写多行字符串等等。其中一个重要特性是一个用于格式化字符串的特性:标签化的模板,它们将模板字符串的一部分作为参数,你可以自行决定如何使用这些字符串来进行最终输出。

WebViewExtras

https://www.b4x.com/android/forum/threads/webviewextras.12453/

Hi all.

WebViewExtras is my latest library.
It’s a much updated version of JSInterface.

WebViewExtras exposes more of the available native Android WebView methods to your B4A application:

addJavascriptInterface(webView1 As WebView, interfaceName As String)

Add a javascript interface to webView1, methods of the interface can be accessed using javascript with the interfaceName as the javascript namespace.

The interface contains just a single overloaded method CallSub().
The CallSub method signatures are:

CallSub(subName As String, callUIThread As boolean)
CallSub(subName As String, callUIThread As boolean, parameter1 As String)
CallSub(subName As String, callUIThread As boolean, parameter1 As String, parameter2 As String)
CallSub(subName As String, callUIThread As boolean, parameter1 As String, parameter2 As String, parameter3 As String)

So if you have added the interface to your webView with the interfaceName of “B4A” then you can write javascript such as:

Code:

The callUIThread parameter is an important update – it’s not available with JSInterface.

Does the Sub called by your javascript modify your activity UI?
这个js调用是否修改你的activity UI
If the answer is yes then you need to pass boolean true as callUIThread otherwise you can pass false.
如果答案是是的,那么你需要设置值为布尔true作为UI线程调用,否则请设置为false
If you pass false and then the Sub tries to modify your activity UI you will get an exception.
如果你设置为false并且让js调用去修改你的UI,则将抛出一个异常

Does your javascript require a return value from your Sub?
你的JS调用是否需要获取返回值
If the answer is yes then the Sub MUST NOT modify the activity UI.
是的话,那么必须禁止修改界面UI
If CallSub is excuted with callUIThread set to true then no values will be returned from your Sub to the javascript.
如果设置为调用UI线程则无法获取到任何返回值

You will need to structure your B4A code so that Subs that return values to javascript do not modify the activity UI.
你需要有设计你的B4A代码,这样JS调用才能返回值而不修改界面

addWebChromeClient(webView1 As WebView, EventName As String)

Add a WebChromeClient to webView1.

The default B4A WebView has no WebChromeClient.
A WebChromeClient handles many things, the WebChromeClient that WebViewExtras adds to your WebView enables:

Version 1.30 of WebViewExtras requires that an additional EventName parameter is passed to the addWebChromeClient method, see this post:http://www.basic4ppc.com/forum/addi…updates/12453-webviewextras-2.html#post102448

clearCache(webView1 As WebView, includeDiskFiles As boolean)

Clear the WebView cache.
Note that the cache is per-application, so this will clear the cache for all WebViews used in an application.

boolean includeDiskFiles – If false, only the RAM cache is cleared.

executeJavascript(webView1 As WebView, javascriptStatement As String)

Executes a string of one or more javascript statements in webView1.
javascriptStatement – A string of one or more (semi-colon seperated) javascript statements.

flingScroll(webView1 As WebView, vx As Int, vy As Int)

flingScroll is a poorly documented method of the WebView.
It’s included in WebViewExtras as it may be useful but i can find no documentation for it or it’s parameters.

vx and vy do not seem to be pixel values – i suspect they are velocity values for the kinetic/fling scroll.

pageDown(webView1 As WebView, scrollToBottom As boolean)

Scroll the contents of webView1 down by half the page size.

scrollToBottom – If true then webView1 will be scrolled to the bottom of the page.

Returns a Boolean value to indicate the success or failure of the scroll.

pageUp(webView1 As WebView, scrollToTop As boolean)

Scroll the contents of webView1 up by half the page size.

scrollToTop – If true then webView1 will be scrolled to the top of the page.

Returns a Boolean value to indicate the success or failure of the scroll.

zoomIn(webView1 As WebView)

Perform zoom in on webView1.

Returns a Boolean value to indicate the success or failure of the zoom.

zoomOut(webView1 As WebView)

Perform zoom out on webView1.

Returns a Boolean value to indicate the success or failure of the zoom.

Up to date documentation/reference for this library can be found here: http://www.basic4ppc.com/forum/addi…updates/12453-webviewextras-3.html#post106486.

Library and demo code is attached to this post.

The demo is a bit brief – sorry but i don’t have time to write demo code for all the new methods.
The demo displays two WebViews – the top WebView has a JavascriptInterface and WebChromeClient whereas the lower WebView has neither – it is the default B4A WebView.

Martin.