linux下java项目移植部署心得

一.验证码问题,,在windows下验证码运行正常,到了linux下验证码程序走不通也不抛异常,什么现象都没有就是走不动了,问题可能在于你的linux服务器没有配置成java.awt.headless 可以执行。。。在程序中加入:

 

System.setProperty("java.awt.headless", "true");

二.netstat -nap |grep java(端口号)  可以查看指定程序的端口情况,或者是指定端口的程序运行情况

   ps -ef | grep java  也是如此

  杀某个端口下的程序,,用ps那个命令查出pid,然后执行kill命令。。强制杀用-9参数。

三.改变一个文件的权限用命令chmod +x file,,这个是最常用的。。什么权限都+上了。然后就可以执行或者修改

四.现在使用linux的朋友越来越多了,在linux下做开发首先就是需要配置环境变量,下面以配置java环境变量为例介绍三种配置环境变量的方法。

 


  1.修改/etc/profile文件
  如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。

  (1)用文本编辑器打开/etc/profile

  (2)在profile文件末尾加入:
  JAVA_HOME=/usr/share/jdk1.5.0_05
  PATH=$JAVA_HOME/bin:$PATH
  CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  export JAVA_HOME
  export PATH
  export CLASSPATH

  (3)重新登录

  注解:
  a. 你要将 /usr/share/jdk1.5.0_05jdk 改为你的jdk安装目录

  b. linux下用冒号“:”来分隔路径

  c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值,在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种常见的错误。

  d. CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的错误。

  e. export是把这三个变量导出为全局变量。

  f. 大小写必须严格区分。

  2. 修改.bashrc文件  
  这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。

  (1)用文本编辑器打开用户目录下的.bashrc文件

  (2)在.bashrc文件末尾加入:  
  set JAVA_HOME=/usr/share/jdk1.5.0_05
  export JAVA_HOME
  set PATH=$JAVA_HOME/bin:$PATH
  export PATH
  set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  export CLASSPATH

  (3)重新登录

  3. 直接在shell下设置变量
  不赞成使用这种方法,因为换个shell,你的设置就无效了,因此这种方法仅仅是临时使用,以后要使用的时候又要重新设置,比较麻烦。

  只需在shell终端执行下列命令:
  export JAVA_HOME=/usr/share/jdk1.5.0_05
  export PATH=$JAVA_HOME/bin:$PATH
  export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

五.class版本问题解决

Unsupported major.minor version 49.0错误详解

 

一:要解决的问题

我 们在尝鲜 JDK1.5 的时候,相信不少人遇到过 Unsupported major.minor version 49.0 错误,当时定会茫然不知所措。因为刚开始那会儿,网上与此相关的中文资料还不多,现在好了,网上一找就知道是如何解决,大多会告诉你要使用 JDK 1.4 重新编译。那么至于为什么,那个 major.minor 究竟为何物呢?这就是本篇来讲的内容,以使未错而先知。

我觉得我是比 较幸运的,因为在遇到那个错误之前已研读过《深入 Java 虚拟机》第二版,英文原书名为《Inside the Java Virtual Machine》( Second Edition),看时已知晓 major.minor 藏匿于何处,但没有切身体会,待到与 Unsupported major.minor version 49.0 真正会面试,正好是给我验证了一个事实。

首先我们要对 Unsupported major.minor version 49.0 建立的直接感觉是:JDK1.5 编译出来的类不能在 JVM 1.4 下运行,必须编译成 JVM 1.4 下能运行的类。(当然,也许你用的还是 JVM 1.3 或 JVM 1.2,那么就要编译成目标 JVM 能认可的类)。这也解决问题的方向。

二:major.minor 栖身于何处

何谓 major.minor,且又居身于何处呢?先感性认识并找到 major.minor 来。

写一个 Java Hello World! 代码,然后用 JDK 1.5 的编译器编译成,HelloWorld.java



public static void "Hello, World!" package com.unmi; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }

用 JDK 1.5 的 javac -d . HelloWorld.java 编译出来的字节码 HelloWorld.class 用 UltraEdit 打开来的内容如图所示:




从 上图中我们看出来了什么是 major.minor version 了,它相当于一个软件的主次版本号,只是在这里是标识的一个 Java Class 的主版本号和次版本号,同时我们看到 minor_version 为 0x0000,major_version 为 0x0031,转换为十制数分别为0 和 49,即 major.minor 就是 49.0 了。

三:何谓 major.minor 以及何用

Class 文件的第 5-8 字节为 minor_version 和 major_version。Java class 文件格式可能会加入新特性。class 文件格式一旦发生变化,版本号也会随之变化。对于 JVM 来说,版本号确定了特定的 class 文件格式,通常只有给定主版本号和一系列次版本号后,JVM 才能够读取 class 文件。如果 class 文件的版本号超出了 JVM 所能处理的有效范围,JVM 将不会处理该 class 文件。

在 Sun 的 JDK 1.0.2 发布版中,JVM 实现支持从 45.0 到 45.3 的 class 文件格式。在所有 JDK 1.1 发布版中的 JVM 都能够支持版本从 45.0 到 45.65535 的 class 文件格式。在 Sun 的 1.2 版本的 SDK 中,JVM 能够支持从版本 45.0 到46.0 的 class 文件格式。

1.0 或 1.2 版本的编译器能够产生版本号为 45.3 的 class 文件。在 Sun 的 1.2 版本 SDK 中,Javac 编译器默认产生版本号为 45.3 的 class 文件。但如果在 javac 命令行中指定了 -target 1.2 标志,1.2 版本的编译器将产生版本号为 46.0 的 class 文件。1.0 或 1.1 版本的 JVM 上不能运行使用-target 1.2 标志所产生的 class 文件。

JVM 实现的 第二版中修改了对 class 文件主版本号和次版本号的解释。对于第二版而言,class 文件的主版本号与 Java 平台主发布版的版本号保持一致(例如:在 Java 2 平台发布版上,主版本号从 45 升至 46),次版本号与特定主平台发布版的各个发布版相关。因此,尽管不同的 class 文件格式可以由不同的版本号表示,但版本号不一样并不代表 class 文件格式不同。版本号不同的原因可能只是因为 class 文件由不同发布版本的 java 平台产生,可能 class 文件的格式并没有改变。

上面三段节选自《深入 Java 虚拟机》,啰嗦一堆,JDK 1.2 开启了 Java 2 的时代,但那个年代仍然离我们很远,我们当中很多少直接跳在 JDK 1.4 上的,我也差不多,只是项目要求不得不在一段时间里委屈在 JDK 1.3 上。不过大致我们可以得到的信息就是每个版本的 JDK 编译器编译出的 class 文件中都带有一个版本号,不同的 JVM 能接受一个范围 class 版本号,超出范围则要出错。不过一般都是能向后兼容的,知道 Sun 在做 Solaris 的一句口号吗?保持对先前版本的 100% 二进制兼容性,这也是对客户的投资保护。

解决方案:遇到这个问题就只有重新的编译项目,,然后部署,,一个J2EE项目是在被导入的时候编译,首先要修改IDE所用jdk的版本,,然后把项目导入进去以后再单独修改项目的jdk版本,,具体的修改看图片。。

linux下java项目移植部署心得_第1张图片
 


linux下java项目移植部署心得_第2张图片
 
linux下java项目移植部署心得_第3张图片
 
linux下java项目移植部署心得_第4张图片
 就这几个地方就可以了。。


六.su的应用
功能:变更用户
用法:su [-flmp][--help][--version][-][-c <指令>][-s][用户帐号]
参数:
-c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份
--session-command=COMMAND:跟-c相同,但是不生成新的会话
-f或--fast:适用于csh与tsch,使shell不用去读取启动文件
-.-l或--login:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,LOGNAME,PATH变量
-m,-p或--preserve-environment:变更身份时,不要变更环境变量
-s或--shell= :指定要执行的shell
--help:显示帮助
--version :显示版本信息

例子:su回车直接是切换到root用户
su - 用户名  切换到用户并且带着所有的全局环境变量
sudo 用户  则是带着用的权限

 

你可能感兴趣的:(java,jvm,jdk,linux,面试)