• 服务器和客户端的简单交互


    服务器和客户端的简单交互


    语言的跨平台


    c/c++的跨平台原理

    对于不同的操作系统,需要不同的编译,生成不同格式的可执行文件。

    img

    java的跨平台原理

    对于不同的操作系统,只需编译一次。编译后生成的是字节码文件,对于操作系统来说,不是可以执行文件。如果要执行,需要在不同的操作系统上装个软件JVM(java虚拟机),而且需要将这个程序打开。当.java文件经过编译以后生成的.class文件需要执行的时候,是需要启动这个JVM程序,然后使得JVM来加载这个.class文件(将这个文件解析并翻译成机器指令)。

    补充:JDK中是带有JRE的(Java Runtime Environment),JRE中包含着JVM。所以下载个JDK就可以运行.class字节码文件了。

    img

    js的跨平台原理

    对于不同的操作系统,不需要编译,只需要在不同的操作系统中打开不同的浏览器,然后浏览器对js文件进行解释,然后使得变成可执行文件(机器指令)。





    客户端vs服务器

    端口

    服务器和客户端本质上都是计算机,只是客户端可能要求更高的显卡等,而服务器要求的是更改的内存。每个服务器会配有多个端口,端口后面会对应着服务器软件,当客户端向服务器的端口发送数据时,由服务器软件监听数据并解析执行代码。如果服务器要将数据传送回客户端,也是通过端口传送。

    所以,如果要搭建服务器环境,需要占用一个端口,然后为这个端口搭建服务器软件。

    部署项目

    客户端可能会向同一个端口中发送多种请求,那么就要求服务器软件创建不同的项目(开发不同的后台,可以使用java代码编写创建),由服务器软件来辨别不同的请求并回应。如果服务器软件压力太大,可以多创建个端口并创建服务器软件,来分担其他的项目。如果服务器的压力太大,那么就再搞一台机器。

    所以,如果选用的语言是java,那么就可以在端口上部署服务器软件Tomcat,用来运行开发人员创建的Java代码。又由于Tomcat软件是由java编写,所以如果需要将这个软件跑起来,那么就需要有JVM来加载(如果有客户端发送来的java代码的请求需要执行,需要先启动JVM,然后再启动Tomcat来寻找并执行开发者相应的java代码,最后由Tomcat发送相应来回应客户端)。

    img

    客户端如何访问服务器软件中的java项目

    以访问tomcat中的项目为例:

    http://IP地址:端口号/项目

    http://10.10.128.49:8080/qq/img

    使用http协议,通过IP地址来寻找到服务器,然后再找到端口号,最后在端口号中选择要执行的项目,在项目中再选择要访问的文件夹,后面还可以加 ? 来添加参数

    如果做服务器的计算机刚好是当前的机器(客户端是自己,服务器也是自己),那么输入自己的IP即可,或者输入:127.0.0.1,或者localhost。完整:http://localhost:8080/) 后面就可以根据webapps文件夹中的已有项目来测试。

    现在在idea中创建的java项目是普通的项目,只能自己自娱自乐,别人是无法通过网页去找到服务器中的这个java项目,所以应该为项目添加web模块(项目右键,选择add framework support,选择web),然后就会出现一个web文件夹,文件夹中就是准备提供给客户端的资源。



    测试

    在web文件夹下创建了一个html文件和一个图片,这就是准备提供给客户端的资源,但是客户端怎么能够访问呢?需要安装服务器软件Tomcat,需要将这些资源部署到Tomcat中,然后Tomcat利用默认的8080端口去监听客户端发来的资源和请求,然后Tomcat就将资源传送出。

    所以下一步应该启动Tomcat,并把项目部署到Tomcat中。在idea中点击add configuration,在其中找到tomcat server(local的),输入地址后,就会自动识别电脑上的tomcat,(这时vs中就已经部署了tomcat,但是tomcat不清楚要管理什么资源),继续点development,选择当前的项目部署到Tomcat中。Tomcat中以后会部署许多的项目,是通过Application context来区分查找的,所以可以将此标识改的精炼些,project1->p1,然后就可以通过/p1来找到相应的资源服务了。

    http://IP地址:端口号/资源路径

    http://127.0.0.1:8080/p1

    使用http协议,通过IP地址找到服务器,通过端口号找到Tomcat,通过资源路径找到资源,现在已经找到了project1项目中的web文件夹,然后再添加/scene.jpg就可以访问到图片了。(首先保证右上角中的tomcat已经打开)

    当资源的文件夹等属性改变后,可以按debug,选择rodeplay重新部署。





    登录页面

    login.html:

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登录title>
    head>
    <body>
    
    <form action="/p1">
        <div>用户名<input name="username">div>
        <div>密码<input name="password">div>
        <button type="submit">登录button>>
    form>
    
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    http://127.0.0.1:8080/p1/login.html
    
    • 1

    这里提交的服务器的地址设置的是p1项目,也可以写全部名称,也可以直接/p1(自动的将/p1拼接到8080后面,因为当前的位置就是8080端口下的项目中的网页文件)。将输入的用户名和密码上传到p1中来,但是p1不会有专门的相应,只是会默认的跳转到p1的index.jsp



    响应登录页面上传的数据

    需要使用servlet技术,需要引用tomcat的库。

    因为idea中已经引用了tomcat,所以直接在idea中引用即可。file->project Structure->modules->dependencies->±>library->tomcat库->ok.这样在external library中就可以找到tomcat库。

    创建一个LoginServlets类

    1,继承HttpServlet,才能处理HTTP请求

    2,使用@WebServlet,说明处理的请求路径

    http://127.0.0.1:8080/p1/login



    LoginServlet

    package com.kevin.servlet;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/login")
    public class LoginServlet extends HttpServlet{
        //处理get请求
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("doGet----");
        }
    
        //处理post请求
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("doPost----");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    html

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登录title>
    head>
    <body>
    
    <form action="/p1/login" method="get">
        <div>用户名<input name="username">div>
        <div>密码<input name="password">div>
        <button type="submit">登录button>>
    form>
    
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    上传的服务器地址是到项目下的login,上传的形式是get

    这样在输入后,后台就会打印doGet----,参数和直接显示在网址上。





    接收并回应

    HttpServletRequest req : 请求:用来获取客户端发来的数据

    HttpServletResponse resp:响应:用来给客户端返回数据

    LoginServlet

    package com.kevin.servlet;
    
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/login")
    public class LoginServlet extends HttpServlet{
        //处理get请求
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           doPost(request,response);
        }
    
        //处理post请求
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
    
            if("123".equals(username)&&"456".equals(password))
            {
                response.getWriter().write("Login Success!!");
            }
            else
            {
                response.getWriter().write("Login Failure!!");
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    html

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登录title>
    head>
    <body>
    
    <form action="/p1/login" method="post">
        <div>用户名<input name="username">div>
        <div>密码<input name="password">div>
        <button type="submit">登录button>>
    form>
    
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    用户名123 密码:456

    页面显示成功

  • 相关阅读:
    Qt多线程http下载器之三:文件下载异常的处理
    我做不到受每个人喜欢
    GoLang接口
    118. 杨辉三角
    JavaScript 全局污染 回调函数
    Linux ubuntu 安装截图工具 flameshot
    数字孪生钢厂开发可视化系统-解决方案
    银行互联网类业务基于分布式存储的架构设计与实施运维分享
    php消息推送
    数仓搭建-DWD层
  • 原文地址:https://blog.csdn.net/qq_51399192/article/details/126187931