posted in JavaWeb 

项目组有两个老项目需要从resin迁移到tomcat,因为这两个项目的调用方比较多,所以要保证从resin迁移到tomcat过程中对调用方完全透明才行。这就需要对resin和tomcat的不同之处进行处理。

在修改过程中踩了若干坑,最终相关的Resin2Tomcat处理代码有了一个相对稳定的版本。于是把这部分相关处理代码抽成了一个maven工程,上传到公司仓库,方便以后其他同学使用。

1. 问题

目前遇到的问题主要是resin和tomcat对编码方式的不同,

  1. resin用gbk进行urlDecode,tomcat用utf-8进行urlDecode。
  2. 部分调用方的调用参数没有进行urlEncode,所以tomcat需要做iso8859-1到utf-8的转换。
  3. 调用方可能调用不规范,比如post请求的部分参数放在url中,部分放在body中。

2. 处理思路

做一个filter进行编码的转换,这样业务代码就不需要进行变动了,可以直接Resin切换到Tomcat。

3. 如何使用

  1. pom.xml中添加依赖
    <dependencies>
        <dependency>
            <groupId>com.netease.urs</groupId>
            <artifactId>resin2tomcat</artifactId>
            <version>0.1.0</version>
        </dependency>
    </dependencies>
  1. web.xml中添加filter
    <filter>
        <display-name>EncodingFilter</display-name>
        <filter-name>EncodingFilter</filter-name>
        <filter-class>com.netease.urs.resin2tomcat.filter.EncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <url-pattern>/servlet/*</url-pattern>
    </filter-mapping>

4. 其他

删除lib下的Resin.jar,因为发现这个jar在tomcat中会报错

posted in Mac相关 

有时睡前想用电脑听歌又懒得动弹,通过Android手机控制Mac上的网易云音乐就会很方便。

以下方法的前提是 Mac和Android手机连接同一Wifi。

1. Mac开启远程登录

打开 系统设置

打开共享,勾选 远程登录

2. 网易云音乐开启全局快捷键

3. Android手机安装Mac Remote并设置

3.1. 安装Mac Remote

Google Play 中安装Mac Remote, 如果没有Google Play 可以在 ApkPure(这货是Google Play的完美替代品)中安装。

3.2 设置Mac Remote

打开 Mac Remote 输入用户名、密码、IP

进入后点击右下角,点击『Apps Management』,点击『ADD YOUR APP』

appname输入网易云音乐

play pause输入tell application "System Events" to key code {58, 55, 49}

next输入tell application "System Events" to key code {58, 55, 124}

info输入tell application "System Events" to key code {58, 55, 37} 用来标记为喜欢

Done! enjoy~

4. 参考

Best 6 Mac Remote Apps Easily Control Your Mac from Android

Mac Remote - How to manage apps

使用脚本控制 Mac 的 app

Key Codes

Playing with the Keyboard

posted in Web相关 

今天被URLEncode坑得报了一整天的HTTP400错误,特此总结一下。

1. URLEncode

1.1. 什么是URLEncode

百分号编码(Percent-encoding), 也称作URL编码(URL encoding), 是一种URL编码机制。

常用的以下几种编码规则:

  • 把URL中下图中上一行的字符(保留字符)转换为对应的下一行字符(非保留字符):

  • 把URL中的『%』转换为『%25』。 也因而对同一串URL多次进行URL编码会导致其长度会越来越长。如,

http://www.163.com -> http%3a%2f%2fwww.163.com -> http%253a%252f%252fwww.163.com -> ...

我们可以在这个网站进行测试。

  • 二进制数据每8个bite进行URL编码。 如字节值0F编码为「%0F」。

1.2. 什么时候会进行URLEncode

  • 在『Chrome的地址栏』和输入URL后,他会对URL中『http://』 之后的部分进行隐式的URL编码;
  • 在『Postman的地址栏』也会对URL中『http://』 之后的部分进行隐式的URL编码;『Postman的Params栏』则会全部进行URL编码;

这些过程都是透明的。另外,如果在地址栏中输入的URL是自行编码过的URL,它们就不会在对你的URL进行隐式的URL编码,非常的智能!

1.3. 什么时候会进行URLDecode

  • Java容器(如Tomcat、Resin等)在收到客户端的消息时,会隐式的进行一次URLDecode,这个过程也是透明的;
  • 可以在程序中手动进行字符串URLDecode。

2. HTTP 400错误

2.1. 什么是HTTP 400错误

400 Bad Request
由于包含语法错误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。

2.2. 什么时候会出现400错误

我们上面讲了URLEncode,当一个URL进行多次URLEncode时,Tomcat只URLDecode一次,这时就会返回400错误。这也是今天遇到的问题。

3. 参考

百分号编码

HTTP状态码

posted in JavaWeb 

2016-09-06_21:20:28.jpg

1. 设置方式

通常有以下几种设置方式:

1.1. 方法一 放入特定的文件夹中。

  • 修改为自定义ContextPath

把Web应用放到<catalina_home>/webapps下对应的文件夹中。

比如,Web应用放在<catalina_home>/webapps/bookstore目录下,则项目的对应的url为http://localhost:8080/bookstore/

  • 修改为根路径

特别的,如果Web应用在<catalina_home>/webapps/ROOT目录下,则该Web应用的url为http://localhost:8080/

这种方法Tomcat官方并不推荐。

1.2. 方法二 修改配置文件

  • 修改为自定义ContextPath

修改<catalina_home>/conf/server.xml

比如,在<catalina_home>/conf/server.xml<Host>元素下添加如下内容:

<Context path="/bookstore" docBase="/absolute/path/to/webapp"/>

则项目的对应的url为http://localhost:8080/bookstore/

  • 修改为根路径

特别的,在<catalina_home>/conf/server.xml<Host>元素下添加如下内容:

<Context path="/" docBase="/absolute/path/to/webapp"/>

则该Web应用的url为http://localhost:8080/

1.3. 方法三 添加配置文件

  • 修改为自定义ContextPath

/conf/Catalina/localhost下添加配置文件。

比如在<catalina_home>/conf/Catalina/localhost目录下添加一个配置文件bookstore.xml,配置文件中中填入以下内容:

<Context path="something" docBase="/absolute/path/to/webapp" />

则项目的对应的url为http://localhost:8080/bookstore/,服务器端运行的项目名称为something。这个方法很方便的隐藏了项目的名称,对一些项目名称被固定不能更换,但外部访问时又想换个路径,非常有效。不过通常文件名path相同。

  • 修改为根路径

特别的,比如在<catalina_home>/conf/Catalina/localhost目录下添加一个配置文件ROOT.xml,配置文件中中填入以下内容:

<Context path="/" docBase="/absolute/path/to/webapp" />

则该Web应用的url为http://localhost:8080/

这样就没问题了!这种方法被认为是最好的办法。

2. 参考

HOWTO set the context path of a web application in Tomcat 7.0
Tomcat中三种部署项目的方法

posted in 网络 

2016-09-06_21:21:37.jpg

生活中我们很多情况下会设置多级路由,如一级路由器的无线信号太弱、一级路由器不能发射无线信号等原因。这种这种情况下就需要设置多级路由了。相比于仅仅设置一级路由来说,设置二级路由则麻烦了许多,一不小心,不光会自己上不了网,还可能会把别人也搞得上不了网。

设置二级路由器的方法有两种,下面分别对其进行介绍。

我们约定如下: 与Modem或者入户宽带相连的路由器称为A路由器,而与A路由器相连的路由器称为B路由器。局域网中其它计算机均可任意连接到其中的一台路由器的LAN口上,但同时也必须得遵守所连路由器的规则,即IP地址分配范围。

1. 多级路由设置法

1.1. 对A路由器进行设置

将一台电脑与A路由器的LAN口相连(通过网线或者无线),打开浏览器在地址栏输入“192.168.1.1”,开启DHCP服务器;在路由器配置界面中将LAN接口设置为:192.168.1.1,子网掩码:255.255.255.0,WAN口地址按默认设置或从网络服务商那里获取。设置完成后重启A路由器。至此,A路由器的设置过程完成。

以后凡是接在A路由器LAN口上的电脑的IP地址的范围为“192.168.1.3”至“192.168.1.254”之间,子网掩码:255.255.255.0,网关:192.168.1.1,DNS:192.168.1.1。当然电脑也可选择“自动获得ip地址”和“自动获得DNS服务器地址”.

1.2. 对B路由器进行设置

将一台电脑与B路由器的LAN口相连(通过网线或者无线),打开浏览器在地址栏输入“192.168.1.1”,开启DHCP服务器;将WAN口类型设置为静态IP地址,IP地址设置为“192.168.1.2”,子网掩码:255.255.255.0,网关:192.168.1.1,DNS:192.168.1.1;将LAN接口IP地址设置为:10.0.0.1,子网掩码:255.255.255.0,网关:10.0.0.1。设置完成后重启B路由器。

以后凡是接在B路由器LAN口上的电脑的IP地址的范围为“10.0.0.1”至“10.0.0.254”之间,子网掩码:255.255.255.0,网关:10.0.0.1,DNS:10.0.0.1。当然电脑也可选择“自动获得ip地址”和“自动获得DNS服务器地址”

1.3. 连接A路由器和B路由器

如下图所示,将宽带或Modem的LAN口与A路由器的WAN口相连,A路由器的LAN口与B路由器的WAN口用网线相连。至此,由两个路由器组建的局域网完成。
2016-09-06_21:22:08.jpg

2. 路由用作交换机设置法

2.1. 对A路由器进行设置

将一台电脑与A路由器的LAN口相连(通过网线或者无线),打开浏览器在地址栏输入“192.168.1.1”,开启DHCP服务器;在路由器配置界面中将LAN接口设置为:192.168.1.1,子网掩码:255.255.255.0,WAN口地址按默认设置或从网络服务商那里获取。设置完成后重启A路由器。至此,A路由器的设置过程完成。

以后凡是接在A路由器LAN口上的电脑的IP地址的范围为“192.168.1.2”至“192.168.1.253”之间,子网掩码:255.255.255.0,网关:192.168.1.1,DNS:192.168.1.1。当然电脑也可选择“自动获得ip地址”和“自动获得DNS服务器地址”

2.2. 对B路由器进行设置

将一台电脑与B路由器的LAN口相连(通过网线或者无线),打开浏览器在地址栏输入“192.168.1.1”,关闭DHCP服务器;WAN口地址设为“自动获得IP地址”;在路由器配置界面中将LAN接口设置为:192.168.1.254,子网掩码:255.255.255.0,设置完成后重启A路由器。至此,B路由器的设置过程完成。

以后凡是接在B路由器LAN口上的电脑的IP地址的范围为“192.168.1.2”至“192.168.1.253”之间,子网掩码:255.255.255.0,网关:192.168.1.1,DNS:192.168.1.1。当然电脑也可选择“自动获得ip地址”和“自动获得DNS服务器地址”.

2.3. 连接A路由器和B路由器

如下图所示,将宽带或Modem的LAN口与A路由器的LAN口(两种方法最大的不同点)相连,A路由器的LAN口与B路由器的WAN口用网线相连。至此,由两个路由器组建的局域网完成。

2016-09-06_21:23:46.jpg

3. 参考

两台无线路由器怎么连接
在公司如何设置路由器才能避免干扰到其他人上网?