JavaWeb之服务器基础
Posted qfdsj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb之服务器基础相关的知识,希望对你有一定的参考价值。
本章内容:
Web项目简介
主流服务器介绍
Tomcat的安装和配置
自定义Web服务器
什么B/S和C/S结构?
B/S 浏览器/服务器
服务器一般是性能强大PC或工作站,安装应用程序服务器软件,如:Tomcat、JBoss,和DBMS如:mysql、Oracle等。
浏览器去访问服务器,不需要安装客户端软件,如:网银、淘宝。
优点:软件安装服务器端,省去客户端更新、维护时间,目前管理系统一般是BS的。
缺点:服务器压力比较大,浏览器不能呈现太复杂的特效。
JavaWEB项目都属于BS结构程序。
C/S 客户端/服务器
需要安装客户端软件,如:QQ、微信、网游。
优点:客户端分担大量工作,可以呈现复杂特效。
缺点:更新和维护比较麻烦。
主流Web服务器简介
Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问。开发Java Web应用所采用的服务器主要是与JSP/Servlet兼容的Web服务器,比较常用的有Tomcat、Resin、JBoss、WebSphere 和 WebLogic 等
Tomcat 服务器
目前最为流行的Tomcat服务器是Apache-Jarkarta开源项目中的一个子项目,是一个小型、轻量级的支持JSP和Servlet 技术的Web服务器,也是初学者学习开发JSP应用的首选。
Resin 服务器
Resin是Caucho公司的产品,是一个非常流行的支持Servlet和JSP的服务器,速度非常快。Resin本身包含了一个支持html的Web服务器,这使它不仅可以显示动态内容,而且显示静态内容的能力也毫不逊色,因此许多网站都是使用Resin服务器构建
JBoss服务器
JBoss是一个种遵从JavaEE规范的、开放源代码的、纯Java的EJB服务器,对于J2EE有很好的支持。JBoss采用JML API实现软件模块的集成与管理,其核心服务又是提供EJB服务器,不包含Servlet和JSP的Web容器,不过它可以和Tomcat完美结合
WebSphere 服务器
WebSphere是IBM公司的产品,可进一步细分为 WebSphere Performance Pack、Cache Manager 和WebSphere Application Server等系列,其中WebSphere Application Server 是基于Java 的应用环境,可以运行于 Sun Solaris、Windows NT 等多种操作系统平台,用于建立、部署和管理Internet和Intranet Web应用程序。
WebLogic 服务器
WebLogic 是BEA公司的产品(现在已经被Oracle收购),可进一步细分为 WebLogic Server、WebLogic Enterprise 和 WebLogic Portal 等系列,其中 WebLogic Server 的功能特别强大。WebLogic 支持企业级的、多层次的和完全分布式的Web应用,并且服务器的配置简单、界面友好。对于那些正在寻求能够提供Java平台所拥有的一切应用服务器的用户来说,WebLogic是一个十分理想的选择
Tomcat的安装和配置
0、安装JDK
1、配置JAVA_HOME
JAVA_HOME的值为JDK安装目录
2、下载Tomcat
3、配置环境变量
系统变量添加:
CATALINA_HOME 值: Tomcat安装路径
在Path添加: ;%CATALINA_HOME %\bin;
4、测试,打开cmd,输入startup
打开浏览器输入:http://localhost:8080,出现类似下面的页面
Tomcat目录介绍
bin 命令执行文件
conf 配置文件目录
server.xml 核心配置,如:端口、连接池
tomcat-user.xml 用户配置
web.xml web请求配置
lib tomcat运行需要的jar包
logs 日志目录
webapps web项目部署目录
work 存放项目中的java字节码文件
Tomcat和Eclipse的配置
1、打开Server面板
Window > Show View > Other > Server > Servers
2、双击create new server
选择服务器版本,下一步
设置Tomcat安装目录
3、双击创建的服务器,设置项目部署路径
4、创建Web项目
new > dynamic web project
下一步到最后,勾中复选框,点击完成
5、在WebContent新建HTML页面,右键点击run as server运行。
Web项目的目录介绍:
src Java源代码
build 字节码目录
WebContent 网页内容(JSP、HTML、JS、CSS、图片)
META-INF 元信息
WEB-INF
web.xml 项目重要组件配置文件
lib 项目需要的jar包(拷贝后会自动导入项目)
Web服务器的原理
我们将网站部署到Web服务器上,用户通过浏览器就可以访问服务器上的页面,这个过程是如何实现的呢?
Web服务器都是基于HTTP协议的,当浏览器访问页面时,首先会发送HTTP的请求头给服务器,服务器接受请求后会在web项目的目录中查找浏览器需要的页面文件,然后服务器依次发送响应状态和响应头给浏览器,最后发送网页的HTML代码给浏览器,浏览器接受服务器的数据后会解析HTML文件并显示出来。
下面的案例是通过Socket模拟Web服务器,实现浏览器访问服务器上的页面。
/**
* 自定义Web服务器
* @author chenheng
*
*/
public class MyTomcat {
private static final int PORT = 8888;
private ExecutorService threadPool = Executors.newFixedThreadPool(10); //创建线程池
/**
* 启动服务器
*/
public void start(){
System.out.println("服务器启动了");
try {
//创建服务器Socket,监听8888端口
ServerSocket server = new ServerSocket(PORT);
while(true){
//获得客户端的连接Socket
Socket socket = server.accept();
//启动线程对客户端进行服务
threadPool.execute(new ServiceThread(socket));
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new MyTomcat().start();
}
}
/**
* 为客户端服务的线程
* @author chenheng
*
*/
public class ServiceThread implements Runnable{
public static final String DIR = "C:/java_code/web/";
private Socket socket = null; // 客户端连接
public ServiceThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
//获得客户端的输入流
try(BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream()))){
//读取客户端的请求信息
String line = br.readLine();
//截取出请求头中客户请求的网页地址
String url = line.split(" ")[1];
System.out.println("url:"+url);
if(!url.endsWith(".html")){
return;
}
//在服务器的磁盘上读取该页面文件的内容
BufferedReader br2 = new BufferedReader(
new InputStreamReader(new FileInputStream(DIR+url)));
StringBuilder strb2 = new StringBuilder();
while((line = br2.readLine()) != null){
strb2.append(line);
}
br2.close();
System.out.println("HTML:"+strb2.toString());
//获得客户端的输出流
OutputStream out = socket.getOutputStream();
//定义响应状态
String status = "HTTP/1.1 200 OK\r\n";
byte[] b_status = status.getBytes("UTF-8");
//发送响应状态
out.write(b_status, 0, b_status.length);
//将HTML正文转为字节
byte[] html = strb2.toString().getBytes("UTF-8");
//定义响应头
String response_headers = "Content-Type:text/html;charset=utf-8\r\n"
+ "Content-Length:"+html.length+"\r\n";
byte[] headers = response_headers.getBytes("UTF-8");
//发送响应头
out.write(headers);
//发送字节作为响应头和正文的分隔
out.write(new byte[]{13,10},0,2);
//发送正文
out.write(html,0,html.length);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上是关于JavaWeb之服务器基础的主要内容,如果未能解决你的问题,请参考以下文章