Tomcat

服务端

  • 自定义 S

  • Tomcat服务器 S:Java后台开发

客户端

  • 自定义 C

  • 浏览器 B

解压一个tomcat的安装包,狂神用的9.0.24,我找了一个9.0.52

网址https://tomcat.apache.org/download-90.cgi

image-20210907112208133

image-20210907112042353

这是用java写的,点开lib目录全是jar包

image-20210907112819304

bin目录下面找到startup和shutdown,bat是Windows下的执行文件,sh是linux下的

image-20210907112915077

启动

image-20210907113145927

现在可以通过浏览器访问localhost:8080

image-20210907114839491

把tomcat关掉,服务端就崩了,刷新一下localhost也不好使了

image-20210907114950887

安装包目录下面有个webapps目录,web应用

image-20210907115135950

有个root

image-20210907115153166

就是刚才那个默认网页,可以修改其中的index.jsp

image-20210907115444705

可以访问webapps的其他项目,比如docs

image-20210907115746902

我加了一个ayuan项目,里面有个hello.txt文件

image-20210907115927151

image-20210907120244389


乱码问题

image-20210907120346110

这东西叫日志输出

在conf的日志配置里面

image-20210907120514402

打开,把这个UTF-8改成GBK,Windows默认GBK

image-20210907120713015

注意别改错了,很多个

现在把程序打开,把8080端口占上

或者是把tomcat打开,把程序打开

就报错了

image-20210907121604242

所以同一个协议,端口不能冲突

1.7 UDP

发短信:不用连接,但需要地方地址!

涉及的类

image-20210907160935556

image-20210907160947783

用DatagramSocket去接

image-20210907161043466

发送消息

发送端

image-20210907162347272

 package com.yuan.lesson03;
 
 import java.io.IOException;
 import java.net.*;
 
 //不需要连接服务器
 public class UdpClientDemo01 {
     public static void main(String[] args) throws IOException {
         //1. 建立一个Socket通信
         DatagramSocket socket = new DatagramSocket();
         //2. 建个包
         String msg="你好啊,服务器";
         //发送给谁
         InetAddress localhost = InetAddress.getByName("localhost");
         int port=9090;
 
         //数据,数据的长度起始,发送给谁
         DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);
 
         //3. 发送包
         socket.send(packet);
         //4. 关闭流
         socket.close();
    }
 }

直接运行找不到接的不会报错

接收端

image-20210907163703893

 package com.yuan.lesson03;
 
 import java.io.IOException;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.SocketException;
 
 //还是要等待客户端连接!手机帮你监听,收短信
 public class UdpServerDemo01 {
     public static void main(String[] args) throws IOException {
         //开放端口
         DatagramSocket socket = new DatagramSocket(9090);
         //接收数据包
         byte[] buffer = new byte[1024];
         DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
 
         socket.receive(packet);//阻塞接收
         System.out.println(new String(packet.getData()));
         System.out.println(packet.getAddress().getHostAddress());
 
         socket.close();
    }
 }

输出的内容就是让你看看成功了,实际上接收到东西接收端就自动停了

image-20210907164020359

咨询

xxx,你好

循环发送

 package com.yuan.chat;
 
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.*;
 
 public class UdpSenderDemo01 {
     public static void main(String[] args) throws IOException {
         DatagramSocket socket = new DatagramSocket(8888);
         
         //准备数据:控制台读取 System.in
         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
         while (true) {
             String data=reader.readLine();
             byte[] datas=data.getBytes();
             DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",6666));
 
             socket.send(packet);
             if (data.equals("bye")){
                 break;
            }
        }
         socket.close();
    }
 }

循环接收

 package com.yuan.chat;
 
 import java.io.IOException;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.SocketException;
 
 public class UdpReceiveDemo01 {
     public static void main(String[] args) throws Exception {
         DatagramSocket socket = new DatagramSocket(6666);
 
         while (true) {
             //准备接收包裹
             byte[] container=new byte[1024];
             DatagramPacket packet = new DatagramPacket(container,0,container.length);
             socket.receive(packet);//阻塞式接收包裹
             //断开连接 bye
             byte[] data = packet.getData();
             String receiveData=new String(data,0, data.length);
 
             System.out.println(receiveData);
 
             if (receiveData.equals("bye")){
                 break;
            }
 
 
        }
 
 
         socket.close();
    }
 }

运行的时候发现有一些问题,发送方发送bye后自动结束,但接收方接收到bye后无法结束

image-20210907181425375

因为接收方的判定方式不对,byte[1024]后面为空的部分也参与了比较,所以永远不会等于bye

解决方法: if (receiveData.equals("bye"))中间加个.trim(),去掉字符串两边多余的空格即可

image-20210907180935190

image-20210907180949330


两个人都可以是发送方和接收方!:多线程

这个等学完多线程再回来做


1.8 URL

https://www.baidu.com/

统一资源定位符:定位资源的,定位互联网上的某个资源

DNS域名解析:www.baidu.com解析成一个ip:xxx.xxx.xxx.xxx,本质还是个ip,域名只是为了好记,映射的过程叫DNS域名解析


 协议://ip地址:端口号/项目名/资源

五部分组成,可以少,但不能多

idea中URL的类

image-20210909153144483

URL下载网上的资源

我在tomcat的web应用目录里创建了一个ayuan,hello.txt

image-20210909154255950

现在有真实地址了

然后把tomcat开起来

在浏览器地址栏

image-20210909160007594

没有资源,因为没有默认的index.jsp

image-20210909160100568

通过URL下载这个文件

image-20210909160825870

从网上下

打开一首歌检查元素,提一个URL

image-20210909161852600

image-20210909161923745

成功

 来源:b站狂神

posted on 2021-09-09 16:22  托马斯源  阅读(160)  评论(0编辑  收藏  举报