当前位置:网站首页>服务器和客户端的简单交互

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

2022-08-11 09:08:00 是小明同学啊

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


语言的跨平台


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>
http://127.0.0.1:8080/p1/login.html

这里提交的服务器的地址设置的是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----");
    }
}

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>

上传的服务器地址是到项目下的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!!");
        }
    }
}

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>

用户名123 密码:456

页面显示成功

原网站

版权声明
本文为[是小明同学啊]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_51399192/article/details/126187931