resin WED服务器初用遇到的问题和解决方法 java.lang.RuntimeException: java.net.SocketException: Unrecognized Windows Socke ts error: 0: JVM_Bind
开启resin 服务器以后提示如下:(控制台不断的循环循环打印如下错误提示)
java.lang.RuntimeException: java.net.SocketException: Unrecognized Windows Socke
ts error: 0: JVM_Bind
        at com.caucho.server.cluster.Server.start(Server.java:1191)
        at com.caucho.server.cluster.Cluster.startServer(Cluster.java:708)
        at com.caucho.server.cluster.ClusterServer.startServer(ClusterServer.jav
a:522)
        at com.caucho.server.resin.Resin.start(Resin.java:692)
        at com.caucho.server.resin.Resin.initMain(Resin.java:1113)
        at com.caucho.server.resin.Resin.main(Resin.java:1314)
Caused by: java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_
Bind
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
        at java.net.ServerSocket.bind(ServerSocket.java:319)
        at java.net.ServerSocket.<init>(ServerSocket.java:185)
        at com.caucho.vfs.QJniServerSocket.create(QJniServerSocket.java:85)
        at com.caucho.vfs.QJniServerSocket.create(QJniServerSocket.java:61)
        at com.caucho.server.port.Port.bind(Port.java:964)
        at com.caucho.server.cluster.Server.bindPorts(Server.java:1225)
        at com.caucho.server.cluster.Server.start(Server.java:1175)
        ... 5 more
2014-7-3 5:32:01 com.caucho.boot.ResinWatchdog run
信息: Watchdog[] stopping Resin
解决
一开始我以为是我的JDK有问题(其实后来查询后,才知道是端口冲突的问题)
首先来看几个简单的命令(1) netstat-ano 查看所有进程信息,包括协议 本地地址 外部地址 状态 PID等。一查询就知道本机的80端口已被占用,因此resin服务器使用该端口号的话肯定会报错,就会提示上面的这些信息。(下面是我的PC的信息)
活动连接
 协议 本地地址 外部地址 状态 PID
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       1272
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING       816
  TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING       1556
  TCP    0.0.0.0:1027           0.0.0.0:0              LISTENING       936
  TCP    0.0.0.0:1028           0.0.0.0:0              LISTENING       1616
  TCP    0.0.0.0:1029           0.0.0.0:0              LISTENING       888
  TCP    0.0.0.0:1454           0.0.0.0:0              LISTENING       7796
  TCP    0.0.0.0:2869           0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING       2380
  TCP    10.81.85.130:139       0.0.0.0:0              LISTENING       4
  TCP    10.81.85.130:1590      220.181.125.5:80       ESTABLISHED     984
  TCP    10.81.85.130:1925      106.120.151.123:80     CLOSE_WAIT      7796
  TCP    10.81.85.130:2287      183.224.42.62:80       TIME_WAIT       0
  TCP    10.81.85.130:2288      183.224.42.62:80       TIME_WAIT       0
  TCP    127.0.0.1:1044         127.0.0.1:1045         ESTABLISHED     5424
  TCP    127.0.0.1:1045         127.0.0.1:1044         ESTABLISHED     5424
  TCP    127.0.0.1:1046         0.0.0.0:0              LISTENING       5424
  TCP    127.0.0.1:1046         127.0.0.1:1047         ESTABLISHED     5424
  TCP    127.0.0.1:1047         127.0.0.1:1046         ESTABLISHED     5424
  TCP    127.0.0.1:1159         127.0.0.1:1160         ESTABLISHED     1164
  TCP    127.0.0.1:1160         127.0.0.1:1159         ESTABLISHED     1164
  TCP    [::]:80                [::]:0                 LISTENING       4
  TCP    [::]:135               [::]:0                 LISTENING       1272
  TCP    [::]:445               [::]:0                 LISTENING       4
  TCP    [::]:1025              [::]:0                 LISTENING       816
  TCP    [::]:1026              [::]:0                 LISTENING       1556
  TCP    [::]:1027              [::]:0                 LISTENING       936
  TCP    [::]:1028              [::]:0                 LISTENING       1616
  TCP    [::]:1029              [::]:0                 LISTENING       888
  TCP    [::]:2869              [::]:0                 LISTENING       4
  UDP    0.0.0.0:500            *:*                                    1616
  UDP    0.0.0.0:4500           *:*                                    1616
  UDP    0.0.0.0:5355           *:*                                    1948
  UDP    0.0.0.0:49152          *:*                                    1616
  UDP    10.81.85.130:137       *:*                                    4
  UDP    10.81.85.130:138       *:*                                    4
  UDP    10.81.85.130:1900      *:*                                    2076
  UDP    10.81.85.130:65033     *:*                                    2076
  UDP    127.0.0.1:1900         *:*                                    2076
  UDP    127.0.0.1:49153        *:*                                    1616
  UDP    127.0.0.1:49166        *:*                                    1608
  UDP    127.0.0.1:49174        *:*                                    1516
  UDP    127.0.0.1:49175        *:*                                    5444
  UDP    127.0.0.1:65034        *:*                                    2076
  UDP    [::]:500               *:*                                    1616
  UDP    [::]:4500              *:*                                    1616
  UDP    [::1]:1900             *:*                                    2076
  UDP    [::1]:65032            *:*                                    2076
(2)tasklist /fi "pid eq 4" 查看端口号80(其pid=4)的使用情况
C:\Windows\System32>tasklist /fi "pid eq 4"
映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
System                           4 Services                   0        828 K
可以看到,该端口是被系统服务所占用。
(下面的内容是转的,我只参考第一步,修改了端口号为9000就好了)
这里介绍的是jsp服务器resin的配置, 
在resin-3.0.1文件夹下有几个文件夹值得注意:
|--bin
   |--httpd.exe	 	resin服务器启动文件
   |--setup.exe 	和iis一起使用的安装文件
|--conf
   |--resin.conf	resin服务器配置文件,例:端口号、主目录
   |--app-default.xml
|--doc	 resin服务器默认的主目录
   |--css
   |--images
   |--resin-dox
   |--WEB-INF
   |--index.xtp	 resin服务器默认的欢迎页面。
|--lib
|--libexec
|--licenses
|--logs
   |--access.log	resin服务器日志文件
|--webapps
|--xsl
|--license
|--readme.txt
有2个比较重要的服务器配置。
一:更改服务器的端口号。
resin默认的端口号是:8080。当你双击bin文件下的httpd.exe后,resin服务器就启动,在浏览器里地址栏输入:http://localhost:8080    就可以看到resin服务器的欢迎页面。出于需要,要把8080端口改成别的端口号要怎样做呢?打开conf文件夹,用dreamweaver打开(记事本也可以)resin.conf文件,找到<http id="" host="*" port="8080"/>这一行,把8080修改成你想要的端口号,比如81,然后保存,重新启动resin服务器,在浏览器地址栏里输入:http://localhost:81,看看是不是可以?有一个值得注意的是端口号不能与其它软件占用的端口号相冲突,例如跟iis默认的80端口冲突。
二:更改主目录。
resin默认的主目录是:doc。假设resin-3.0.1文件下你新建了自己的一个文件夹BBS,要定义主目录为BBS。怎么做呢?还是编辑resin.conf文件,找到<document-directory>doc</document-directory>一行,修改doc为BBS,保存resin.conf文件。重新启动服务器就生效了。
  以下是我在使用resin过程中的一此体会、理解,不一定对。还希望名位在使用过程中,有些经验性的总结写下来,大家互相学习,共同提高。
  我在resin3.0.4文件夹下新建了一个文件夹BBS并更改为主目录,在BBS文件夹下新建一个WEB-INF文件夹,并在这个文件下新建一个classes文件夹。其中BBS文件夹下存放JSP文件,classes文件夹下存放JSP要用到的类文件。resin在运行过程中,还会在WEB-INF文件下产生tmp,work这两个文件,其中work文件夹存放编译JSP文件生成的类文件。(resin解释JSP文件时,要把JAVA脚本翻译成servlet).有一次,我在类文件里添加了一个方法executeUpdate(),并在JSP文件里调用这个方法,但是JSP出错提示找不到这个方法,重启resin也没用,重启计算机也没用(我以为是缓冲的问题)。后来,把work文件下的文件全部删掉,JSP就能使用executeUpdate()方法了。我也不知道这是个什么道理!
  在JSP程序中要正确输出汉字,必须对字符串变量进行编码(string.getBytes("ISO8859_1"))。如果是服务器是tomcat一定要对字符串进行编码。但在resin服务器下,不用对字符串进行编码,用了反而出错。有一本书说“sql语句汉字问题更麻烦,如果sql命令为:select * from custom where uid=‘用户名‘.在jdbc-odbc驱动下对sql进行编码无法编译通过。但是换了IBM的jdbc直接驱动后就可以通过了”,但是,我在resin服务器下检测这个问题,我发现resin对中文处理得很好。
