JavaWeb 速通Servlet(请求转发和请求重定向)

news2024/11/26 13:56:27

目录

一、HttpServletRequest

        1.简介 : 

        2.常用方法 : 

            1° getRequestURI() : 

            2° getRequestURL() :

            3° getRemoteHost() : 

            4° getHeader(String header) : 

            5° getParameter(name) : 

            6° getParameterValues(name) : 

            7° getMethod() :

            8° setAttribute(key, value) : 

            9° getAttribute(key) : 

            10° getRequestDispatcher() :

        3.获取表单数据的演示 : 

        4.使用细节 : 

二、请求转发

        1.基本介绍 : 

        2.应用实例 : 

        3.请求转发细节 : 

三、HttpServletResponse

        1.基本介绍 : 

        2.常用方法 : 

        3.乱码问题的解决办法 : 

四、请求重定向

        1.基本介绍 : 

        2.应用实例 : 

        3.使用细节 : 

五、Servlet(下)总结


一、HttpServletRequest

        1.简介 : 

        HttpServletRequest对象代表客户端的请求,当客户端 / 浏览器通过 HTTP 协议访问服务器时, HTTP请求头中的所有信息都封装在这个对象中
        通过HttpServletRequest对象来调用响应的API,即可获取来自客户端的请求信息。
        HttpServletRequest接口的类图如下 : 

        2.常用方法 : 

            1° getRequestURI() : 

                获取请求的统一资源标识符(资源路径);eg : /Servlet_Demo/countServlet

            2° getRequestURL() :

                获取请求的统一资源定位符(绝对路径);eg : http://localhost:8080/Servlet_Demo/countServlet
                PS:URL是URI的一个子集(更具体)。

            3° getRemoteHost() : 

                获取客户端的主机名

            4° getHeader(String header) : 

                获取请求头

            5° getParameter(name) : 

                获取请求的参数;(name可以是text,password,radio,select或textarea的name属性值)

            6° getParameterValues(name) : 

                获取请求的参数(多个值);eg : checkbox返回的数组

            7° getMethod() :

                获取请求的方式;eg : GET, POST, etc.

            8° setAttribute(key, value) : 

                设置域数据

            9° getAttribute(key) : 

                获取域数据

            10° getRequestDispatcher() :

                获取请求转发对象(实现“请求转发”的核心对象)

        3.获取表单数据的演示 : 

                静态页面registerEX.html如下 : 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Register</title>
    <style>
        table,tr,td {
            border:2px solid cornflowerblue;
            border-collapse: collapse;
            margin-left:auto;
            margin-right:auto;
            /*padding: 10px;*/
        }
        #tr_1 {
            text-align: center;
        }
    </style>
</head>
<body>
<form action="http://localhost:8080/Servlet_Demo/httpServletRequestMethods" method="post">
<table>
    <tr>
        <th colspan="2">User Register</th>
    </tr>
    <tr>
        <td>username:</td>
        <td><input type="text" name="username"/></td>
    </tr>
    <tr>
        <td>password:</td>
        <td><input type="password" name="password"/></td>
    </tr>
    <tr>
        <td>Choose your favorite fruit:</td>
        <td><input type="checkbox" name="fruit" value="apple"/>Apple<br/>
            <input type="checkbox" name="fruit" value="strawberry"/>Strawberry<br/>
            <input type="checkbox" name="fruit" value="grape"/>Grape</td>
    </tr>
    <tr id="tr_1">
        <td><input type="submit" value="register"/></td>
        <td><input type="reset" value="reset"/></td>
    </tr>
</table>
</form>
</body>
</html>

                页面效果如下图所示 : 

                HttpServletRequestMethods类代码如下 : 

package down;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

/**
    (1)若重写后的doPost方法中没有做任何处理,是默认的super.doPost(req, resp);
        这种情况下,浏览器会报405状态码(方法不允许)
    (2)HTTP请求的内容主要分为两大类 ———— 请求头和请求体(也叫请求参数)
 */

//通过注解方式配置url
@WebServlet(urlPatterns = {"/httpServletRequestMethods"})
public class HttpServletRequestMethods extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取请求的统一资源标识符URI
        String requestURI = req.getRequestURI();
        System.out.println("URI = " + requestURI);

        //2.获取请求的统一资源定位符URL
        //PS:URL是URI的一个子集(更具体)。
        StringBuffer requestURL = req.getRequestURL();
        System.out.println(("URL = " + requestURL));

        //3.获取客户端的主机地址
        String remoteHost = req.getRemoteHost();
        System.out.println("Host's IP = " + remoteHost);
            //获取客户端的IP地址
        String remoteAddr = req.getRemoteAddr();
        System.out.println("Addr = " + remoteAddr);

        //4.获取请求头
            //客户端的主机名(IP + 端口)
        String host = req.getHeader("Host");
        System.out.println("Host = " + host);
            //请求的发起地址
        String referer = req.getHeader("Referer");
        System.out.println("Referer = " + referer);
            //请求的用户信息
        String userAgent = req.getHeader("User-Agent");
        System.out.println("User-Agent = " + userAgent);
        System.out.println("Browser = " + userAgent.split(" ")[userAgent.split(" ").length - 1]);

/*======================================获取表单数据======================================*/
        //5.获取请求的参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println("text = " + username);
        System.out.println("password = " + password);

        //6.获取请求的参数(多个值)
        String[] fruits = req.getParameterValues("fruit");
        for (String fruit : fruits) {
            System.out.println("The checkbox elements you choose:" + fruit);
        }

        //7.获取请求的方式(GET POST etc)
        String method = req.getMethod();
        System.out.println("method = " + method);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

                运行效果 :(如下GIF图)

        4.使用细节 : 

        防止“表单提交的数据出现乱码”问题,可以在使用req.getParameter(string)方法前,调用req.setCharacterEncoding("utf-8")方法

        为防止“服务器返回给浏览器的数据出现乱码”问题,可以在获取PrintWriter对象前,调用resp.setContentType("text/html; charset=utf-8")方法。(对应Http响应的响应头Content-Type)


二、请求转发

        1.基本介绍 : 

        当业务比较复杂时,一次请求可能需要多个Servlet来完成(eg : Servlet链的流水作业)。如下图所示 : 

        请求转发即指一个web资源收到客户端请求后,通知服务器调用另外一个web资源进行处理

        HttpServletRequest对象提供了getRequestDispatcher方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。

        HttpServletRequest对象同时也是一个域对象,开发人员通过HttpServletRequest对象可以在实现转发时,把数据通过request对象带给其它web资源来处理

        常用方法如下——

  •         setAttribute方法
  •         getAttribute方法
  •         removeAttribute方法
  •         getAttributeNames方法

        2.应用实例 : 

                要求定义VerifyServlet和ReplyServlet两个servlet资源,前者用于对表单提交的数据进行校验,并令Tomcat去调用ReplyServlet来处理校验后的数据;后者用于处理数据并反馈给浏览器。

                register.html代码如下 : 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Register</title>
</head>
<body>
    <h1>User Register</h1>
    <form action="http://localhost:8080/Servlet_Demo/verifyServlet" method="post">
        username:<input type="text" name="username"/> <br/><br/>
        <input type="submit" value="register"/>
    </form>
</body>
</html>

                VerifyServlet类代码如下 : 

package down.req;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

/**
 * @author : Cyan_RA9
 * @version : 21.0
 */
@WebServlet(urlPatterns={"/verifyServlet"})
public class VerifyServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("VerifyServlet's doPost is invoked~");

        req.setCharacterEncoding("utf-8");

        String username = req.getParameter("username");
        if ("Cyan".equals(username)) {
            req.setAttribute("status", "Manager");
        } else {
            req.setAttribute("status", "Employee");
        }

        /**
         (1) /replyServlet是要转发的servlet的url
         (2) "/"会被Tomcat解析成"/Servlet_Demo",即当前Web工程路径
            如果开头没写/,默认会隐含一个/。
         (3) forward(request,response)表示把当前servlet的request对象和response对象,
            传递给下一个servlet使用 (相同)
         */
        //获取分发器
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/replyServlet");
        requestDispatcher.forward(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

                ReplyServlet类代码如下 : 

package down.req;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

/**
 * @author : Cyan_RA9
 * @version : 21.0
 */
@WebServlet(urlPatterns = {"/replyServlet"})
public class ReplyServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ReplyServlet's doPost is invoked~");

        String username = req.getParameter("username");
        String status = (String) req.getAttribute("status");

        resp.setContentType("text/html; charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print("" +
                "<table border=\"2px\"; bordercolor=\"pink\" cellspacing=\"0\" cellpadding=\"10px\">" +
                    "<tr>" +
                        "<td colspan = 2>The data you submitted : </td>" +
                    "</tr>" +
                    "<tr>" +
                        "<th>username: </th>" +
                        "<th>" + username + "</th>" +
                    "</tr>" + "<tr><th>status: </th><th>" + status + "</th>" +
                    "</tr>" +
                "</table>");

        writer.flush();
        writer.close();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

                运行效果 : (如下GIF图)

        3.请求转发细节 : 

  1.         浏览器地址栏的URL不会变化 (地址会保留在第1个servlet的url)。因为“请求转发”的整个过程都是在服务器端进行的,与浏览器没有关系;最终仍是Tomcat以HTTP响应的方式回显给浏览器。
  2.         同一次HTTP请求中可进行多次转发;同一次HTTP请求中,进行多次转发,多个Servlet可以共享request域/对象的数据(因为始终是同一个request对象)。
  3.         “请求转发”也可以转发到WEB-INF目录下(做项目使用)
  4.         “请求转发”不能访问当前WEB工程外的资源。(404)
  5.         因为浏览器地址栏会停止在第一个servlet,因此,如果刷新页面,会再次发出请求(并且会携带数据),所以在支付页面等情况下,不要使用请求转发,否则会造成重复支付。

三、HttpServletResponse

        1.基本介绍 : 

        每次 HTTP 请求, Tomcat 会创建一个 HttpServletResponse 对象传递给 Servlet 程序去
使用
        HttpServletRequest表示请求过来的信息,而 HttpServletResponse则 表示所有响应的信息, 如果需要设置返回给客户端的信息,通过 HttpServletResponse 对象来进行设置即可( 最终仍是由Tomcat以HTTP响应的方式将数据返回给客户端 )。
        HttpServletResponse类图如下 : 

        2.常用方法 : 

        1.字节流getOutputStream() :

                常用于下载文件(处理二进制数据)

        2.字符流getWriter() :(之前举过的例子用过)

                常用于回显字符串
        Δ细节:

                两个流只能同时使用一个——使用了字节流,就不能再使用字符流,反之亦然,否则就会报错

        3.乱码问题的解决办法 : 

        方式一 —— 老办法(最好用):

                resp.setContentType("text/html; charset = utf-8"); 

                setContentType方法会同时设置服务器端和客户端都使用utf-8字符集编码,并且还设置了响应头,但setContentType必须在获取流对象之前调用
        方式二 —— 新办法(也还行):

                resp.setCharacterEncoding("utf-8");        //先设置服务器端使用utf-8编码

                resp.setHeader("Content-Type", "text/html; charset = utf-8");         /*再通过响应头的方式设置浏览器端的编码 */


四、请求重定向

        1.基本介绍 : 

         请求重定向 指:一个 web 资源收到客户端请求后,通知 客户端 去访问另外一个 web 资源,这称之为请求重定向。
        请求重定向中,负责重定向功能的servlet会将响应状态码修改为302(表示请求重定向),然后设置一个Location属性,用于告知浏览器下一次请求该访问哪个资源。[sendRedirect("/web工程名/web资源")方法] 

        2.应用实例 : 

                有一个超链接的页面,要求该超链接导向一个servlet,而该servlet会通过“请求重定向”通知浏览器端去访问另外一个servlet。(Servlet此处采用注解方式配置)

                redirection.html代码如下 : 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Redirection Demo</title>
</head>
<body>
    <h1>⭐408资料分享⭐</h1>
    <a href="http://localhost:8080/Servlet_Demo/old" target="_self">
        快点我!点我下载数据结构1800题!
    </a>
</body>
</html>

                OldServlet类代码如下 : 

package down.resp;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

/**
 * @author : Cyan_RA9
 * @version : 21.0
 */
@WebServlet(urlPatterns = {"/old"})
public class OldServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
            (1) sendRedirect方法本质上就会返回302(重定向)状态码,并且设置Location响应头;
            (2) 与请求转发不同,“请求重定向”的解析不是在服务器端进行的,而是由浏览器解析;
                此处的"/"会被浏览器解析为"http://localhost:8080/";
            (3) So, “请求重定向”时,sendRedirect方法中的格式必须是“/Web应用名/Web资源”
                注意第一个斜杠!(如果开头没有写斜杠,默认会隐含一个斜杠!)
         */
        resp.sendRedirect("/Servlet_Demo/new");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

                NewServlet类代码如下 : 

package down.resp;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

/**
 * @author : Cyan_RA9
 * @version : 21.0
 */
@WebServlet(urlPatterns={"/new"})
public class NewServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //注意此处MIME类型的使用
        resp.setContentType("application/x-tar; charset=utf-8");
        //如果想看到浏览器地址栏的变化,可以使用"text/html"MIME类型

        PrintWriter writer = resp.getWriter();
        writer.print("数据结构1800题pdf!");
        writer.flush();
        writer.close();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

                运行效果 : (如下GIF图)

        3.使用细节 : 

        "302" 的最佳应用场景 —— 网站迁移。比如网站的域名变更,原域名是 www.CyanRA9.com 迁移到新域名 www.CyanRA9.cn,但是浏览器抓取的仍然是原来的域名,这时就可以通过一个请求重定向来解决问题。

         “请求重定向”的使用中,浏览器地址栏会发生变化(最终停留在新的web资源的URL),本质是两次HTTP请求

        不能共享HttpServletRequest域中的数据,因为本质是两次HTTP请求,会生成两个不同的HttpServletRequest对象
        不能重定向到 /WEB-INF 下的资源(受保护)
        可以重定向 Web 工程以外的资源, 比如到其他网站(必应之类的)
        请求重定向有两种方式——

                (1) resp.sendRedirect("/web项目名/web资源");        //推荐第一种!

                (2) resp.setStatus(302);

                      resp.setHeader("Location", "/Servlet_Demo/new");

        可以使用getServletContext().getContextPath() 方法来获取当前Web项目的工程路径(动态获取工程路径),得到工程路径后,再以字符串拼接的形式(工程路径 + 具体的web资源)传递给sendRedirect方法。


五、Servlet(下)总结

        (1) 掌握HttpServletRequest的常用方法(eg : URL和URI的区别;获取请求头的方法;获取表单提交数据的多种方式

        (2) 掌握请求转发的底层原理(同一个域对象),以及如何实现请求转发。

        (3) 掌握HttpServletResponse回显数据给浏览器的具体步骤,以及如何解决乱码问题。

        (4) 掌握请求重定向的底层原理,以及重定向的具体实现(注意与请求转发格式的区别!)

        System.out.println("END---------------------------------------------------------------------------------"); 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/780582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试之JVM的储存空间

Java8之后&#xff0c;取消了整个永久代区域&#xff0c;取而代之的是元空间。运行时常量池和静态常量池存放在元空间中&#xff0c;而字符串常量池依然存放在堆中。&#xff08;&#xff09; JVM允许时数据区 程序计数器的特点以及作用 &#xff1f; 1、程序计数器 是一块较…

protobuf学习

protobuf的安装 Windos版安装 下载地址&#xff1a;https://github.com/protocolbuffers/protobuf/releases 选择合适的版本下载 将下载的压缩包解压&#xff0c;把解压后文件的bin目录的路径配置到系统环境比变量Path中 在cmd 中执行 protoc --version 成功就说明安装成功了l…

Vue.js基础简答题

系列文章目录 后续补充 文章目录 系列文章目录前言一、库与框架的区别是什么&#xff1f;二、Vue.js 的核心特性有哪些&#xff1f;三、什么是数据驱动视图&#xff1f;四、MVVM 模型各部分含义是什么&#xff0c;在 Vue.js 中分别对应哪些功能&#xff1f;五、el 选项的作用是…

一)Stable Diffusion使用教程:安装

目前AI绘画最火的当属Midjorney和Stable Diffusion&#xff0c;但是由于Midjourney没有开源&#xff0c;因此我们主要分享下Stable Diffusion&#xff0c;后面有望补上Midjourney教程。 本节主要讲解Stable Diffusion&#xff08;以下简述SD&#xff09;的下载和安装。 1&…

uniapp查看ios打包后的Info.plist文件

最近在用 uni 开发 ios 的时候给项目添加了自定义的 Info.plist 文件&#xff0c;但是打包后发现并没有生效&#xff0c;才有了查看打包后的 Info.plist 文件想法。 HBuilderX3.6.5起&#xff0c;支持直接在应用项目中配置 iOS 平台的 Info.plist 和 资源文件&#xff08;Bundl…

pytest中生成allure报告时,测试报告中统计的用例数不正确

【问题描述】&#xff1a;pytest中生成allure报告时&#xff0c;测试报告中统计的用例数不正确&#xff0c;用例数总是比实际用例数多 【问题定位】&#xff1a;因为生成index.html的allure报告&#xff0c;是根据临时的json文件生成的。每次运行时&#xff0c;没有删除旧的js…

Grafana图形web监控的安装与配置

目录 一、安装并配置 二、Web访问 三、Grafana启用zabbix插件 四、Grafana添加zabbix数据源 五、创建仪表盘 创建监控项完成保存仪表盘 六、查看创建的仪表盘 七、在现有的dashboard&#xff08;仪表盘&#xff09;中添加图形 八、查看最终dashborad&#xff08;仪表盘&#x…

react 实现小球加入购物车动画

代码 import React, { useRef } from react;const ProductLayout () > {const box useRef(null);const createBall (left, top) > {const ball document.createElement(div);ball.style.position absolute;ball.style.left left - 10 px;ball.style.top top - 1…

三维点云中的坐标变换(只讲关键部分)

一、坐标旋转 坐标旋转包含绕x、y、z轴旋转&#xff0c;在右手坐标系中&#xff0c;x-翻滚(roll)&#xff0c;y-俯仰(pitch)&#xff0c;z-航向(yaw)。如果想详细了解&#xff0c;可以网络搜索 在PCL中&#xff0c;从baseLink到map的转换关系为:先绕x轴旋转,在绕y轴旋转,最后绕…

linux:secureCRT通过pem证书远程访问服务器

参考&#xff1a; secureCRT通过pem证书远程访问服务器_Fengshana的博客-CSDN博客 总结&#xff1a; 配置公钥即可

hdu7298 Coin(网络流+按时间拆点)

题目 t(t<10)组样例&#xff0c;每次给n(n<3e3)个人&#xff0c; 第i个人&#xff0c;在任意时刻&#xff0c;都最多只能有ai(1<ai<3e3)个硬币 其中k(k<n)个是小F的朋友&#xff0c;依次用点号的形式给出 初始时&#xff0c;每个人都有一个硬币&#xff0c;…

<j-editable-table 新增行 按钮去掉方法

新增行 按钮去掉方法 修改的内容 要去掉组件中的新增行添加按钮&#xff0c;你可以将:actionButton"true"的值改为:actionButton“false”&#xff0c;即将true改为false&#xff0c; 去掉前的 <j-editable-tableref"editableMeTable":loading"m…

react中使用echarts

下载插件 npm install echarts npm install echarts-for-react 引入模块 import ReactEcharts from "echarts-for-react" import echarts from "echarts"; import React from react; import ReactEcharts from echarts-for-react const Tiao () >…

LabelImg 标注工具的使用(获取标注的图片数据集)

目录 1 安装及使用1.1 安装1.2 使用 2 标注格式 1 安装及使用 1.1 安装 Win R输入cmd进入终端界面 LabelImg 安装命令&#xff1a; pip install labelimg没有配置国内 pip 源的&#xff0c;请看 ⇒ \Rightarrow ⇒ 临时办法&#xff1a;在上述命令末尾添加源&#xff0c…

分布式系统的应用程序性能监视工具-skywalking

分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。提供分布式链路日志追踪、剖析、服务网格遥测分析、度量聚合和可视化一体化解决方案。 在应用系统进行实时监控,实现对应用性能管理和故障定位的系统化解决方案中常用的…

【C语言敲重点(五)】嵌入式“八股文“(2)

1. struct和union的区别&#xff1f; 答&#xff1a;①联合体所有的成员都共享一块内存&#xff0c;修改联合体的任一成员的数据就会覆盖到其他成员的数据&#xff1b; ②结构体的成员变量都有独立的内存空间&#xff0c;且结构体的成员数据之间是不影响的 2. struct和class的…

HTTPS——HTTPS如何加密数据,“证书“为什么可以应对 “中间人攻击“

文章目录 前言一、HTTPS是什么二、HTTPS加密方法三、HTTPS加密流程对称加密非对称加密中间人攻击证书 总结 前言 本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话&#xff0c;互关一下&#xff0c;以后互相学习&…

Linux笔记——管道相关命令以及shell编程

文章目录 管道相关命令 目标 准备工作 1 cut 1.1 目标 1.2 路径 1.3 实现 2 sort 2.1 目标 2.2 路径 2.3 实现 第一步: 对字符串排序 第二步&#xff1a;去重排序 第三步: 对数值排序 默认按照字符串排序 升序 -n 倒序 -r 第四步: 对成绩排序【按照列排序】 …

python实现逻辑回归-清风数学建模-二分类水果数据

所用数据 &#x1f449;&#x1f449;&#x1f449;二分类水果数据 1.数据预处理 可以看到有4个特征&#xff0c;2种分类结果&#xff0c;最后4个没有分类结果的数据是拿来预测的 # 1. 数据预处理 import pandas as pd df pd.read_excel(oridata/二分类水果数据.xlsx,use…

启用window10专业版系统自带的远程桌面

启用window10专业版系统自带的远程桌面 Windows操作系统作为应用最广泛的个人电脑操作系统&#xff0c;在我们身边几乎随处可见。虽然近些年因手机、平板电脑等设备的兴起&#xff0c;个人电脑的存在感逐渐降低&#xff0c;但对于一些大型程序和特殊情况&#xff08;办公软件、…