WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是Web网页。WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信。HTTP协议是基于TCP/IP协议之上的协议,是Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。HTTP协议的作用原理包括四个步骤:
(1) 连接:Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。
(2) 请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:
GET 路径/文件名 HTTP/1.0
文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。
(3) 应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。
1.由于服务器配置比较低综合考虑,选择ubuntu系统进行搭建
2. 登陆阿里云服务器:
方法一:使用xshell软件登陆服务器
主机填写ip地址
端口号选择22
连接登陆服务器
方法二:使用阿里云管理终端
ssh root@服务器ip地址
password:输入密码
3.如何上传文件
方法一:windows和linux上传或下载某个文件可以使用rz,sz
sudo apt-get install lrzsz
安装完成后进入准备存放改文件的文件夹输入rz,就会跳出文件选择框
例如:#cd apache-tomcat-7.0.69/bin rz
cd后有空格
cd ~:返回最上层
cd ..:返回上一层
cd -:返回最近操作
方法二:使用xshell中的插件Xftp
4.安装及配置环境
安装lsb指令
ubunu快捷安装需要的命令,更新一下:
自带源在大陆不好,更新即可解决
1.sudo apt-get update
2.apt-get install yum yum install -y redhat-lsb
输入lsb指令查看当前版本
查看版本号
lsb_release -a查看当前位数
getconf LONG_BIT
安装jdk:
方法一:ubuntu自动安装jdk
sudo apt-get install jdk
安装完成后配置环境:
使用vim指定编辑etc目录下profile文件,添加export
#vim /etc/profile
添加进profile文件
JAVA_HOME=/home/java/jdk1.6.0_12
export JRE_HOME=/home/liujicheng/java/jdk1.6.0_12/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
//java存放位置请自行更改
//使用 which java 查看jdk所在文件夹
方法二:本地下载jdk上传
下载对应系统32位或64位的tar.gz文件
建议:经过还几次对服务器进行环境搭建,已经有了一点小小的见解,建议不要使用过低版本的JDK,例如服务器JDK版本为1.5而项目JDK版本为1.8的情况,就会出现无法服务器无法运行.war文件的情况,建议版本为1.7
上传tar.gz文件有两种方法
11.输入命令行 rz 选择安装包上传 1使用rz时,注意安装 2.通过xftp将上传创建一个java文件夹
mkdir java
输入安装命令,将上传的.tar.gz文件解压到创建为java文件夹中
sudo tar -zxvf jdk-7u80-linux-x64.tar.gz -C /root/java
设置环境变量
使用vim指定编辑etc目录下profile文件,添加export
#vim /etc/profile添加进profile文件
JAVA_HOME=/root/java/jdk1.7.0_80
export JRE_HOME=/root/java/jdk1.7.0_80/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
//java存放位置请自行更改//使用 which java 查看jdk所在文件夹
选择E,然后输入i 进行写操作
最后 :x退出并保存
设置默认JDK
12345sudo update-alternatives --install /usr/bin/java java /root/java/jdk1.7.0_80/bin/java 300 sudo update-alternatives --install /usr/bin/javac javac /root/java/jdk1.7.0_80/bin/javac 300 sudo update-alternatives --install /usr/bin/jar jar /root/java/jdk1.7.0_80/bin/jar 300 sudo update-alternatives --install /usr/bin/javah javah /root/java/jdk1.7.0_80/bin/javah 300 sudo update-alternatives --install /usr/bin/javap javap /root/java/jdk1.7.0_80/bin/javap 300如果之后一个版本显示:
There is only one alternative in link group java (providing /usr/bin/java):
/usr/lib/jvm/jdk1.7.0_60/bin/java
否者,选择合适的jdk
检查jdk是否安装成功,输出版本号及对应信息即安装成功
#java
#javac
#java -version
安装tomcat
方法一:ubuntu自动安装tomcat
sudo apt-get install tomcat
添加jdk和jre环境变量
JAVA_HOME=/home/java/jdk1.6.0_12
JRE_HOME=/home/homer/eclipse/jdk1.6.0_12/jre
PATH=$JAVA_HOME/bin:$JRE_HOME:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
TOMCAT_HOME=/opt/apache-tomcat-7.0.29
启动tomcat
cd apache-tomcat-7.0.69/bin ./startup.sh
出现提示说明配置成功
方法二:上传tomcat并解压
通过上述上传文件方法上传后
使用tar指令解压
tar -zxvf apache-tomcat-8.0.24.tar.gz
然后进入apache-tomcat-7.0.69文件夹
# cd apache-tomcat-8.0.24 /bin/
启动tomcat
cd apache-tomcat-8.0.24 /bin/ ./startup.sh
显示如下说明成功
最后输入:http://x.x.x.x:8080/ (x代表ip地址),显示tomcat首页说明配置成功
安装Mysql
ubuntu下自动安装
sudo apt-get install mysql-server
apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
设置数据库密码:
检查Mysql是否安装成功
sudo netstat -tap | grep mysql
登陆Mysql
mysql -uroot -p密码
成功:
查看数据库
show databases
将.sql文件导入
//先选定数据库
use iswust
source /root/test.sql//source /文件夹/sql文件名
select * from score
5.java工程打包上传并运行
右键选中java项目,WAR Export 将文件以war格式导出
(注意:java工程的jdk一定要先降低到与服务器的jdk版本相同,例如java工程为1.8而服务器为1.6则会报错)
降低jdk方法:
并通过XFTP或上述的上传文件方法,上传至apache-tomcat-7.0.69/webapps中
学习了计算机网络之后,利用java写了一个ftp服务器。一、实现的ftp命令
实现了基本的user,pass,list,port,quit,retr,cwd,stor等命令
二、以上命令所对应的功能
对应的功能是:下载,上传,获取服务器目录,切换目录等
三、用于测试的ftp客户端:windows自带的ftp客户端
四、实现的思想
1、使用ServerSocket进行监听,每个控制连接的请求到来之后,开启一个线程进行处理(这里使用的java bio,效率较差,对于控制连接最好使用NIO处理,之后会再写个
nio的实现)
2、 对于命令使用工厂方法模式进行设计,当需要添加新的命令的时候,只需要添加一个新的命令类,实现相应接口,修改工厂产生逻辑,而不用修改其他的程序代码。可
扩展性较好,同时符合开闭原则。
五、实现过程中碰到的问题
1、对于tcp与socket的关系理解错误,以为所有的数据的输入都是要经过serverSocket().accept()方法。其实,ServerSocket.accept()所对应的是tcp里面的三次握手建
立连接的阶段,之后的tcp的连接由客户端和服务器端的一对socket来维护,是属于establish阶段,在这个阶段,通信是全双工的,任何一方都能够发送数据。
socket.close()对应的阶段是断开连接(四次挥手)的阶段。
2、刚开始对于ftp协议不是很理解,不知道他的工作方式是怎样的,后来在看了tcp协议卷里面的ftp的内容之后,才知道ftp命令和应答码是关键。eg:刚开始测试时,在
输入用户名之后,不会提示输入密码的。原因:没有返回对应的应答码:331. 另外要注意的是:返回的数据要以换行回车作为结束--\r\n.
六、代码列表
简单说明:
ftpServer:是服务器的主程序,入口,同时负责监听本地的21号端口。
ControllerThread.java:用于处理控制连接的线程(每一个控制连接请求对应一个线程)ps:实在很浪费(流量小,连接多)。
Share:一些全局性数据的维护。
Command:是命令接口,定义了一个所有命令都要实现的方法。
CommandFactory:命令工厂,通过传人的参数,决定生成的命令对象。
UserCommand,PortCommand等:是具体ftp命令的实现
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)