Web应用程序开发原理

Web应用程序开发原理

C/S架构

客户机/服务器计算模式
客户机和服务器都承担一部分计算
优点:
分担了服务器的一部分压力
缺点:
维护成本高

B/S架构

浏览器/服务器计算模式
浏览器处理简单计算,服务器提供数据支持
优点:
客户端承担一部分计算,维护成本低
缺点:
服务器压力增大,容易崩溃

Web应用程序的组成部分

1.网页

静态网页
客户端动态网页
服务器端动态网页

2.Web服务器

提供数据来源

3.Web浏览器

4.http协议

具备固定格式的字符串
浏览器 --》 http请求协议 --》 服务器 --》 http响应协议 --》 浏览器
1. http请求 是浏览器发数据给服务器   request
2. http响应 服务器回应数据给浏览器   response
服务器只能被动接受浏览器发送的请求,服务器接受到请求之后必定会向浏览器发送响应

http请求

请求行 http方法 请求的URL http版本
请求头
空行
消息体
http请求示例
GET /1010.html HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-Hans-CN,zh-Hans;q=0.5
Cache-Control: no-cache
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.2; Win64; x64; Trident/7.0; rv:11.0) like Gecko
Host: localhost:8088
Connection: Keep-Alive
Cookie: Idea-d1852ee0=19930357-c834-4171-848b-45b0d6568373

http响应

状态行 http版本 响应码/状态码 响应描述/状态描述
响应头
空行
消息体

例子

一个简单的服务器
/**
* @Title: MyServer.java
* @Package com.lovo.myserver.launch
* @Description: TODO(用一句话描述该文件做什么)
* @author Administrator
* @date 2019年12月6日
* @version V1.0
*/
package com.lovo.myserver.launch;

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
  * <p>Title: MyServer</p>
  * <p>Description: </p>
  * @author Administrator
  * @date 2019年12月6日
*/
public class MyServer {
	public static void main(String[] args) {
		InputStream inputStream = null;
		OutputStream outputStream = null;
		try {
			//创建ServerSocket 对象,开启8088端口,监听发送过来的请求
			ServerSocket  serverSocket = new ServerSocket(8088);
			System.out.println("启动服务器......");
			//让服务器循环监听请求
			while (true) {
				//接收请求过来的数据
				Socket socket =  serverSocket.accept();
				//获取输入流
				inputStream = socket.getInputStream();
				//构建一个byte数组,用来装从输入流里面读取出来的数据
				byte[] data = new byte[1024];
				//从输入流中读取数据放入data数组里面
				inputStream.read(data);
				//把byte数组中的二进制数据转换成string类型
				String httpInfo = new String(data);
				System.out.println(httpInfo);
				//获取输出流向浏览器响应数据
				outputStream = socket.getOutputStream();
				//响应普通文本
				//outputStream.write("<h1>请求处理完毕,响应数据</h1>".getBytes());
				//outputStream.flush();
				
				//响应二进制数据(图片、视频、音频)
				FileInputStream imgInput = new FileInputStream("img/main.jpg");
				byte[] by = new byte[1024];
				int len = 0;
				while ((len = imgInput.read(by)) != -1) {
					outputStream.write(by, 0, len);
					outputStream.flush();
				}
				if (imgInput != null) {
					imgInput.close();
				}
				if (outputStream != null) {
					outputStream.close();
				}
				if (inputStream != null) {
					inputStream.close();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值