|
|
用户名:njaufxh 笔名:njaufxh 地区: 江苏-南京 行业:本科 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
上班族
实习
实习单位真实难找啊, 研究生也不例外啊。。找了好久都没有找到。莫非是简历写的太搓了。。。晕死了。。
一个Swing的例子
package exercise;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.*;
public class layOut implements ListSelectionListener {
/**
* 这个是一个选择显示的例子,
* 在左边选中要显示的面板,
* 在右边就会显示。
* @author justlikeyou.
*/
private static final long serialVersionUID = 3633985074607373691L;
private JPanel scrolpan;
private JPanel panelright1;
private JPanel panelright2;
private JScrollPane panelleft;
public DefaultListModel listModel;
public JList List;
public layOut(){
JFrame frame=new JFrame("选择显示的demo");
scrolpan=new JPanel(new BorderLayout());
panelright1=new JPanel(new BorderLayout());
panelright2=new JPanel(new BorderLayout());
addJList();
panelleft=new JScrollPane(List);
JLabel lab4=new JLabel("你要显示的是一号面板的内容。");
panelright1.add(lab4);
JLabel lab5=new JLabel("你要显示的是二号面板的内容。");
panelright2.add(lab5);
scrolpan.add(panelleft,BorderLayout.WEST);
scrolpan.add(panelright1,BorderLayout.EAST);
frame.setContentPane(scrolpan);
frame.setSize(400, 400);
frame.setVisible(true);
frame.setLocation(300, 300);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public void addJList(){
Object[] dataList=new Object[2];
dataList[0]="面板一";
dataList[1]="面板二";
List = new JList(dataList);
List.addListSelectionListener(this);
}
public void addListSelectionListener(ListSelectionListener listen) {
}
public void doWith(String selectValue){
if(selectValue.equals("面板二")){
scrolpan.remove(panelright1);
scrolpan.updateUI();
scrolpan.add(panelright2,BorderLayout.EAST);
}else if(selectValue.equals("面板一")){
scrolpan.remove(panelright2);
scrolpan.updateUI();
scrolpan.add(panelright1,BorderLayout.EAST);
}
}
public void valueChanged(ListSelectionEvent listen) {
String value=(String)List.getSelectedValue();
doWith(value);
}
public static void main(String args[]){
new layOut();
}
}
在Tomcat5.0 环境下如何配置JNDI
第一步:首先在tomcat$\conf文件夹(tomcat$指的是tomcat的安装目录,下皆同).中的server.xml中找到 <GlobalNamingResources> 它是JNDI的配
置部分。在里面添加
<!-- JNDI Demo -->
<!-- jdbc/Register中的Register是你虚拟目录的名字 这个很重要 否则的话会出现Name is not bound 这样的错误
-->
<Resource name="jdbc/Register" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/Register">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test_njupt</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<!-- SQLServer dB username and password for dB connections -->
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>fxh1984</value>
</parameter>
</ResourceParams>
<!-- JNDI Demo -->
第二步:在这个server.xml文件下面还有<host></host>这部分,要在刚才的虚拟目录中添加
<ResourceLink name="jdbc/Register" global="jdbc/Register" type="javax.sql.DataSource"/>
我的虚拟目录部分是
<Context path="/Register" reloadable="true" docBase="C:\workspace\Register" workDir="C:\workspace\Register\work" >
<!-- JNDI Demo -->
<ResourceLink name="jdbc/Register" global="jdbc/Register" type="javax.sql.DataSource"/>
<!-- JNDI Demo -->
</Context>
上三步:在你的应用系统的目录 (我的是C:\workspace\Register\ ,上一步中出现的)中WEB-INF文件夹下的web.xml中添加如下的信息
<resource-ref>
<description>Demo</description>
<res-ref-name>jdbc/Register</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
第四步:就可以在系统中使用JNDI
Context initCtx=new InitialContext();
if(initCtx==null) throw new Exception("没有匹配的环境");
Context ctx=(Context)initCtx.lookup("java:/comp/env");
javax.sql.DataSource ds=(javax.sql.DataSource)ctx.lookup("jdbc/Register");
Connection conn=ds.getConnection();
out.println("connection is"+conn+"<br>");
在tmocat中出现
Cannot create JDBC driver of class '' for connect URL 'null'
是多方面的原因。我原来没有使用第三步。
C++清除缓冲区
#include <limits>
1cout<<"ADDR"<<endl;
2cin.getline(Addr,30);
3cout<<Addr<<endl;
4char name[20];
5cout<<"NAME:"<<endl;
6cin.getline(name,20);
在上面的句子中如果我在行2中输入的字母太多的话,则第6行就不能输入字符了,因此我要清除缓冲区,在行2和行3之间加入cin.clear(0);
cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
就可以了。。哈哈
java版的pop3
最近花了些时间熟悉一下pop3协议。
用java实现了基本的原理。
感觉java做网络开发就是方便。
附主要代码。
/**
* 读取附件的函数
* */
public String readAttachment(boolean mailType,String mainBounary)throws IOException{
String msg="";
BASE64Decoder decode=new BASE64Decoder();
StringBuilder attachMentBuilder=new StringBuilder();
if(mailType){
//读取附件
int countBounary = 0;//计算边界的次数
msg = this.recv.readLine();
String FileName = "";
boolean bout=false;
do {
//如果附件已经读完
if(bout){
break;
}else{
if (msg.indexOf(mainBounary)!=-1) {
countBounary++;
if (countBounary == 1);
else
break;
} else if (countBounary == 1) {
//获取编码格式
if (msg.indexOf("Content-Transfer-Encoding:")!=-1) {
boolean formatEncode=(msg.indexOf("base64")!=-1);
msg = this.recv.readLine();//获取文件名
FileName = msg.substring(msg.indexOf("filename") + 10,msg.length() - 1);
FileOutputStream writer=this.createNewFile(FileName);
String result;//解码后的内容
int istringbuilder=0;//用于记数
if (formatEncode) {
//读掉空格
msg = this.recv.readLine();
do {
msg = this.recv.readLine();
if (msg.indexOf(mainBounary)!=-1){
bout=true; //要跳出次外层循环
break;
}
else {
attachMentBuilder.append(msg);
istringbuilder++;
//如果已经产生10行数据,分批写入
if(istringbuilder==10){
byte[] ByteData;
ByteData=decode.decodeBuffer(attachMentBuilder.toString().replaceAll("\n", ""));
writer.write(ByteData);
writer.flush();
istringbuilder=0;
attachMentBuilder=new StringBuilder();
}
}
} while (true);
//写入不足10行的最后数据
byte[] ByteData;
ByteData=decode.decodeBuffer(attachMentBuilder.toString().replaceAll("\n", ""));
writer.write(ByteData);
writer.flush();
writer.close();
System.out.println("附件已被成功下载!");
}
}
}
msg=this.recv.readLine();
}
} while (true);
}
return msg;
}
java 版本的ftp客户端 简单实现
/****
* version 0.01
* 简单的测试ftp的工作原理的代码,没有使用一些错误检验措施。
* 使用ftp.njupt.edu.cn作为ftp服务器。
* 目标一:获得服务器上的文件列表。
* 用户名是anonymous
* 密码 :无
* 过程是首先建立控制通道,如果进行get,put LIST等操作时,要使用数据通道
* 过程是,先设置数据传输模式,获得服务器与客户机数据传输的端口,然后建立一个socket绑定此端口,
* 然后发送LIST命令到控制端口,用数据端口获得返回的数据。
* *******************/
import java.io.*;
import java.net.*;
import java.util.*;
public class ftpc{
private Socket Sock;
private String strip;
private int Port;
private PrintStream out;
private BufferedReader in;
public ftpc(String str,int port)throws IOException{
strip=str;
Port=port;
Sock=new Socket(strip,Port);
}
public static void main(String args[])throws IOException{
String strSendCmd;
String strRec;
try
{
String strip=GetIP("ftp.njupt.edu.cn");
ftpc ftpClient=new ftpc(strip,21);
//初始化 控制通道
ftpClient.InitSockStream(ftpClient.Sock);
//获得控制通道的信息
System.out.println(ftpClient.in.readLine());
//登陆到ftp
ftpClient.BuildConnection(ftpClient);
//获得服务器上的文件或文件夹列表
ArrayList fileList= ftpClient.GetFileList(ftpClient);
//改变目录
strSendCmd=ftpClient.strInteract();
while(!strSendCmd.equals("")){
ftpClient.ChDir(ftpClient,strSendCmd);
// 获得服务器上的文件或文件夹列表
fileList= ftpClient.GetFileList(ftpClient);
strSendCmd=ftpClient.strInteract();
}
//退出ftp
strSendCmd="QUIT";
strRec=ftpClient.SendCommand(strSendCmd);
ftpClient.SockClose(ftpClient.Sock);//关闭控制通道
}
catch(IOException E)
{
System.out.println(E.toString());
}
}
//通过域名获得IP
public static String GetIP(String strDomainName)throws IOException{
InetAddress IP=InetAddress.getByName(strDomainName);
String strip=IP.toString().substring(IP.toString().indexOf("/")+1);
return strip;
}
//初始化控制通道
public void InitSockStream(Socket Sock)throws IOException{
out=new PrintStream(Sock.getOutputStream());
in=new BufferedReader(new InputStreamReader(Sock.getInputStream()));
}
//获得服务器上的目录或者文件列表
public ArrayList GetFileList(ftpc ftpClient)throws IOException{
//设置模式PASV or PORT
ArrayList FileList=new ArrayList();
String strSendCmd="PASV";
String strRec = ftpClient.SendCommand(strSendCmd);
Socket Client = ftpClient.CreateDataSocket(ftpClient.GetPort(strRec));
strSendCmd = "NLST";
ftpClient.SendCommand(strSendCmd);
PrintStream outData;
BufferedReader inData;
//获得数据通道传出的数据
outData = new PrintStream(Client.getOutputStream());
inData = new BufferedReader(new InputStreamReader(Client.getInputStream()));
String s;
while ((s = inData.readLine()) != null) {
System.out.println(s);
FileList.add(s);
}
ftpClient.SockClose(Client);//关闭数据通道
System.out.println(ftpClient.in.readLine()); //获得控制通道的信息
return FileList;
}
//处理用户输入
public String strInteract()throws IOException{
String strCmd;
InputStreamReader ir;
BufferedReader in;
ir=new InputStreamReader(System.in);
in=new BufferedReader(ir);
System.out.println("Directory:");
strCmd=in.readLine();
return strCmd;
}
//登陆到ftp
public void BuildConnection(ftpc ftpClient)throws IOException {
String strSendCmd;
//输入用户名
strSendCmd="USER anonymous";
ftpClient.SendCommand(strSendCmd);
//输入密码
strSendCmd="PASS ";
ftpClient.SendCommand(strSendCmd);
//输入格式控制模式
strSendCmd="TYPE A";
ftpClient.SendCommand(strSendCmd);
}
//改变目录
public void ChDir(ftpc ftpClient,String DirName)throws IOException{
String strSendCmd = "CWD " + DirName;
ftpClient.SendCommand(strSendCmd);
}
//从返回值中得到端口
public String [] GetPort(String ss)
{
int iPort=ss.indexOf("(");
int ePort=ss.lastIndexOf(")");
String tt=ss.substring(iPort+1,ePort);
String []kk;
kk=tt.split(",");
return kk;
}
//创建数据连接socket
public Socket CreateDataSocket(String [] strArgu)throws IOException{
int Port=Integer.parseInt(strArgu[4])*256+Integer.parseInt(strArgu[5]);
String StrIP=strArgu[0]+"."+strArgu[1]+"."+strArgu[2]+"."+strArgu[3];
Socket Client=new Socket(StrIP,Port);
return Client;
}
public void Get(ftpc ftpClient,String SouFileName,String DistFileName)throws IOException{
//输入格式控制模式
String strSendCmd = "TYPE I";
ftpClient.SendCommand(strSendCmd);
//设置模式PASV or PORT
strSendCmd = "PASV";
String strRec = ftpClient.SendCommand(strSendCmd);
Socket Client = ftpClient.CreateDataSocket(ftpClient.GetPort(strRec));
PrintStream outData;
BufferedReader inData;
//获得数据通道传出的数据
outData = new PrintStream(Client.getOutputStream());
inData = new BufferedReader(new InputStreamReader(Client
.getInputStream()));
String s;
while ((s = inData.readLine()) != null) {
System.out.println(s);
}
ftpClient.SockClose(Client);//关闭数据通道
}
//向控制通道发送命令
public String SendCommand(String strcmd)throws IOException{
out.println(strcmd);//发送控制命令
String strRec = in.readLine();
System.out.println(strRec);//输出控制器返回的消息
return strRec;
}
//关闭socket
public void SockClose(Socket sock)throws IOException{
if (sock != null) {
sock.close();
sock = null;
}
}
}
jsp 配置 心得
花了两天配置了一下tomcat,以前对jsp不是很感兴趣,现在想熟悉一下,就下载了java 和tomcat,然后装环境。。虽然 一直在上网找资料 ,但是感觉学到了好东西,真如嵌入式讲座老师说的有用一个项目去学一门语言可以很快学会的。因为你有了目标,而同时要为这个目标奋斗。
在这过程中学到了怎么打包package,安装环境。同时验证了老师的话,哈哈。。。。
java package理论 +jsp 2
1,什么都别说,先跟着我来做一把
我们先找一个目录,比如C:\myjob
然后我们建立两个目录,一个叫做src,一个叫做bin
C:\myjob>md src
C:\myjob>md bin
C:\myjob>dir
C:\myjob>
然后我们在src目录中去写java
我们写这么java文件
////SimpleBean.java
package hall;
public class SimpleBean {
private String message = "No message specified";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}
}
然后我们建立hall目录,
C:\myjob\src>md hall
将SimpleBean.java放入hall\中去
然后我们在c:\myjobs中发令:
C:\myjob\src>cd ..
C:\myjob>javac -sourcepath src -d bin src\hall\SimpleBean.java
则在bin中生成一个hall文件夹,下面有一个SimpleBean.class文件生成一个
2,从实践到理论
刚才我用一个非常简单但是非常完整的例子给大家演示了java的package机制。
为什么以前脑海里面那么简单的javac会搞得这么复杂呢?
实际上它本就这么复杂,
并不是一个.java,一行javac一个当前目录中的class这么简单。
首先我要打破一些东西,然后才好建立一些东西。
javac并非只是给一个.java编译一个class的。javac自带有make机制,也就是说,如果在
javac的参数中java文件使用到的任何类,javac首先会去找寻这个类的class文件存在与否
,如果不存在,就会在sourcepath中找寻源代码文件来编译。
什么是sourcepath呢?sourcepath是javac的一个参数,如果你不加指定,那么sourcepath
就是classpath。
比如我们装好jdk之后,我说过不要设定classpath环境变量,因为大部分人一旦设定了
classpath,不是多此一举把什么dt.jar放进去。(我可以好好打击你一下,告诉你一个可
悲的事实——jre永远不会从你这个classpath中去寻找dt.jar。你完全是徒劳的!)就是
把"."搞不见了,搞得是冷水一盆盆的往自己身上泼,脑袋一点点的涨大。
不要设!classpath没有你想象中那么普适和强大,它只是命令行的简化替代品。
你不设的话它就是"."。
回到sourcepath,sourcepath指的是你源代码
为什么是源代码树?而不是一个目录的平板源代码呢?
请大家将原本脑海中C的编译过程完全砸掉!
java完全不同,java没有头文件,每个.java都是要放在源代码树中的。
那么这颗树是怎么组织的呢?
对了,就是package语句。
比如写了package hall;
那么这个.java就必须放在源代码树根的hall之下才行。
很多浮躁的初学者被default打包方式宠坏了。自我为中心,以为java就是一套库,自己写
的时候最多import进来就行了,代码从不打包,直接javac,直接java,多么方便。
孰不知自己写的这个.java也不过是java大平台的其中一个小单元而已。如果不打包,
我写一个Point,你写一个Point,甚至更有甚者敢于给自己的类起名叫String等等。
全部都在平板式的目录中,那jre该选哪一个?
一旦要使用package语句,就要使用代码树结构,当然,你要直接javac,也行。
不过javac出来的这个class要放在符合package结构的目录中才能发挥正常作用,否则就是
废物一坨。
而且,如果你这个.java还用到其它自己写的有package语句的.java,那这个方法就回天乏
术了。
按照sun的想象,应该是写好的.java放在符合package结构的目录中,package语句保证了
正确放置,如果目录位置和package语句中指示的不同,则会出错。
所以按照刚才我们的那种package写法,我们必然要将那几个.java文件放入相应的目录中
才能让javac顺利找到他们来make。
有人说javac可不可以像java那样 java aaa.bbb.c...java?
不可以
javac中的那个.java文件参数必须是一个文件系统的路径文件名形式。
然后如果用到其它的.java,javac会根据目前的sourcepath出发寻找目录结构中的那些
java文件。
当然了,既然打了包,在使用的时候。
要么写全名——包名.类名
或者使用import
不得不提的是,import就好比c++的using,它不负责做文件操作,它只是方便你写代码。
另外import语句中的*代表的是类名,不代表包名片断。
你import hall.*;
编译器仍然找不到hall中的任何类。
反之亦然。
就好象你告诉编译器,我这里面要用到姓诸葛的人。
那么姓诸的人当然编译器不会认为也包含在内。
所以,如果程序一旦写到一定规模。
就不得不使用ant来管理这些。
或者使用IDE,否则jdk就真的变成了java developer killer。
但是对于初学者,在了解为什么会有ant之类的之前,还是要体会一下使用
jdk的艰辛。
这个和以前在unix上开发的人用gcc命令行到后来使用make之后使用ide
之类的时候的体会是类似的。
最后,javac的-d参数是指示编译出来的class文件放在哪里的,如果你不指定的话,它们
和.java混在一起。当然也符合目录结构。
上面是转载。
运行一个jsp文件
下面是在虚拟目录中放置jsp文件,然后运行其中e:/myjsp为虚拟目录的所在的实际目录
先建立一个java程序,代码如下:
package hall;
public class SimpleBean {
private String message = "No message specified";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}
}
保存为SimpleBean.java,编译后会生成一个包,其实就相当于一个目录,也就是SimpleBean.class会存放在hall目录中,暂且保存起来,将来备用。
再输入以下代码:
<HTML>
<HEAD>
<TITLE>Reusing JavaBeans in JSP</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLE BORDER=5>
<TR><TH CLASS="TITLE">
Reusing JavaBeans in JSP</TABLE>
</CENTER>
<P>
<jsp:useBean id="test" class="hall.SimpleBean" />
<jsp:setProperty name="test" property="message" value="Hello WWW" />
<H1>Message: <I>
<jsp:getProperty name="test" property="message" />
</I></H1>
</BODY>
保存在我们刚才建立的虚拟目录e:/myjsp下面,并命名为:BeanTest.jsp。
现在我们应该将hall(包)目录放在哪儿呢?别急,我们先在e:/myjsp下建立一个文件夹WEB-INF,然后再在WEB-INF下建立一个classes文件夹,最后将hall目录放到classes下,当然,hall下的字节码文件SimpleBean.class也一并要移过来,而SimpleBean.java就和BeanTest.jsp放到同一目录吧(也也不知道要不要放到一起,我没调试)。
好了,大功告成了,重新启动机器(如果您试了好多次都不行,这一步一定要做),在浏览器中输入:http://localhost:8080/myjsp/BeanTest.jsp,您看到了什么?呵,别告诉我您什么都没看到,那肯定是您设置的问题了。