文章目录

客户端服务端通信过程

1、客户端建立连接,向服务端发送请求数据(发送的数据包需要遵守一定的协议)
2、服务端接受客户端发来的数据包,根据具体协议对数据包进行解析,执行相应业务
3、服务端返回给客户端响应数据,响应数据包也需要遵守一定的协议
4、客户端接受服务端返回的响应后,根据协议解析数据包后,获取响应数据,呈现界面

Tomcat 介绍

【介绍】
Tomcat 是一款服务端容器

【Tomcat目录结构】
​​​bin​​​:存放 tomcat 可执行程序
startup.bat 开启程序
startup.sh
shutdown.bat 停止服务
shutdown.sh
​​​conf​​​:存放 tomcat 相关的配置文件
在 server.xml 管理 tomcat 的默认端口号:8080
​​​lib​​​:存放 tomcat 运行时需要的 jar 包
​​​logs​​​:存放 tomcat 运行时生成的日志
​​​webapps​​​:存放已经部署在 tomcat 中的服务端 app
​​​work​​:存放 tomcat 运行时生成的临时文件

【案例1】
使用浏览器访问 docs 项目中的 index.xml 网页
1)启动 tomcat 服务
双击 bin/startup.bat
2)在浏览器通过 url 地址访问 tomcat 中的资源
格式:
​​​ http://ip:port/项目名称/资源路径​​ http://localhost:8080/docs/index.html

【案例2】
使用 comcat 实现简单的下载服务
1)打包项目
2)部署到 tomcat 的 webapp 中
3)重启 tomcat
4)访问下载资源

1、下载安装 apache tomcat即可实现 【案例1】

2、在 webapps 中新建 downloads 文件夹,并放入几个文件
Android开发中服务端需要了解的知识_tomcat

3、重启 tomcat

4、访问 ​​http://127.0.0.1:8080/downloads/Mojito.mp3​​​ 或 ​​http://localhost:8080/downloads/Mojito.mp3​​​Android开发中服务端需要了解的知识_服务端_02
可以点击右侧三个点来下载
Android开发中服务端需要了解的知识_java_03

访问 tomcat 服务器中的动态资源

【JSP介绍】
JPS:Java Server Page 。Java 服务端页面生成技术

JSP 本质就是一个 Java 类。客户端访问 JSP ,Tomcat 将会把该 JSP 转成一个 .java 文件并执行。我们在 JSP 中编写什么文本,.java 文件将会输出这些文本。

【编写一个JSP项目】
1)在 webContent 目录下创建 JSP 文件,在其中编写代码
2)打包服务端项目
3)部署项目
4)启动 tomcat,访问地址

我们按照步骤完成编写一个 JSP 项目
1、打开 Eclipse,新建一个Dynamic project
Android开发中服务端需要了解的知识_java_04
填入项目名称,点击 New Runtime… 按钮选择 apache tomcat 版本和安装路径
Android开发中服务端需要了解的知识_tomcat_05
目录结构
Android开发中服务端需要了解的知识_java_06
​​​src​​​:代码目录
​​​JRE...​​​:JDK目录
​​​Apche...Tomca​​​:所有 jar 包
​​​WebContent​​:网页内容和配置

右键 WebContent 新建一个 jsp 文件
Android开发中服务端需要了解的知识_tomcat_07
Android开发中服务端需要了解的知识_java_08
打开 index.jsp,删掉 html 代码,随便写点什么

Android开发中服务端需要了解的知识_java_09
2、右键 webcontent -> export
Android开发中服务端需要了解的知识_java_10
Android开发中服务端需要了解的知识_tomcat_11
Android开发中服务端需要了解的知识_tomcat_12

3、把刚才输出的文件放到 apache tomcat 项目目录下
Android开发中服务端需要了解的知识_java_13

4、访问
Android开发中服务端需要了解的知识_java_14

Tomcat 会自动解压我们的文件,打开解压后的文件跟 Eclipse 的 webcontent 的结构是一样的
Android开发中服务端需要了解的知识_tomcat_15
看下运行后自动生成的文件
Android开发中服务端需要了解的知识_tomcat_16

JSP 相关知识

【JSP指令】

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>

【普通文本】
JSP 引擎将会把这些普通文本转换成 out.write() 直接输出给客户端

【Java代码片段】

<% java代码 %>

【JSP表达式】

<%= %>

我们修改 index.jsp 的代码:

<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@ page language="java"
contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%
for(int i=0;i<100;i++){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String now = sdf.format(date);

%>
你好<%=i%>,世界<%=now%><br/>
<%
}
%>

Alt+/ 导包快捷键

重复上一节的步骤,Export,重启 tomcat,运行
Android开发中服务端需要了解的知识_tomcat_17

JSP 案例

案例:模拟航空订票系统 查询航班业务
客户端发送请求:http://localhost:8080/app/findFlights.jsp
服务端返回响应:(所有航班数据)
常见响应数据格式:xml/json

新建 Flight 类和 flight_index.jsp
Android开发中服务端需要了解的知识_java_18

Flight

public class Flight {
private int id;
private String number;
private String from;
private String to;
private double price;
private String date;

public Flight(){

}

public Flight(int id, String number, String from, String to, double price, String date) {
super();
this.id = id;
this.number = number;
this.from = from;
this.to = to;
this.price = price;
this.date = date;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}

flight_index.jsp

<%@ page language="java" import="java.util.*,entity.Flight" contentType="text/xml" pageEncoding="utf-8"%><?xml version="1.0" encoding="UTF-8"?>
<%//数据
List<Flight> flights = new ArrayList<Flight>();
flights.add(new Flight(1,"NO.100010","北京","上海",880.0,"2021-7-24"));
flights.add(new Flight(1,"NO.100011","北京","上海",880.0,"2021-7-24"));
flights.add(new Flight(1,"NO.100012","上海","北京",880.0,"2021-7-24"));
flights.add(new Flight(1,"NO.100013","北京","上海",880.0,"2021-7-25"));
flights.add(new Flight(1,"NO.100014","北京","上海",880.0,"2021-7-26"));
flights.add(new Flight(1,"NO.100015","上海","北京",880.0,"2021-7-26"));
flights.add(new Flight(1,"NO.100016","北京","上海",880.0,"2021-7-27"));
flights.add(new Flight(1,"NO.100017","北京","上海",880.0,"2021-7-27"));
flights.add(new Flight(1,"NO.100018","上海","北京",880.0,"2021-7-28"));
flights.add(new Flight(1,"NO.100019","上海","北京",880.0,"2021-7-28"));
flights.add(new Flight(1,"NO.100020","北京","上海",880.0,"2021-7-29"));
//数据查询完毕后,把数据返回给客户端(XML格式)
%>
<flights>
<%for(int i=0;i<flights.size();i++){
Flight f = flights.get(i);
%>
<flight>
<id><%=f.getId() %></id>
<number><%=f.getNumber() %></number>
<from><%=f.getFrom() %></from>
<to><%=f.getTo() %></to>
<price><%=f.getPrice() %></price>
<date><%=f.getDate() %></date>
</flight>
<%} %>
</flights>

重复上一章的打包,部署,运行
Android开发中服务端需要了解的知识_tomcat_19
【发送http请求时如何传递请求参数?】
​​​http://ip:port/app/flight_index.jsp?from=北京&to=上海​

【服务端如何接受请求参数?】

<%
String from = request.getParameter("from");
%>

修改 flight_index.jsp

<%@ page language="java" import="java.util.*,entity.Flight" contentType="text/xml" pageEncoding="utf-8"%><?xml version="1.0" encoding="UTF-8"?>
<%//数据
List<Flight> flights = new ArrayList<Flight>();
flights.add(new Flight(1,"NO.100010","北京","上海",880.0,"2021-7-24"));
......
flights.add(new Flight(1,"NO.100020","北京","上海",880.0,"2021-7-29"));
//数据查询完毕后,把数据返回给客户端(XML格式)
%>
<flights>
<%//获取请求参数
String date = request.getParameter("date");
for(int i=0;i<flights.size();i++){
Flight f = flights.get(i);
if(date!=null&&!date.equals(f.getDate())){
continue;
}
%>
<flight>
<id><%=f.getId() %></id>
<number><%=f.getNumber() %></number>
<from><%=f.getFrom() %></from>
<to><%=f.getTo() %></to>
<price><%=f.getPrice() %></price>
<date><%=f.getDate() %></date>
</flight>
<%} %>
</flights>

重新打包,部署,运行。我们可以后边跟一个参数
Android开发中服务端需要了解的知识_tomcat_20