Web:全球广域网,也称为万维网(www),能够通过浏览器访问的网站

JavaWeb: 是用 Java技术来解决相关web互联网领域的技术栈。

JavaWeb 技术栈

B/S 架构:

Browser/Server,浏览器/服务器 架构模式,它的特点是,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可。

好处:易于维护升级:服务器端升级后,客户端无需任何部署就可以使用到新的版本。

静态资源:

HTML、CSS、JavaScript、图片等。负责页面展现

动态资源:

Servlet、JSP 等。负责逻辑处理

数据库:

负责存储数据

HTTP协议:

HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

特点:

基于TCP协议:面向连接,安全

基于请求-响应模型的:一次请求对应一次响应

HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。

缺点:多次请求间不能共享数据。

优点:速度快

HTTP-请求数据格式

请求数据分为3部分:

请求行:请求数据的第一行。其中GET表示请求方式,/表示请求资源路径,HTTP/1.1表示协议版本;

请求头:第二行开始,格式为key:value形式;

常见的HTTP 请求头:

Host: 表示请求的主机名;

User-Agent: 浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0 ... Chrome/79,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...) like Gecko;

Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;

Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;

Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。

请求体:POST请求的最后一部分,存放请求参数。

GET请求和 POST请求区别:

GET请求请求参数在请求行中,没有请求体。POST请求请求参数在请求体中;

GET请求请求参数大小有限制,POST没有。

get:

GET / HTTP/1.1

Host: www.itcast.cn

Connection: keep-alive

User-Agent: Mozilla/5.0 Chrome/91.0.4472.106

post:

POST / HTTP/1.1

Host: www.itcast.cn

Connection: keep-alive

Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 Chrome/91.0.4472.106

username=name&password=123456

HTTP-响应数据格式

响应数据分为3部分:

响应行:响应数据的第一行。其中HTTP/1.1表示协议版本,200表示响应状态码,OK表示状态码描述。

状态码:

响应头:第二行开始,格式为key:value形式

常见的HTTP 响应头:

Content-Type:表示该响应内容的类型,例如text/html,image/jpeg;

Content-Length:表示该响应内容的长度(字节数);

Content-Encoding:表示该响应压缩算法,例如gzip;

Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒

响应体: 最后一部分。存放响应数据

例如:

HTTP/1.1 200 OK

Server: Tengine

Content-Type: text/html

Transfer-Encoding: chunked…

<html>

<head>

<title></title>

</head>

<body></body>

</html>

模拟接收和响应

import sun.misc.IOUtils;

import java.io.*;

import java.net.ServerSocket;

import java.net.Socket;

import java.nio.charset.StandardCharsets;

import java.nio.file.Files;

/*

自定义服务器

*/

public class Server {

public static void main(String[] args) throws IOException {

ServerSocket ss = new ServerSocket(8080); // 监听指定端口

System.out.println("server is running...");

while (true){

Socket sock = ss.accept();

System.out.println("connected from " + sock.getRemoteSocketAddress());

Thread t = new Handler(sock);

t.start();

}

}

}

class Handler extends Thread {

Socket sock;

public Handler(Socket sock) {

this.sock = sock;

}

public void run() {

try (InputStream input = this.sock.getInputStream()) {

try (OutputStream output = this.sock.getOutputStream()) {

handle(input, output);

}

} catch (Exception e) {

try {

this.sock.close();

} catch (IOException ioe) {

}

System.out.println("client disconnected.");

}

}

private void handle(InputStream input, OutputStream output) throws IOException {

BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8));

// 读取HTTP请求:

boolean requestOk = false;

String first = reader.readLine();

if (first.startsWith("GET / HTTP/1.")) {

requestOk = true;

}

for (;;) {

String header = reader.readLine();

if (header.isEmpty()) { // 读取到空行时, HTTP Header读取完毕

break;

}

System.out.println(header);

}

System.out.println(requestOk ? "Response OK" : "Response Error");

if (!requestOk) {

// 发送错误响应:

writer.write("HTTP/1.0 404 Not Found\r\n");

writer.write("Content-Length: 0\r\n");

writer.write("\r\n");

writer.flush();

} else {

// 发送成功响应:

//读取html文件,转换为字符串

BufferedReader br = new BufferedReader(new FileReader("http/html/a.html"));

StringBuilder data = new StringBuilder();

String line = null;

while ((line = br.readLine()) != null){

data.append(line);

}

br.close();

int length = data.toString().getBytes(StandardCharsets.UTF_8).length;

writer.write("HTTP/1.1 200 OK\r\n");

writer.write("Connection: keep-alive\r\n");

writer.write("Content-Type: text/html\r\n");

writer.write("Content-Length: " + length + "\r\n");

writer.write("\r\n"); // 空行标识Header和Body的分隔

writer.write(data.toString());

writer.flush();

}

}

}

Web服务器:

封装了很多HTTP的操作:负责解析 HTTP 协议,解析请求数据,并发送响应数据。

看 开源工具专栏/tomcat

servlet

看本专栏的详述

javaWeb大体了解相关推荐

  1. java web 课程设计_关于Javaweb课程设计的心得体会.doc

    关于Javaweb课程设计的心得体会 ----在线测试系统 这次课程设计我做的是章节自测系统, 主要是服务于学生进行阶段性自测和练习.系统分为练习和测试两部分,每一部分又各分若干专题.系统中采用的技术 ...

  2. 以javaweb项目为例,用户在搜索网页域名的过程到网页响应到底经过了什么?

    用户用浏览器访问一个网站的时候背后的过程与步骤是怎样的? 文章目录 1.用户访问网站的流程 1.1 访问流程 1.2 利用DNS协议进行域名解析 1.3 建立tcp协议三次握手过程 1.3.1 简单说 ...

  3. 基于mybatis-jsp-bootstrap-servlet-mysql-maven的Javaweb课程设计--刷题后台管理系统(考试题目管理系统)

    第一章 需求分析 计算机技术没有应用到考试上时,组织一次考试只是要经过五步:人工出题,考生考试,人工阅卷,成绩评估和试卷分析,这是一项十分繁琐和容易出错的工作,教师的工作量非常的大.很明显,传统的考试 ...

  4. JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5

    上一篇博文介绍了注册和登录模块,未看过的人欢迎翻我之前博文~ 接下来就进入登录成功后的主界面,这里主要实现主界面的基础布局和管理员管理模块=w= GitHub地址:https://github.com ...

  5. javaWeb快速开发框架之Play

    本篇希望在大家看过之后,能让大家对play的全貌有一个清晰的认识,如果感兴趣的话再去探究详细的操作步骤.无论是对于play的新手还是play的已经使用者,相信都会带来不同的收获,下面开始吧! 前置知识 ...

  6. JavaWeb技术内幕八:JVM内存管理

    欢迎阅读我的专栏:JavaWeb技术世界 '与其他高级语言不一样,在Java中基本上不会显示地调用分配内存的函数,我们甚至不用关心到底哪些程序指令需要分配内存,哪些不需要分配内存. 我们首先需要从操作 ...

  7. JavaWeb学习:http协议与状态码

    图1 首先,让我们一起回忆表述一下JavaWeb的来龙去脉. 客户端(Broswer)浏览器渲染展现我们要呈现的内容,并向服务器(Server)发送请求,一次只能发送一个请求,tomcat(免费的开放 ...

  8. 复习JavaWeb的小项目书籍信息的增删改查分页功能实现Java面试题Session和Cookie的基础概念生活【记录一个咸鱼大学生三个月的奋进生活】034

    记录一个咸鱼大学生三个月的奋进生活034 JavaWeb的增删改查分页功能实现 前期准备工作(数据库连接类和实体类) 数据库建立 数据库连接类(DBManager) 书籍信息的实体类(Book) 操作 ...

  9. javaWeb——Servlet

    Servlet 系统架构 B/S结构的系统通信原理(没有涉及到Java小程序) 关于WEB服务器软件 实现一个最基本的web应用(这个web应用中没有java小程序) 对于一个动态的web应用来说,一 ...

最新文章

  1. SAP战略中的机器学习
  2. 不喜欢冷漠,喜欢笑容、热情和拥抱
  3. 深度学习时代的图模型,清华发文综述图网络
  4. 信息系统项目管理师论文基础知识
  5. eureka源码:开启eureka server
  6. python cms tornado_都2020年了,python的tornado框架还有用武之力么?
  7. Chrome浏览器中的【开发者工具】---只对当前窗口有效---每个窗口都可以打开一个【开发者工具】
  8. Springmvc Get请求Tomcat、WebLogic中文乱码问题
  9. JavaScript cookie js cookie设置
  10. You have an error in your SQL syntax.....for the right syntax to use near 'describe
  11. java档案管理系统_基于JAVA的简单档案管理系统
  12. 总结:Linux目录之/dev
  13. chrome插件之——Enhanced Github和Octotree
  14. php like 中文,punycode和中文转换 phpThe Twitter-clone/twitter-like sites collection
  15. java设计篮球积分程序_java毕业设计_基于java的篮球赛事管理系统
  16. 华为Mate40Pro和华为Mate40Pro+ 哪个好
  17. U-BOOT 下载 GitHub
  18. 移动端滑动事件---实战笔记
  19. 遗传算法(Genetic Algorithm,GA)
  20. [智能硬件]是什么?智能硬件应用领域包括哪些?

热门文章

  1. DS1302时钟与LCD1602液晶显示
  2. speedoffice(Excel)表格如何设置加密保护?
  3. 安卓ASO优化:OPPO应用市场优化,oppo应用市场的aso
  4. easy_crypto
  5. 记菜鸟的一次IBM笔试加两轮面试 2016实习
  6. 【前端】主流浏览器,URL,URI
  7. EndNote论文文献相关规则
  8. 电脑设置不自动息屏不自动睡眠的多种方法
  9. 如何知道程序崩溃原因?
  10. vector的resize函数和reserve函数