Tomcat
(1)概念
Tomcat用于对外提供web服务的服务器;
(2)目录结构
结构及用途
文件夹 | 说明 |
---|---|
bin | 启动和关闭tomcat的批量配置文件 |
conf | 存放tomcat的配置文件 server.xml:用于配置server的相关信息,比如tomcat动端口,配置host,配置Context即Web应用。 web.xml:用于配置与Web应用(Web应用相当于一个Web站点)。 tomcat-user.xml:用于用户配置tomcat的用户密码和权限。 |
lib | 存放jar包 |
logs | 存放日志文件(对调试程序非常有用) |
webapps | 用于放置web站点(发布web) |
work | 存放JSP被访问后对应的server文件和class文件 |
(3)配置
- 用于配置默认的首页
<!-- WEB-INF 的web.xml文件中-->
<welcome-file-list>
<welcome-file>GET.html</welcome-file>
</welcome-file-list>
<welcome-file-list>
<welcome-file>MainFrame</welcome-file>
</welcome-file-list> //不需要加“/”
- 管理虚拟目录
<!—conf 的server.xml 文件中进行配置-->
<Context path="/web2" docBase="f:\\web2"/>
注:需要重启tomcat才能生效。且会覆盖之前默认的路径。
- 自定义主机名
注:DNS访问原理:
1)先在C:\Windows\System32\drivers\etc中查找hosts中的IP地址,如果找不到,则进行网络适配器中DNS地址中继续寻找ip地址。若在找不到则报错。
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" />
- 设置默认主机
在server.xml中将engine中的defaultHost=”localhost”进行更改。
<Engine name="Catalina" defaultHost="localhost">
(4)tomcat server 框架
Socket
概念
物理层:传输比特流———–传输比特数据
数据链路层(交换机):—–帧数据(MAC地址(网卡地址,全球唯一))
网络层(路由器):————–数据包
传输层:———-传输协议,端口号(段数据)(TCP/IP)/Socket(对TCP协议的封装)
会话层:——–建立数据传输的通道
表示层:——–对接收数据进行解析和加密
应用层:——— Http
网络通讯要素
1.IP(网络地址):(127.0.0.1,用于访问本地地址)
2.端口号:用于标示进程应用的传输地址(0~65535,其中0~1024为系统应用保留端口)
3.传输协议:UDP,TCP
传输协议
UDP:用户数据报协议,将数据及源和目的封装成数据包(不需要建立连接,每个数据<64K,速度快,不可靠)
TCP:传输控制协议,建立连接,网络必须走IP地址。
InetAddress
互联网协议地址对象,没有构造函数,故只能通过静态方法获取InetAddress实例。
常用方法:
ip = InetAddress.getLocalHost(); //获取本地Ip地址对象
ip.getHostAddress(); //获取本机IP地址
ip.getHostName(); //获取本机名字
UDP协议
使用UPD协议,数据传输的两端称为 “接收端”和“发送端”。
- 接收端
@Test
public void UDPRecvice() throws IOException {
System.out.println("UDP Receive running");
//创建UDP Socket,并监听8888端口
DatagramSocket socket = new DatagramSocket(8888);
byte[] a = new byte[1024];
DatagramPacket packet = new DatagramPacket(a, a.length);
//接收数据
socket.receive(packet);
String ip = packet.getAddress().getHostAddress();
Integer port = packet.getPort();
String data = new String(packet.getData(), 0, packet.getLength());
System.out.println("ip=" + ip + ":" + port);
System.out.println("receive:" + data);
}
- 发送端
/**
* UDP 发送端
*/
@Test
public void UDPSend() throws IOException {
System.out.println("UDP Send running");
//创建UDP Socket服务
DatagramSocket datagramSocket =
new DatagramSocket(10000);
byte[] a = "Hello World!".getBytes();
//创建数据包,并设置发送的端口8888
DatagramPacket datagramPacket =
new DatagramPacket(a, a.length, InetAddress.getByName("localhost"), 8888);
//发送数据
datagramSocket.send(datagramPacket);
//关闭Socket
datagramSocket.close();
System.out.println("UDP Send Over");
}
TCP协议
使用TCP协议,数据传输的两端称为“客户端”和“服务端”。
- 服务端
/**
* TCP 服务端
*/
@Test
public void TCPServer() throws IOException {
System.out.println("TCP Server running");
//创建Socket服务
ServerSocket serverSocket = new ServerSocket(8888);
//通过ServerSocket获取Socket,监听8888端口
Socket socket = serverSocket.accept();
//从客户端获取数据(获取InputStream)
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(socket.getInputStream()));
String string = null;
while ((string = bufferedReader.readLine()) != null) {
//输出客户端传来的数据
System.out.println(string);
//同时返回数据(全部大写)
}
bufferedReader.close();
}
- 客户端
public static void main(String[] a) throws IOException {
//监听本机 8888端口
Socket socket = new Socket(InetAddress.getByName("localhost"), 8888);
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(System.in));
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
String string = null;
while ((string = bufferedReader.readLine()) != null) {
printWriter.println(string);
}
socket.close();
}
UDP和TCP的区别
TCP | UDP |
---|---|
是否连接 | 面向连接 |
传输可靠性 | 可靠的 |
应用场合 | 传输大量的数据 |
速度 | 慢 |
HTTP
概念
HTTP,超文本链接,是客户端和服务端之间请求和响应的一种标准。
结构
- http请求
请求行
应答消息头
应答体 http响应
状态行
location:http://www.baidu.com //定位到哪里
消息头
Refered: 1;url=http://www.sina.com //1s后自动跳转到指定的地址。
response.setHeader(“refresh”, “3;http://www.baidu.com“);
Content-Disposition: attachment;filename=a.jpg //文件下载
Set-Cookie:
Express:-1 //告诉浏览器如何进行缓存- 文件下载
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
//PrintWriter out = response.getWriter();
//进行下载操作
response.setHeader("Content-Disposition", "attachment;filename=a.jpg");
String path = this.getServletContext().getRealPath("/image/a.jpg");
System.out.println("path="+path);
FileInputStream fileInpoutStream = new FileInputStream(path);
byte [] by = new byte[1024];
int len = 0;
OutputStream outputStream = response.getOutputStream();
while( (len = fileInpoutStream.read(by)) != -1)
{
outputStream.write(by, 0, len);
}
fileInpoutStream.close();
outputStream.close();
}
URL
概念
统一资源定位符,可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
URL
- URL
类URL代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
URL url = new URL("http://172.21.66.210:8080/myWeb/baidu.htm");
InputStream myInputStream = url.openStream();
- URLConnection
抽象类URLConnection是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。
URLConnection connection = url.openConnection();
InputStream myInputStream = connection.getInputStream();
注:打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。此方法是下面方法的缩写: openConnection().getInputStream()
URI
URI:统一资源标识符,表示请求服务器的路径。
URL和URI
URI属于父类,而URL属于URI的子类,URL是URI的子集。
URL格式:
1.协议(服务方式);
2.存有资源的主机IP地址(有时包括端口号);
3.主机资源的具体地址,如目录和文件名等。
URI格式:
1.访问资源的命名机制;
2.存放资源的主机名;
3.资源自身的名称,由路径表示,着重强调资源。
TCP/IP、HTTP、Socket的区别
(1)TCP/IP:是传输层协议,主要解决数据如何在网络中传输。
(2)HTTP:是应用层协议,主要解决如何包装数据
(3)Socket:是对TCP/IP协议的封装和应用(程序员层面上)
注:Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象