2024-05-16 04:58:53 | 我爱编程网
如何用Java实现Web服务器 一、HTTP协议的作用原理
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浏览器上显示出所请求的页面。
例:假设客户机与
www.mycompany.com
:8080/mydir/index.html建立了连接,就会发送GET命令:GET /mydir/index.html HTTP/1.0.主机名为
www.mycompany.com
的Web服务器从它的文档空间中搜索子目录mydir的文件index.html.如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。
为了告知 Web浏览器传送内容的类型,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。
常用的HTTP头信息有:
① HTTP 1.0 200 OK
这是Web服务器应答的第一行,列出服务器正在运行的HTTP版本号和应答代码。代码“200 OK”表示请求完成。
② MIME_Version:1.0
它指示MIME类型的版本。
③ content_type:类型
这个头信息非常重要,它指示HTTP体信息的MIME类型。如:content_type:text/html指示传送的数据是HTML文档。
④ content_length:长度值
它指示HTTP体信息的长度(字节)。
(4) 关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。
二、Java实现Web服务器功能的程序设计
根据上述HTTP协议的作用原理,实现GET请求的Web服务器程序的方法如下:
(1) 创建ServerSocket类对象,监听端口8080.这是为了区别于HTTP的标准TCP/IP端口80而取的;
(2) 等待、接受客户机连接到端口8080,得到与客户机连接的socket;
(3) 创建与socket字相关联的输入流instream和输出流outstream;
(4) 从与socket关联的输入流instream中读取一行客户机提交的请求信息,请求信息的格式为:GET 路径/文件名 HTTP/1.0
(5) 从请求信息中获取请求类型。如果请求类型是GET,则从请求信息中获取所访问的HTML文件名。没有HTML文件名时,则以index.html作为文件名;
(6) 如果HTML文件存在,则打开HTML文件,把HTTP头信息和HTML文件内容通过socket传回给Web浏览器,然后关闭文件。否则发送错误信息给Web浏览器;
(7) 关闭与相应Web浏览器连接的socket字。
下面的程序是根据上述方法编写的、可实现多线程的Web服务器,以保证多个客户机能同时与该Web服务器连接。
程序1:WebServer.java文件
//WebServer.java 用JAVA编写Web服务器
import java.io.*;
import java.net.*;
public class WebServer {
public static void main(String args[]) {
int i=1, PORT=8080;
ServerSocket server=null;
Socket client=null;
try {
server=new ServerSocket(PORT);
System.out.println("Web Server is listening on port "+server.getLocalPort());
for (;;) {client=server.accept(); //接受客户机的连接请求
new ConnectionThread(client,i)。start();
i++;
}
} catch (Exception e) {System.out.println(e);}
}
}
/* ConnnectionThread类完成与一个Web浏览器的通信 */
class ConnectionThread extends Thread {
Socket client; //连接Web浏览器的socket字
int counter; //计数器
public ConnectionThread(Socket cl,int c) {
client=cl;
counter=c;
}
public void run() //线程体
{try {
String destIP=client.getInetAddress()。toString(); //客户机IP地址
int destport=client.getPort(); //客户机端口号
System.out.println("Connection "+counter+":connected to "+destIP+" on port "+destport+".");
PrintStream outstream=new PrintStream(client.getOutputStream());
DataInputStream instream=new DataInputStream(client.getInputStream());
String inline=instream.readLine(); //读取Web浏览器提交的请求信息
System.out.println("Received:"+inline);
if (getrequest(inline)) { //如果是GET请求
String filename=getfilename(inline);
File file=new File(filename);
if (file.exists()) { //若文件存在,则将文件送给Web浏览器
System.out.println(filename+" requested.");
outstream.println("HTTP/1.0 200 OK");
outstream.println("MIME_version:1.0");
outstream.println("Content_Type:text/html");
int len=(int)file.length();
outstream.println("Content_Length:"+len);
outstream.println("");
sendfile(outstream,file); //发送文件
outstream.flush();
} else { //文件不存在时
String notfound="
Error 404-file not found
";
outstream.println("HTTP/1.0 404 no found");
outstream.println("Content_Type:text/html");
outstream.println("Content_Length:"+notfound.length()+2);
outstream.println("");
outstream.println(notfound);
outstream.flush();
}
1、JDK (Java Development Kit)Java开发工具集
SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(JDK)。开发人员和最终用户可以利用这个工具来开发java程序。
JDK简单易学,可以通过任何
文本编辑器
(如:Windows 记事本、UltrEdit、Editplus、FrontPage以及dreamweaver等)编写Java
源文件
,然后在DOS状况下利通过javac命令将Java
源程序
编译成字节码,通过Java命令来执行编译后的Java文件,这能带给DOS时代程序员美好的回忆。Java 初学者一般都采用这种开发工具。
从初学者角度来看,采用JDK开发Java程序能够很快理解程序中各部分代码之间的关系,有利于理解Java面向对象的设计思想。JDK的另一个显著特点是随着Java (J2EE、J2SE以及J2ME)版本的升级而升级。但它的缺点也是非常明显的就是从事大
规模企业
级Java应用开发非常困难,不能进行复杂的Java软件开发,也不利于团体协同开发。
2、Java Workshop
Sun MicroSystems公司于推出了Java WorkShop 1.0,这是业界出现的第一个供Internet网使用的多平台开发工具,它可以满足各公司开发Internet和Intranet网应用软件的需要。Java WorkShop完全用Java语言编写,是当今市场上销售的第一个完全的Java开发环境,目前Java WorkShop的最性版本是3.0。Java Workshop的特点表现如下:
1)结构易于创建:在创建平台中立的网格结构方面,Java Workshop比其他任何一种Java开发工具都要方便。
2)可视化编程:Java Workshop的可视化编程特性是很基本的。Java Workshop允许程序员重新安排这些操作,甚至可以确定触发操作行为的过滤器。Java Workshop产生的模板带有许多注释,这对程序员是很有帮助的。
此外,Java WorkShop支持JDK以及JavaBeans组件模型,API和语言特征增加了编译Java
应用程序
的灵活性。 Java WorkShop开发环境由于完全用Java写成,所以可移植性极好,以致于多个平台都能支持,目前Java WorkShop支持Solaris操作环境SPARC及Intel 版)、Windows95、WindowsNT、以及HP/Ux等平台。适合于初学者进行一些简单的Java编程。Java WorkShop的缺点是Java Workshop中的每一个可视化对象都迟早会用到网格布局,这种设计方法是许多人不习惯的;Java Workdshop的调色板是较差的,仅仅能满足绝大部分应用的基本要求。
3、NetBeans 与Sun Java Studio 5
是
开放源码
的Java
集成开发环境
(IDE),适用于各种客户机和Web应用。Sun Java Studio是Sun公司最新发布的商用全功能Java IDE,支持Solaris、Linux和Windows平台,适于创建和部署2层Java Web应用和n层J2EE应用的企业开发人员使用。
NetBeans是业界第一款支持创新型Java开发的开放源码IDE。开发人员可以利用业界强大的开发工具来构建桌面、Web或移动应用。同时,通过NetBeans和开放的API的模块化结构,第三方能够非常轻松地扩展或集成NetBeans平台。
NetBeans主要针对一般Java软件的开发者,而Java One Studio5则主要针对企业做网络服务等应用的开发者。Sun不久还将推出Project Rave,其目标是帮助企业的开发者进行软件开发。
NetBeans
etBeans 版本与其他开发工具相比,最大区别在于不仅能够开发各种台式机上的应用,而且可以用来开发网络服务方面的应用,可以开发基于J2ME的移动设备上的应用等。在NetBeans 3.5.1基础上,Sun开发出了Java One Studio5,为用户提供了一个更加先进的企业编程环境。在新的Java One Studio5里有一个应用框架,开发者可以利用这些模块快速开发自己在网络服务方面的各种应用程序。
4、Borland 的JBuilder
Jbuilder进入了Java集成开发环境的王国,它满足很多方面的应用,尤其是对于服务器方以及EJB开发者们来说。下面简单介绍一下Jbuilder的特点:
1)Jbuilder支持最新的Java技术,包括Applets、JSP/Servlets、JavaBean以及EJB(Enterprise JavaBeans)的应用。
2)用户可以自动地生成基于后端数据库表的EJB Java类,Jbuilder同时还简化了EJB的自动部署功能.此外它还支持CORBA,相应的向导程序有助于用户全面地管理IDL(分布应用程序所必需的接口定义语言Interface Definition Language)和控制远程对象。
3)Jbuilder支持各种应用服务器。Jbuilder与Inprise Application Server紧密集成,同时支持WebLogic Server,支持EJB 1.1和EJB 2.0,可以快速开发J2EE的电子商务应用。
4)Jbuilder能用Servlet和JSP开发和调试动态Web 应用。
5)利用Jbuilder可创建(没有专有代码和标记)纯Java2应用。由于Jbuilder是用纯Java语言编写的,其代码不含任何专属代码和标记,它支持最新的Java标准。
6)Jbuilder拥有专业化的图形调试介面,支持远程调试和
多线程
调试,调试器支持各种JDK版本,包括J2ME/J2SE/J2EE。
JBuilder环境开发程序方便,它是纯的Java 开发环境,适合企业的J2EE开发;缺点是往往一开始人们难于把握整个程序各部分之间的关系,对机器的硬件要求较高,比较吃内存,这时运行速度显得较慢。
5、Oracle 的JDeveloper
Oracle9i JDeveloper(定为9.0版,最新为10g)为构建具有J2EE功能,XML和Web services的复杂的,多层的Java应用程序提供了一个完全集成的开发环境。它为运用Oracle9i数据库和应用服务器的开发人员提供特殊的功能和增强性能,除此以外,它也有资格成为用于多种用途Java开发的一个强大的工具。
Oracle9i JDeveloper的主要特点如下:
① 具有UML(Unified Modeling Language,一体化建模语言)建模功能。可以将业务对象及e-business应用模型化。
② 配备有高速Java调试器(Debuger)、内置Profiling工具、提高代码质量的工具“CodeCoach”等。
③ 支持SOAP(Simple Object Access Protocol)“
简单对象访问协议
”、UDDI(Universal Description, Discovery and Integration)“统一描述、发现和集成协议”、WSDL(Web Services Description Language)“WEB服务描述语言”等
Web服务
标准。
JDeveloper 不仅仅是很好的 Java 编程工具,而且是 Oracle Web 服务的延伸,支持 Apache SOAP,以及 9iAS ,可扩充的环境和 XML 和 WSDL 语言紧密相关。Oracle9i Jdeveloper完全利用Java编写,能够与以前的Oracle服务器软件以及其他厂商支持J2EE的应用服务器产品相兼容,而且在设计时着重针对Oracle9i,能够无缝化跨平台之间的应用开发,提供了业界第一个完整的、集成了J2EE和XML的开发环境,允许开发者快速开发可以通过Web、无线设备及语音界面访问的Web服务和交易应用,以往只能通过将传统Java编程技巧与最新模块化方式结合到一个单一集成的开发环境中之后才能完成J2EE应用开发
生命周期
管理的事实,从根本上得到改变。缺点就是对于初学者来说,较复杂,也比较难。
6、IBM的Visual Age for Java
Visual Age for Java是一个非常成熟的开发工具,它的特性以于IT开发者和业余的Java编程人员来说都是非常用有用的。它提供对可视化编程的广泛支持,支持利用CICS连接遗传大型机应用,支持EJB的开发应用,支持与Websphere的集成开发,方便的bean创建和良好的快速应用开发(RAD)支持和无文件式的文件处理。
IBM为建设Web站点所推出的WebSphere Studio Advanced Edition及其包含的VisualAge for Java Professional Edition软件已全面转向以Java为中心,这样,Java开发人员对WebSphere全套工具的感觉或许会好了许多。Studio所提供的工具有:Web站点管理、快速开发 JDBC页向导程序、HTML编辑器和HTML语法检查等。这确实是个不错的HTML站点页面编辑环境。Studio和VisualAge集成度很高,菜单中提供了在两种软件包之间快速移动代码的选项。这就让使用Studio的Web页面设计人员和使用VisualAge的Java程序员可以相互交换文件、协同工作。
Visual Age for Java支持团队开发,内置的代码库可以自动地根据用户做出改动而修改程序代码,这样就可以很方便地将目前代码和早期版本做出比较。与Visual Age紧密结合的Websphere Studio本身并不提供
源代码
和版本管理的支持,它只是包含了一个内置文件锁定系统,当编辑项目的时候可以防止其他人对这些文件的错误修改,软件还支持诸如Microsoft Visual SourceSafe这样的第三方源代码控制系统。Visual Age for Java完全面向对象的程序设计思想使得开发程序非常快速、高效。你可以不编写任何代码就可以设计出一个典型的应用程序框架。Visual Age for Java作为IBM电子商务解决方案其中产品之一,可以无缝地与其他IBM产品,如WebSphere、DB2融合, 迅速完成从设计、开发到部署应用的整个过程。
Visual Age for Java独特的
管理文件
方式使其集成外部工具非常困难,你无法让Visual Age for Java与其他工具一起联合开发应用。
7、BEA 的 WebLogic Workshop
BEA WebLogic Workshop是一个统一、简化、可扩展的开发环境,使所有的开发人员都能在 BEA WebLogic Enterprise Platform之上构建基于标准的企业级应用,从而提高了开发部门的生产力水平,加快了价值的实现。
WebLogic Workshop除了提供便捷的Web服务之外,它能够用于创建更多种类的应用。作为整个BEA WebLogic Platform的开发环境。不管是创建门户应用、编写
工作流
、还是创建Web应用,Workshop 8.1都可以帮助开发人员更快更好地完成。
我爱编程网(https://www.52biancheng.com)小编还为大家带来java web程序设计要学些什么的相关内容。
一、 HTML CSS Javascript
正如严老师所说:“Java Web 的基础是建立在HTML这套标签的地基之上的”。所以学习Java Web 就要学习HTML的标签,开始对HTML的理解并不是很深,本以为作为程序员对HTML的重点掌握无非就是From表单,哦,对了,还有Table,,文档的格式 等等等等,而对于CSS,更觉得这对于作为程序员的我们没有什么太大的必要,那些事情完全是由美工来做的,而对于Javascript则觉得他应当是与vbscript一个时代的脚本语言,其作用无非是给页面添加一些花哨的动态效果没有什么实际意义,但是当我接触到更多的新技术如AJAX的时候便觉得我所掌握的远远不够,对于AJAX而言你学要知道每个细节从而能够设计出既美观又具有人性化的用户界面。而AJAX所以依托的基础便是Javascript、CSS、HTML、XML,其思想在于使用XMLHttpRequest实现异步调用把数据偷偷的下载到客户端从而使得用户无需刷新界面从而得到更好的上网体验,此三种技术在AJAX中发挥的淋漓尽致。这才知道那本OReilly的 “Javascript犀牛书”并不是盖的。这三个基础性的东西还是学要好好的学习,老的技术相结合也能焕发出新的光彩。
二、 TomCat
总觉的这是一个让人头疼的东西,学习的时候常需要给他进行很多项配置,首先是虚拟路径,在server.xml文件夹下加上
三、 JSP基本语法
1、 < % %>在jsp页面中插入Java代码,<%= %>表达式输出语句
2、 JSP指令和动作:指令主要是<%@page %>、<%@include %>;动作主要是
3、 四种属性的作用域page、request、session、appliction,一个比一个大,page只对当前页面有效,request是在两个页面跳转的时候包括服务器端的跳转,seesion只要浏览器不关闭,属性一直存在。Appliction只要服务器(如Tomcat)不关闭它一直都存在
总之我感觉JSP的基本语法还是很简单的无非就是几个标签指令什么的,稍需要注意的是
四、 JSP内置对象
Request:主要作用接受表单传来的数据,
Response:主要是可以像客户端发送头部信息和重定向sendRedirect
Out:输出一些东西
Exception:一些异常信息
Config:这个对象比较厉害,它能获得web.xml中的许多信息,如
Session和applicition对象主要是用他们的setAttribute和getAttribute方法存取一些属性值,不同之处在于他们的作用域
五、 JDBC
与数据库进行连接,这是学习程序的重头戏,但也不是很难,主要是记住连接数据库的一些流程
1、 Class.forName(驱动程序字符串)
主要有四种驱动方式,字符串也各不相同,我们常用的是连接access的jdbc odbc bridge字符串为sun.jdbc.odbc.jdbcodbcdriver
2、 DirverManger.getConnection(DBURL)
DBURL字符串为 Jdbc:odbc:数据源名称
3、新建statement对象
4、执行exectuQuery或exectuUpdata方法
5、逆序关闭数据库
六、结语:设计模式 与开发框架
DAO模式已经过时了,现在的主流模式是MVC;其中主要用了servlet充当控制层, 还需要在web.xml中配置servlet映射,它主要是起到数据控制流向的作用,现在说有主流的框架都是使用MVC模式,如SSH,但是这些框架都没有想微软vasual Studio那样的可是控件(虽然JavaBen是一些可复用的类),2005年推出的JSF开发框架弥补了这一缺陷,相信在未来作为SUN官方标准推出的JSF开发框架可能会成为主流框架,因为ESRI的ArcGIS Server就是依托于JSF框架开发的产品,相信JSF会成为以后开发框架的主流!
php实现上传图片至服务器的函数<formmethod=postaction="upload.php"ENCTYPE="multipart/form-data"><inputtype="file"name="upload_file"><inputtype="submit"name="submit"value="上传文件">用PHP上传时,需要对内容作详细的检
PHPmove_uploaded_file()参数的正确写法,求指点该函数的作用是把上传的文件移动到一个新的位置。有两个参数,第一个参数是你上传后的临时文件名,由系统自动生成。通常其样式为:$_FILE["file"]["tmp_name"];其中的file为你前台文件上传表单的名称。第二个参数就是包含有路径的新的文件名。如:"upload/1.jpg";这样,就会把
Java中如何让web服务器启动的时候自动运行web程序中某个类的某个1、首先让需要自动运行的类继承javax.servlet.http.HttpServlet2、把需要自动运行的类中写一个init方法。(servlet应用程序启动的入口就是init方法)public void init(){ System.out.println("这样在web容器启
怎样使用linux运行java程序?使用linux运行java程序具体步骤如下:1.Windows上使用eclipse编译java工程,编译完成后导出为RunnableJARFile。例如,此处将test工程中的Test2文件export为MyTest2.jar文件。2.Ubuntu上java环境安装。①jdk官网-downloads-2133151.html下载L
IOS如何调用Java服务?IOS调用java服务的方法如下:NSString*nstrWyKPIUrl=[[NSStringalloc]initWithFormat:@"%@?citys=%@&startTime=%@&endTime=%@&indexNames=%@",WYKPIURL,city,startTime,endTime,zbz];//c
php如何获取服务器的信息服务器变量$_SERVER详解:1、$_SESSION['PHP_SELF']—获取当前正在执行脚本的文件名2、$_SERVER['SERVER_PROTOCOL']—请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。3、$_SERVER['REQUEST_TIME']—请求开始时的时间戳。从PHP5.1.0起有效。和time函数效果一样
服务器如何开启php的fsockopen函数第一步:php.ini文件中查找allow_url_fopen=On使其值为On第二步:php.ini文件中查找extension=php_openssl.dll如果前面有分号,去掉分号第三步:重启web服务器,apache或IISphp开启fsockopen函数1.方法一:
JAVA计时器求大神//声明图形界面元素private JLabel lab_time;private JButton but_start;private JButton but_end;private JButton but_reset;//初始化界面元素,布局,注册时间监听器setLayout(null);setSize(400, 300);lab_time = new JLabel("
2025-02-01 20:24:39
2024-01-05 14:11:24
2025-02-12 03:21:37
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-11-22 05:08:01