web基础知识和服务器的开发

web基础知识

浏览器和服务器之间的交互:

  1. 交互模式是:请求-响应。
  2. 客户端先发出请求,服务器根据请求内容发送响应内容。客户端根据响应内容进行显示

请求与响应的格式:

客户端发出请求的格式

  1. 首先服务器的地址、端口、资源地址。 请求行
  2. 请求头
  3. 请求实体

注:客户端向服务器传参,如果将参数放到请求行,即为get方式!如果将参数放到请求实体中,即为post方式!

服务器受到请求内容后发送响应内容

  1. 状态行(200,404,500)
  2. 响应头
  3. 响应实体

服务器如何收到请求内容?

  1. 建立监听。ServerSocket, s.accept()。
  2. 启动一个线程(轻量级的进程),为请求的客户提供服务。
  3. 为了封装客户端提供的请求信息,于是我定义一个对象:HttpServletRequest对象。
  4. 为了封装回送给客户端的响应内容,我们定义一个对象:HttpServietResponse对象。

 根据请求内容调用相应的程序的过程

  1. 我们通过web.xml中定义的url和servlet的关系,找到相应的servlet程序。
  2. 于是我们定义了HttpServlet,并且增加service(HttpServletRequest req,  HttpServletResponse response) 方法
  3. 将response对象中的信息,转译成基于http协议的响应内容。再将这些响应内容通过socket传送给客户端

计网预备知识

协议:

1)应用层 HTTP,FTP,TELNET,SNMP,DNS

2)传输层 TCP,UDP

3)网络层 IP

HTTP协议简介:

用户打开web浏览器(常见的HTTP客服端),输入URL地址,就能接收到远程HTTP服务器端发送过来的网页.

即HTTP遵循请求(Request)/应答(Response)模型。

 HTTP客户端和服务器分别由不同的软件开发商提供,它们都可以用任意的语言,他们共同遵守HTTP协议。

HTTP请求格式分析:

1)方法  URL  协议/版本             eg:POST /hello.jsp HTTP/1.1

2)请求头(Request Header) 

请求头包含许多有关的客户端环境和请求正文的有用信息。eg:请求头可以什么浏览器所用的语言,请求正文的长度等

3)请求正文(Request Content)

请求头和请求正文之间必须存在CRLF(\r\n),与请求头分开。通常post方式的数据存放于此,请求正文中可以包含客户提交的查询字符串信息:

name=test&psw=12

HTTP响应格式分析:

1)HTTP协议版本、状态代码、描述

常用的状态码(应答码)

200 ok

400 Bad Request

404 Not Found

405 Method Not Allowed

2)响应头(eg:服务器类型,日期类型,正文类型,正文长度)

常见类型:

Content-type:text/html;charset=GBK

Content-type:text/plain;charset=GBK

Content-type:application/octet-stream

3)响应正文

返回的HTML页面

/*
 * 服务器启动
 * 1、请求
 * 2、响应
 */
public class Server3 {
	private ServerSocket server;
	public static final String CRLF = "\r\n";
	public static final String BLANK = " ";
	
	public static void main(String[] args) {
		Server3 server = new Server3();
		server.start();
	}
	
	/*
	 如果你的电脑有多块网卡. 那么就可以指定本地IP中的一个
	如果你是单网卡, 那么就无需指定
	也就是说没有指定本地其他Ip的时候,   服务器会把此端口绑定到0.0.0.0上面
	 */
	/*
	 * 启动方法
	 */
	public void start() {
		try {
			server = new ServerSocket(8888);
			this.receive();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
		
		
	}
	/*
	 * 接收客户端发送的信息
	 */
	private void receive() {
		try {
			Socket client = server.accept();
			
			byte[] data = new byte[2048];
			int len = client.getInputStream().read(data);  
			//从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数。
			
			//接收客户端的请求信息
			String requestInfo = new String(data,0,len).trim();
			System.out.println(requestInfo);
			
			//响应
			StringBuilder responseContext = new StringBuilder();  //响应正文
			responseContext.append("<html><head><title>HTTP响应示例</title></head><body>Hello world!</body></html>");
			
			StringBuilder response = new StringBuilder();
			//1)HTTP协议版本 状态代码  描述
			response.append("HTTP/1.1").append(BLANK).append("200").append(BLANK).append("OK").append(CRLF);
			//2)响应头(Response Head)
			response.append("Server:bjsxt Server/0.0.1").append(CRLF);
			response.append("Date:").append(new Date()).append(CRLF);
			response.append("Content-type:text/html;charset=GBK").append(CRLF);
			response.append("Content-Length:").append(responseContext.toString().getBytes().length).append(CRLF); //正文字节长度
			//3)正文之前
			response.append(CRLF);
			//4)正文
			response.append(responseContext);
			
			System.out.println(responseContext);
			
			//输出流
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
			bw.write(response.toString());
			bw.flush();
			bw.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}//监听,等待连接,一旦有client端连接便创建socket实例.
	}
	
	public void stop() {
		
	}

}

 

==================HTML========================

method:请求方式 get/post  

get: 默认方式,数据量小,安全性不高

post:量大,安全性相对高

action:请求的服务器路径

id:编号,前端区分唯一性 ,js中使用

name:名称,后端(服务器)区分唯一性 ,获取值,只要提交数据给后台,必须存在name

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值