㈠ 如何用Java实现Web服务器
一 HTTP协议的作用原理
WWW是以Internet作为传输媒介的一个应用系统 WWW网上最基本的传输单位是Web网页 WWW的工作基于客户机/服务器计算模型 由Web 浏览器(客户机)和Web服务器(服务器)构成 两者之间采用超文本传送协议(HTTP)进行通信 HTTP协议是基于TCP/IP协议之上的协议 是Web浏览器和Web服务器之间的应用层协议 是通用的 无状态的 面向对象的协议 HTTP协议的作用原理包括四个步骤
( ) 连接 Web浏览器与Web服务器建立连接 打开一个称为socket(套接字)的虚拟文件 此文件的建立标志着连接建立成功
( ) 请求 Web浏览器通过socket向Web服务器提交请求 HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递) GET命令的格式为
GET 路径/文件名 HTTP/
文件名指出所访问的文件 HTTP/ 指出Web浏览器使用的HTTP版本
( ) 应答 Web浏览器提交请求后 通过HTTP协议传送给Web服务器 Web服务器接到后 进行事务处理 处理结果又通过HTTP传回给Web浏览器 从而在Web浏览器上显示出所请求的页面
例 假设客户机与 /mydir/l建立了连接 就会发送GET命令 GET /mydir/l HTTP/ 主机名为的Web服务器从它的文档空间中搜索子目录mydir的文件l 如果找到该文件 Web服务器把该文件内容传送给相应的Web浏览器
为了告知 Web浏览器传送内容的类型 Web服务器首先传送一些HTTP头信息 然后传送具体内容(即HTTP体信息) HTTP头信息和HTTP体信息之间用一个空行分开
常用的HTTP头信息有
① HTTP OK
这是Web服务器应答的第一行 列出服务器正在运行的HTTP版本号和应答代码 代码 OK 表示请求完成
② MIME_Version
它指示MIME类型的版本
③ content_type 类型
这个头信息非常重要 它指示HTTP体信息的MIME类型 如 content_type text/指示传送的数据是HTML文档
④ content_length 长度值
它指示HTTP体信息的长度(字节)
( ) 关闭连接 当应答结束后 Web浏览器与Web服务器必须断开 以保证其它Web浏览器能够与Web服务器建立连接
二绝败胡 Java实现Web服务器功能的程序设计
根据上述HTTP协议的作用原理 实现GET请求的Web服务器程序的方法如下
( ) 创并拦建ServerSocket类对象 监听端口 这是为了区别于HTTP的标准TCP/IP端口 而取的
( ) 等待 接受客户机连接到端口 得到与客户机连接的socket
( )枯大 创建与socket字相关联的输入流instream和输出流outstream
( ) 从与socket关联的输入流instream中读取一行客户机提交的请求信息 请求信息的格式为 GET 路径/文件名 HTTP/
( ) 从请求信息中获取请求类型 如果请求类型是GET 则从请求信息中获取所访问的HTML文件名 没有HTML文件名时 则以l作为文件名
( ) 如果HTML文件存在 则打开HTML文件 把HTTP头信息和HTML文件内容通过socket传回给Web浏览器 然后关闭文件 否则发送错误信息给Web浏览器
( ) 关闭与相应Web浏览器连接的socket字
下面的程序是根据上述方法编写的 可实现多线程的Web服务器 以保证多个客户机能同时与该Web服务器连接
程序 WebServer java文件
//WebServer java 用JAVA编写Web服务器
import java io *
import *
public class WebServer {
public static void main(String args[]) {
int i= PORT=
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/ OK )
outstream println( MIME_version )
outstream println( Content_Type text/ )
int len=(int)file length()
outstream println( Content_Length +len)
outstream println( )
sendfile(outstream file) //发送文件
outstream flush()
} else { //文件不存在时
String notfound=
Error file not found
outstream println( HTTP/ no found )
outstream println( Content_Type text/ )
outstream println( Content_Length +notfound length()+ )
outstream println( )
outstream println(notfound)
outstream flush()
}
}
long m =
while (m < ) {m ++ } //延时
client close()
} catch (IOException e) {
System out println( Exception +e)
}
}
/* 获取请求类型是否为 GET */
boolean getrequest(String s) {
if (s length()> )
{if (s substring( ) equalsIgnoreCase( GET )) return true
}
return false
}
/* 获取要访问的文件名 */
String getfilename(String s) {
String f=s substring(s indexOf(′ ′)+ )
f=f substring( f indexOf(′ ′))
try {
if (f charAt( )==′/′)
f=f substring( )
} catch ( e) {
System out println( Exception +e)
}
if (f equals( )) f= l
return f
}
/*把指定文件发送给Web浏览器 */
void sendfile(PrintStream outs File file) {
try {
DataInputStream in=new DataInputStream(new FileInputStream(file))
int len=(int)file length()
byte buf[]=new byte[len]
in readFully(buf)
outs write(buf len)
outs flush()
in close()
} catch (Exception e) {
System out println( Error retrieving file )
System exit( )
}
}
}
程序中的ConnectionThread线程子类用来分析一个Web浏览器提交的请求 并将应答信息传回给Web浏览器 其中 getrequest()方法用来检测客户的请求是否为 GET getfilename(s)方法是从客户请求信息s中获取要访问的HTML文件名 sendfile()方法把指定文件内容通过socket传回给Web浏览器
对上述程序的getrequest()方法和相关部分作修改 也能对POST请求进行处理
三 运行实例
为了测试上述程序的正确性 将编译后的WebServer class ConnectionThread class和下面的l文件置于网络的某台主机的同一目录中(如 主机NT SRV的C JWEB目录)
程序 l文件
这是用JAVA写出的WEB服务器主页
年 月 日
首先在该主机上用java命令运行WebServer class
C jweb>java webserver
然后在客户机运行浏览器软件 在URL处输入WebServer程序所属的URL地址(如 ) 就在浏览器窗口显示出指定的HTML文档
注意 不能缺省端口号 如缺省 则运行该主机的正常WEB服务器
lishixin/Article/program/Java/hx/201311/26626
㈡ java服务器开发是做什么和web端的区别是什么
web开发,是开发服务端的,开发好的web程序,打包成war,然后放到web容器中运行,而web容器,是部署在服务器中的。
web的客户端就是浏览器,教你设计页面,学CSS/HTML之类的。
标准的web服务器只具有与客户端浏览器通讯的功能,不能处理业务逻辑请求。
需要编写程序来复制处理客户端的请求。通过组件漏神银来处理客户端的请求,这个组件就是实现特定规范的可以单独部署的软件模块。组件必须通过容器来实现。容器是实现特定规范的程序,负责组件的运行环境和管理组件返宴的生命周期。tomcat,weblogic都提供了瞎庆容器。
web端可以理解为tomcat,并且tomcat中运行着你编写的程序,这个程序称为web应用。
java服务器开发就是通过java语言来编写程序,组合成web应用,将来部署到tomcat中,
编写的这些程序就是组件,用来处理客户端请求的。为了高效还会使用一些框架和技术来配合java程序,比如SpringMVC,struts2,Servlet。
㈢ javaweb开发和web前端开发有什么区别
javaweb是java开发中的一个方向 java有搞安卓的,搞web的,搞嵌入式的,前端开发推荐千锋教育,锋企合作部整合大量企业客户资源,紧抓当下企业需求,将技术和项目完美结合千锋课程体系,力求培养更多优质人才服务企业,不断提升学员竞争力,链接企业用人标准的培训课程及实战项目,让企业招聘用人的技术要求与千锋学员的技术充分对接。
javaweb就是指搞web方向的,javaweb分两块一块是服务器端 叫后端,另一块叫前端,也就是web前端。这都是在远标上学到的。还有前端就是用户能看到的部分,比如淘宝网,qq空间,网页上你能看到的都是web前端做的。后端做的就是为前端的展示业务逻辑功能做处理。
想要了解更多有关web前端开发的相关信息,推荐咨询千锋教育。北京千锋互联科技有限公司,成立于2011年1月,立足于职业教育培训领域,公司现有教育培训、高校服务、企业服务三大业务板块。教育培训业务分为大学生技能培训和职后技能培训;高校服务业务主要提供校企合作全解决方案与定制服务;企业服务业务主要为企业提供专业化综合服务。
㈣ 如何配置java web开发环境
java web开发环境配置方法步骤见下:
1安装JDK,配置好环境变量
2下载好tomcat,不需安装,解压后,运行bin\startup.bat,打开浏览器,localhost:8080,前面加上http://,要能正常出现tomcat的页面证明tomcat已可正常使用。
3运行bin\shutdown.bat,关闭tomcat。
4eclipse解压运行,窗口->首选项->服务器->运行时环境->添加->apache tomcat 7->下一步->选择tomcat的解压目录 ->完成->确定
5这样在eclipse中添加了tomcat
6现在就可开发web程序了,现以打开一个已存在的工程为例
7文件->导入->现有工程到工作空间->选择工程的目录->完成
8工程正常打开,选择web首页文件index.jsp,右键->运行方式->在服务器上运行,会出现配置好的tomcat服务器->确定 ,程序将正常运行。
9默认是在eclipse中显示页面,可改为用IE运行页面,方法如下
窗口->首选项->常规->WEB浏览器->default system web browser
至此配置完成。
㈤ Java web项目开发需要掌握哪些技术
分享作为千锋的Java开发工程师需要掌握的专业技能,大家可以参考一下。
一、熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的JavaAPI,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。
二、熟悉基于JSP和Servlet的JavaWeb开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行JavaWeb项目开发的经验。
三、对Spring的IoC容器和AOP原理有深入了解,熟练的运用Spring框架管理各种Web组件及其依赖关系,熟练的使用Spring进行事务、日志、安全性等的管理,有使用SpringMVC作为表示层技术以及使用Spring提供的持久化支持进行Web项目开发的经验,熟悉Spring对其他框架的整合。
四、熟练的使用Hibernate、MyBatis等ORM框架,熟悉Hibernate和MyBatis的核心API,对Hibernate的关联映射、继承映射、组件映射、缓存机制、事务管理以及性能调优等有深入的理解。
五、熟练的使用HTML、CSS和JavaScript进行Web前端开发,熟悉jQuery和Bootstrap,对Ajax技术在Web项目中的应用有深入理解,有使用前端MVC框架(AngularJS)和JavaScript模板引擎(HandleBars)进行项目开发的经验。
六、熟悉常用的关系型数据库产品(MySQL、Oracle),熟练的使用SQL和PL/SQL进行数据库编程。
七、熟悉面向对象的设计原则,对GoF设计模式和企业应用架构模式有深入的了解和实际开发的相关经验,熟练的使用UML进行面向对象的分析和设计,有TDD(测试驱动开发)和DDD(领域驱动设计)的经验。
八、熟悉Apache、NginX、Tomcat、WildFly、Weblogic等Web服务器和应用服务器的使用,熟悉多种服务器整合、集群和负载均衡的配置。
九、熟练的使用产品原型工具Axure,熟练的使用设计建模工具PowerDesigner和EnterpriseArchitect,熟练的使用Java开发环境Eclipse和IntelliJ,熟练的使用前端开发环境WebStorm,熟练的使用软件版本控制工具SVN和Git,熟练的使用项目构建和管理工具Maven和Gradle。
㈥ 如何搭建java web服务器
1.由于服务器配置比较低综合考虑,选择ubuntu系统进行搭建
并通过XFTP或上述的上传文件方法,上传至apache-tomcat-7.0.69/webapps中