分类目录归档:Java

It’s my most familiar computer language, but just so so.

Win 8.1 Surface Pro 2 Java JDK和Maven配置

一、首先安装JDK

JDK:http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html

根据操作系统选择相应的版本

二、打开 这台电脑 – 系统 – 属性

三、打开 高级系统设置

四、打开 环境变量 – 新建系统变量 确定

变量名:JAVA_HOME

变量值:C:\Program Files\Java\jdk1.7.0_15 /*此路经为你安装Jave的路径*/

1

五、新建系统变量

变量名:CLASSPATH

变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

2

六、双击系统变量Path,在最后面添加: ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

3

七、完成后按“确定”退出

八、Win+R输入CMD,在CMD中输入:java 验证配置是否正确。

java

javac

Java -version

—————————————————————————————–
Microsoft Windows [版本 6.3.9600]
(c) 2013 Microsoft Corporation。保留所有权利。

C:\Users\xxxx>java
用法: java [-options] class [args…]
(执行类)
或 java [-options] -jar jarfile [args…]
(执行 jar 文件)
其中选项包括:
-d32 使用 32 位数据模型 (如果可用)
-d64 使用 64 位数据模型 (如果可用)
-server 选择 “server” VM
-hotspot 是 “server” VM 的同义词 [已过时]
默认 VM 是 server.

-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
用 ; 分隔的目录, JAR 档案
和 ZIP 档案列表, 用于搜索类文件。
-D<name>=<value>
设置系统属性
-verbose[:class|gc|jni]
启用详细输出
-version 输出产品版本并退出
-version:<value>
需要指定的版本才能运行
-showversion 输出产品版本并继续
-jre-restrict-search | -no-jre-restrict-search
在版本搜索中包括/排除用户专用 JRE
-? -help 输出此帮助消息
-X 输出非标准选项的帮助
-ea[:<packagename>…|:<classname>]
-enableassertions[:<packagename>…|:<classname>]
按指定的粒度启用断言
-da[:<packagename>…|:<classname>]
-disableassertions[:<packagename>…|:<classname>]
禁用具有指定粒度的断言
-esa | -enablesystemassertions
启用系统断言
-dsa | -disablesystemassertions
禁用系统断言
-agentlib:<libname>[=<options>]
加载本机代理库 <libname>, 例如 -agentlib:hprof
另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:<pathname>[=<options>]
按完整路径名加载本机代理库
-javaagent:<jarpath>[=<options>]
加载 Java 编程语言代理, 请参阅 java.lang.instrument
-splash:<imagepath>
使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation
/index.html。

C:\Users\xxxx>javac
用法: javac <options> <source files>
其中, 可能的选项包括:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath <路径> 指定查找用户类文件和注释处理程序的位置
-cp <路径> 指定查找用户类文件和注释处理程序的位置
-sourcepath <路径> 指定查找输入源文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置
-extdirs <目录> 覆盖所安装扩展的位置
-endorseddirs <目录> 覆盖签名的标准路径的位置
-proc:{none,only} 控制是否执行注释处理和/或编译。
-processor <class1>[,<class2>,<class3>…] 要运行的注释处理程序的名称; 绕过默
认的搜索进程
-processorpath <路径> 指定查找注释处理程序的位置
-d <目录> 指定放置生成的类文件的位置
-s <目录> 指定放置生成的源文件的位置
-implicit:{none,class} 指定是否为隐式引用文件生成类文件
-encoding <编码> 指定源文件使用的字符编码
-source <发行版> 提供与指定发行版的源兼容性
-target <发行版> 生成特定 VM 版本的类文件
-version 版本信息
-help 输出标准选项的提要
-A关键字[=值] 传递给注释处理程序的选项
-X 输出非标准选项的提要
-J<标记> 直接将 <标记> 传递给运行时系统
-Werror 出现警告时终止编译
@<文件名> 从文件读取选项和文件名

C:\Users\xxxx>Java -version
java version “1.7.0_15”
Java(TM) SE Runtime Environment (build 1.7.0_15-b03)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
—————————————————————————————–

安装MAVEN

下载MAVEN http://maven.apache.org/download.cgi

  • 解压缩maven到你想安装的位置,如:D:/software/。
  • 设置Maven系统环境变量,M2_HOME=D:/software/maven。
  • 添加Maven bin目录至系统环境变量PATH中, %M2_HOME%\bin。
  • 确认Maven的安装:

cmd > mvn -version

提示Maven version 即安装成功。

配置Maven

Maven home directory在windows中是C:\Documents and Settings\username\.m2。

maven的配置可以分为三个级别:

  • .project

在pom.xml中配置。project configuration只针对当前project有效。

  • .installation

在maven安装时配置。

  • .user

对指定用户的配置。user configuration可以在${user.home}/.m2/settings.xml中指定。注:该文件不是必须的,当该文件找不到时,maven会使用默认的配置。

 

配置本地Repository

本地Repository的默认值是${user.home}/.m2/repository/。可以在user configuration(即在${user.home}/.m2/setting.xml)中改变本地Repository。

配置如下:

<settings></settings>
<localRepository>/path/to/local/repo</localRepository>

注意:本地Repository 必须是绝对路径。

配置代理

在maven中,可以为http request配置代理。同样在user configuration中配置,配置如下:

<settings></settings>     <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</username>
      <password>proxypass</password>
      <host>www.hc360.com</host>
      <port>80</port>
      <nonProxyHosts>local.net,some.host.com</nonProxyHosts>
    </proxy>

安全和部署配置

在一个project中,该项目将要使用哪个Repository,是在<distributionmanagement></distributionmanagement>setting.xml中指定的。然而,你却不能将用户名和密码以及其它的安全设定也放在该project中。因此,你可能会在你自己的设定中定义一个server,给它指定一个id, 该id与project将要使用那个Repository相对应。

另外,有些repository在下载时可能需要用户名和密码,这些也可以在server element中以相同的方式指定。配置如下

    <server>
      <id>deploymentRepo</id>
      <username>repouser</username>
      <password>repopwd</password>
    </server>

 

 

Surface Pro 2 Test Tomcat+JavaEE

笔记本硬盘最近突然蹦了,让我万分纠结,一天时间的思考果断决定买Surface Pro 2代替电脑。由于最近在做JAVA WEB项目,很担心Win 8和Surface Pro 2能否胜任,在网上也看到很多人问Surface能否真正代替电脑,完成日常工作和开发等,现在我可以明确的说Surface Pro 2绝对可以。因为学信息技术,我各个领域的东西都会用到一些,但都不是很专业,所以游戏专业户和各行业有特殊需求的牛人们就自己琢磨适合不适合吧,我的看法还是基本代表大众,非专业水平。

我已经厌倦了十多年的笔记本,换过去换过来真不想再用一样的东西了。至于ipad,我真心觉得它是一个很好的玩具。用过一段时间Macbook Air,但还觉得不是很习惯。所以决定买一个异类,说Surface Pro 2是异类,是因为我还是对这款产品的成熟程度不确定。但我一直也想把平板和电脑相结合,图个方便易用。

下图为在Eclipse和Tomcat下运行的一个IDMS程序,非常顺畅,完全没有卡的迹象。Win 8和JAVA的兼容性还是挺好的。 IMG_2279
4G内存占用率64%,我还运行了其他一些程序和APP。这种情况下,平板稍有发热,比手的温度略高。 IMG_2280
下图为打开了16张图片的PS CS4,感觉也不错。 IMG_2285
4G的内存做基本的图像处理还是基本够用的。相信绘声绘影这类视频处理也没什么问题。563796EE13252C7BBEC97830BAD808BF
操作界面分屏是一个非常好用的功能,少去了很多切换的麻烦。下图就是APP应用和Windows桌面的分屏。 IMG_2288
大家熟悉的Win8平板界面 IMG_2284
Lock界面,不得不说TYPE COVER真的为Surface的PC元素做出了很大贡献。

27DEDD7D4BDA0BC4413190E4ECCFDACE  这只是我自己的一点小体会,专业点的评测看以下的文章。总而言之Surface Pro 2没有让我失望,真的希望经过更新换代以后就靠这么一个平板做所有的事。

办公娱乐皆给力 Surface Pro 2体验评测

Surface Pro能取代PC么?升级到Windows 8.1就有戏 – 51CTO.COM

Surface Pro个人使用评测_河海水妖的个人博客

Surface Pro 2评测:非传统平板也并不完全是PC

Security for Java and E-commerce Environments

Click here to download code (NB: You should register first)

[download id=”6″]

 

Assignment 5 (Client/Server Message Security)

Purpose: Develop an AC module to login users and accept their (typed) message. The module should comprehensively protect the message using a combination of secret and public key cryptography. Channel protection should be provided by the SSL (through JSSE), message protection by the PKCS#7 or S/MIME formats.

 

Client/Server

1. Operate server:


2. Register for users:


 

3. Login:


 

4. Chat (message transfer)


Main code:

1. AppServer.java

//Code for the connect class

class Connect

{

ObjectOutputStream streamToClient;

int ctr=0;


BufferedReader streamFromClient;


static
Vector
vector;

static
Vector
vctrList;

String message=” “;

static String str=new String(“UsrList”);

 

static

{


vector=new
Vector(1,1);

vctrList=new
Vector(1,1);

vctrList.addElement((String)str);

}

 

 

int verify(String mesg)

{


try

{

RandomAccessFile RAS=new RandomAccessFile(“UsrPwd.txt”, “r”);

int
i=0;

String str=””;

while((RAS.getFilePointer())!=(RAS.length()))

{

str=RAS.readLine();

if(str.equals(mesg))

{

ctr=1;

break;


}

}

RAS.close();

}

catch(Exception e)

{


}


return ctr;


 

}//end of verify()

 

2. clientInt.java

class TimerAction implements ActionListener

{

Socket toServer;

ObjectInputStream streamFromServer;

PrintStream streamToServer;

public
void actionPerformed(ActionEvent e2)

{

 

try

{

toServer=new Socket(“machine-name”,1001);

streamFromServer=new ObjectInputStream(toServer.getInputStream());

streamToServer=new PrintStream(toServer.getOutputStream());

message=txtMsg.getText();


//send a message to the server

streamToServer.println(“From Timer”);


//receive vectors from the server

Vector vector=(Vector)streamFromServer.readObject();

Vector vector1=(Vector)streamFromServer.readObject();


//show the online users

txtListUsers.setText(“”);

for(int j=1;j<vector1.capacity();j++)

{

txtListUsers.append((String)vector1.elementAt(j));

txtListUsers.append(“\n”);

}


//show the messsages

int i=messageCount;

for(;i<vector.capacity();i++)

{

 

txtMessages.append((String)vector.elementAt(i));

txtMessages.append(“\n”);


}

messageCount=i;

}//end of try

 

catch(Exception e)

{

System.out.println(“Exception “+e);

}

 

}//end of actionPerformed

}//end of TimerListener class

 

3.
Register.java

public
void actionPerformed(ActionEvent e1)

{

 

JButton button=(JButton)e1.getSource(); //get the source of the event

if(button.equals(btnCancel))

{

this.dispose();

}

else

{

int ver=verify(); //call the verify()

if(ver==1)

{


try

{

//establish a socket connection and create I/O socket streams

toServer=new Socket(“machine-name”,1001);

streamFromServer=new ObjectInputStream(toServer.getInputStream());

streamToServer=new PrintStream(toServer.getOutputStream());

 

//send a message to server for Registration

streamToServer.println(“RegisterInfo”);

usrName=txtUserName.getText();

usrPwd=txtUsrPwd.getPassword();

String pwd=new String(usrPwd);

 

//send the user name and password to the server

streamToServer.println(usrName+”:”+pwd);

 

//read the response from the server

String frmServer=(String)streamFromServer.readObject();

if(frmServer.equals(“Registered”))

{

new Login();

this.dispose();

}

else
if(frmServer.equals(“User Exists”))

{


showUsrExists(); //show error message

}

 

}//end of try

catch(Exception e)

{

System.out.println(“Exception “+e);

}

}//end of if

 

}//end of else

}//end of actionPerformed()

 

4. Login.java

public
void actionPerformed(ActionEvent e1)

{

JButton button=(JButton)e1.getSource();

if(button.equals(btnCancel))

{

this.dispose(); //close the current frame

}

else
if(button.equals(btnRegister))

{

new Register(); //call Register program

this.dispose();

}

else

{

 

try

{

//create socket and input-output socket streams

toServer=new Socket(“machine-name”,1001);

streamFromServer=new ObjectInputStream(toServer.getInputStream());

streamToServer=new PrintStream(toServer.getOutputStream());

 

//send message to server for login

streamToServer.println(“LoginInfo”);

UsrName=txtUsrName.getText();

UsrPwd=txtUsrPwd.getPassword();

strPwd=new String(UsrPwd);

 

//send the user name and password to the server

streamToServer.println(UsrName+”:”+strPwd);


//read the message from the server

String frmServer=(String)streamFromServer.readObject();


if(frmServer.equals(“Welcome”))

{

new clientInt(UsrName); //start the chat screen

this.dispose();

}

else

{

showdlg();//show error message

}

 

}//end of try

catch(Exception e)

{

System.out.println(“Exception Occured: “+e);

}

}//end of if..else

}//end of actionPerformed

 

SSL through JSSE

Simple client/sever includes SimpleSSLServer and SimpleSSLClient. We should configure KeyStore and TrustStore files before we operate the program.

We use keytool to generate KeyStore, clientStore and serverstore which contain the authorization for A, B and Server.

Establish authorization for Bob:


Check the authorization:


Generate certificate:


Export the certificate:


File list:


Operate server:


Operate client:


 

PKCS#7 implementation

Use java Security package. There is no PKCS#7 for digital signature in jdk. So we use BASE64 code as follows: