Socket
套接字,本质是Java中的一个用于网络通讯
的类封装了ip地址、端口号和connext方法
Socket编程基本架构:
~*服务端
ServerSocket ss = new ServerSocket(port); //port:端口号
Socket socket = ss.accept(); //接收客户端的连接请求
socket.getOutputStream();
socket.getInputStream();
~*客户端
String ip = "ip地址";
int port = 服务端port;
Socket socket = new Socket(ip,port);
socket.getOutputStream();
socket.getInputStream();
~*同一个服务器端接收多个客户端发送的请求:*
while(true){
Socket socket = ss.accept();
... }
~*同一个服务器端并发处理多个客户端发送的请求:*
while(true){
Socket socket = ss.accept();
new WorkThread(socket).start();
}
class WorkThread extend Thread{
private Socket socket;
public WorkThread(Socket socket){
this.socket = socket;
}
public void run(){
socket.getInputStream();
socket.getOutStream();
socket.close();
}}
JSP (java服务端页面生成技术)
- JSP本质:是一个java类
- 运行原理:
- 客户端发送http请求访问一张jsp、服务端将会根据jsp生成一个java类、把客户端的请求交给该类,执行生命周期方法、
- 编写JSP:
- 创建动态的web项目指定(Tomcat)、在WebContent目录下创建jsp文件、在jsp文件中编写文本、打包(项目右键export)、部署(把war文件粘贴到tomcat/webapps目录下即可)、重启Tomcat、访问(http:127.0.0.1:8080/…)
JSP文件组成部分:
- jsp指令:<%@ page language=”java” contentType=”text/html; charset=utf-8”pageEncoding=”utf-8”%>
- 普通文本:JSP将会把页面中的普通文本翻译成:
out.write(“Hello”);
out.write(“World”);
out.write(“!”); - java代码片段:JSP中允许我们编写Java代码。
<% int i=0; %>
这些Java源代码会直接搬到.java
源文件中。 - jsp表达式:<%=now%>
在普通文本中的任意一个位置输出
Java表达式的值。
HTTP协议(超文本传输控制协议)
定义了客户端与服务端的通讯过程及数据交互的格式;
通讯过程:HTTP协议是一款基于短连接的协议,基于HTTP的请求时无状态的,因此有时需要做HTTP的状态管理
数据包的格式
·请求数据包(请求行、若干消息头、请求实体)
·响应数据包(状态行、若干消息头、响应实体)
GET与POST请求的区别
·请求数据包中的参数存放的位置
GET:请求资源路径后面?拼接
POST:请求数据包实体部分
·安全性(GET:相对不安全 POST:相对安全)
·是否适合传递中文(GET:不适合 POST:适合)
·是否适合大数据量数据提交(GET:不适合 POST:适合)
Android应用如何发送HTTP GET请求
·~~1.创建URL(统一资源定位符)对象.指定目标地址
·~~2.通过URL对象开启连接.获取HttpURLConnection conn = (HttpURLConnection) url.openConnection();、
·~~3.设置请求方式为GET、
·~~4.调用conn.getInputStream()获取输入流,读取服务端返回的数据、
·~~5.处理输入流,获取服务端返回的字符串
Android应用如何发送HTTP POST请求
·~~1.创建URL对象
·~~2.开启连接openConnection()
·~~3.设置请求方式POST
·~~4.对conn进行发送post请求的基本设置
conn.setDoInput(true)
conn.setDoOutput(true)
//设置消息头
conn.setRequestProperty(“Content-Type”,”application/x-www-form-urlencoded”);
·~~5.向服务端传递参数(写数据)
os=conn.getOutputStream();
String param=”d=2016-04-04&number=No.100011”;
os.write(param.getBytes(“utf-8”));
·~~6.发送请求并且获取输入流
解析输入流(响应)
XML描述用户:
<user>
<name>zs</name>
<age>23</age>
<gender>m</gender>
<aihao>吃</aihao>
<aihao>喝</aihao>
<aihao>玩</aihao>
<aihao>乐</aihao>
<school>
<name>tarena</name>
<loc>bj</loc>
</school>
</user>
JSON描述一个用户:
String str={
"name":"zs",
"age":23,
"gender":"m",
"aihao":["c","h","w","l"],
"school":{
"name":"tarena",
"loc":"bj"
}
};
·JSON是一款轻量级的数据交换格式
·android如何解析JSON字符串
解析JSONObject:
JSONBObject obj = new JSONBObject(str);
HTTP的状态管理
基于HTTP协议的请求是无状态的-即短连接。
如何实现HTTP的状态管理?
A)Cookie机制(把涉及到的数据保存到客户端)
执行原理:
1.客户端向服务端发送http请求,服务端返回个客户端响应数据,并在响应数据中携带cookie信息(Set-Cookie:…)
2.客户端接收响应数据包,解析响应,获取cookie信息并保存
3.在客户端发送后续请求时,需要在请求数据包中携带cookie信息
4.服务端接收请求,并且解析请求数据包中的cookie信息,执行后续业务
Cookie的限制:不能存储中文、不能存储大数据量数据、安全性低。
B)Session机制(把涉及到的数据保存到服务端)
实现原理:
1.客户端发送http请求,服务端把需要保存的数据保存在session对象中,并且把JSID以Cookie的方式传递给客户端
2.客户端接收服务端响应数据包,并且把Cookie保存在客户端中
3.客户端发送请求后,需要在请求数据包中以cookie的形式传递JSESSIONID
XML解析
DOM解析:
- 解析方式~将整篇XML文档装到内存当中,形成树形结构。可以使用DOM相关的API进行增删改查
- 解析XML文档:
- SAXReader
SAX解析:
PULL解析:
- 解析方式~使用事件驱动的方式解析XML文档,不会将整篇文档都装入内存
- 解析XML文档:
- 1.创建Xmlpullparser解析器
- 2.setInput()
- 3.驱动事件
不断向后驱动事件:eventType=parser.next();