SpringMVC基础篇:MVC基础知识

news2024/11/24 22:41:21

第一章:SpringMVC引言

一:什么是SpringMVC

概念:SpringMVC是在Spring框架基础上衍生而来的一个MVC框架,主要解决了原有的MVC框架过程中控制器(Controller)的问题。
SpringMVC是Java开发当中最主流的web技术,决定了对web开发的掌握的深度。

1:什么是MVC

概念:MVC是一个架构思想,广泛应用于JavaWeb领域。

1. MVC是一个架构思想,在JavaEE开发中多用于Web开发。
2. 应用MVC架构思想开发应用,会把一个项目划分为了3个层次,M(Model) 模型层,V(View) 
视图层,C(Controller) 控制层。
		View       JSP
		Model      Service+DAO
		Controller Servlet
3. MVC这种分层开发,体现了面向对象各司其职的设计思想,也更加有利于后续的项目维护(修改)
补充说明:
controller控制层:纵览全局,进行调度,他就是控制器,使用servlet
view:进行相关展示,主要使用jsp进行展示,
model:业务和相关数据处理
**特定的类,只关注于特定的工作**
对于jsp来讲,他擅长的是将html和数据进行结合,进行相应的渲染,servlet来讲可以接受用户的请求,并进行相应的跳转,
这个时候,servelet适合做为控制层,service和dao完成业务的处理和数据的存储,这样三者之间是没有相互相应的,
这样的话,及时我们后续更改技术,有太大的影响,方便进行后续项目的维护

2:SpringMVC为什么要基于Spring框架

1):站在巨人的肩膀上

他基于Spring框架,就能获取Spring为我们带来的一系列的好处。Spring的牛逼之处就在于他的IOC和AOP,基于Spring也就可以大大简化MVC的开发(不必将这些优秀的功能在封装一遍)

2):独木难成桥

在Spring这个优秀的技术平台上,更加方便与其他的优秀的框架进行整合。

通过工厂(容器)创建对象,解耦合 (IOC DI)。
通过AOP的方式,为目标类(原始类),增加额外功能。
方便与第三方框架的集成:MyBatis.JPA.MQ

3:原有MVC开发中控制器

1):原有MVC开发控制器技术实现

servlet技术【Java Model2模式中提到的技术】
strus2当中的action也是控制器
Java Model2模式,是十几年前,sun公司提出的,servlet作为控制器,Jfb做展示,这种模式称为model2。
servlet就是原有控制器的一种实现方式,strus2当中的Action也是控制器的一种实现方式

2):控制器核心作用

接收用户的请求,调用业务功能,根据处理的结果控制程序的运行流程。
控制器里都需要实现的核心代码:接收用户请求,处理业务逻辑,控制程序流程运转。
1、接收client请求参数,
2、调用业务对象,
3、流程跳转。或者是页面跳转。
不论是原生Servlet,SpringMVC,还是Structs,这些MVC工具都是要做这些是几个事情,如果说我们的代码
超出了这个范畴的话,说明我们的代码写的位置不是很合理。

3):这些控制器时存在的问题

A:接收参数时的问题

1、代码冗余
2、只能接收字符串类型的数据,其他类型需要进行手工转换
3、无法自动封装对象。
以上这两行代码,大量内容都是重复的。读取文本文件,通过应用层协议,传递过来的数据传递过来的时候,
初步接收的时候都是字符串,但是后续开发过程中,我们需要吧id转换成long或者其他类型的值。
接收数据的过程中,不能封装程一个对象。例如一个User对象。以上的缺点都是后续	
SpringMVC帮我们做的事。

B:调用业务对象过程中

还得new创建对象,这样造成了耦合

C:流程跳转或者页面跳转存在的问题

1、跳转路径耦合:我们采用的forward进行跳转。出现了路径耦合
2、宇视图层技术耦合。

二: SpringMVC学习要点

1:SpringMVC的三种开发模式

1):传统的试图开发

通过作用域(request,session)进行数据的传递
通过试图层技术进行数据的展示(jsp,freemaker,thymeaf)进行数据的展示
知识点和servlet区别不大。

2):前后端分离的开发

多种新的请求发送方式
restful的访问方式。
通过httpMessageconverter进行数据响应,不在通过jsp,free,或者thymleaf

3):Spring5 引入的webflux开发

替换了传统的JavaWeb开发,一种新的web开发方式
通过NettyServer进行web通信。

2:创建父子工程

1):什么叫父子工程

父子工程就是先创建一个父工程,再在父工程地下创建若干个子工程,父工程用于管理项目结构和依赖,
依赖全部在父工程当中进行设置。我们后续的boot和cloud都是采用父子工程的设置。
ctrl+shift+alt+s快速进入project structure选项中。我们先设置JDK为1.8,在设置语言级别为1.8,
然后就该创建父工程了。父子工程创建好之后如何在pom文件当中如何体现父子级关系呢?

常见好的目录结构如下:
在这里插入图片描述

父子工程创建好时候,父工程主要是控制项目结构依赖版本,具体业务代码的开发都是在子工程当中。当我们创建好之后,我们就会发现,并没有按照标准的maven目录给我们创建。我们的src/main/下边应该还有一个java源码目录和一个resource资源目录。当然还有我们的测试目录。我们手动进行修复。

2):web.xml

web.xml文件基于maven骨架创建的版本他的servlet版本是2_3,我们使用Tomcat8版本,需要我们的Servlet支持3.x以上的版本,Tomcat9需要支持4.x以上的版本。我们删除掉这个配置文件,使用idea帮我们进行创建新的,基本步骤是:
在这里插入图片描述

3):对某个子工程进行部署

我们是父子工程,我们将子工程当中的依赖,构建都去掉,因为父工程都为我们做好了。
搭建好web项目之后,我们需要对他进行部署,也可能是对其中的某一个web工程进行部署,我们如何来部署一个web项目呢?打开add configuration这时候来到我们Tomcat的设置目录,点击local,选择TomcatServer
在这里插入图片描述
在这里插入图片描述
然后再deployment当中选择部署应用,我们选择的不要选择war包的形式,要选择普通目录(带exploded)的方式,方便我们后续进行调试。ApplicationContext是对我们web应用的名字进行设置我们选择basic。回到Server当中,我们对VM opetions做一些设置,也就是虚拟机参数:
-Dfile.encoding=UTF-8这个参数是防止Tomcat启动的时候控制台打印出现乱码。端口我们习惯上改为8989。基于此我们已经能够看出来,当前项目中父工程下一共有4个子工程,我们使用idea整合tomcat,并将其中的要给子项目部署到Tomcat服务器当中。我们已经搭建好了web项目的环境(web父子工程),接下来我们需要搭建一下SpringMVC环境的搭建。

三:SpringMVC环境的搭建

1:引入依赖jar包

整体来讲SpringMVC是相对于Spring来讲,我们就多了一个MVC的包,值得注意的是,我们需要在父工程当中引入所有的依赖。

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.14.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.14.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.1.14.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.1.14.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.14.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.1.14.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.14.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.2</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.18</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.1.14.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.8.8</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.3</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.7.25</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>

        <dependency>
            <groupId>org.logback-extensions</groupId>
            <artifactId>logback-ext-spring</artifactId>
            <version>0.1.4</version>
        </dependency>

        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
            <version>1.25</version>
        </dependency>
    </dependencies>

补充说明:
如何设置maven依赖添加之后,自动导入:
右边maven有一个小扳手,选择Auto-reload settings进来之后,选择any changes即可
另外,我们所有的依赖都只在我们的父工程当中进行了配置,但是我们子工程当中的maven依赖是都能依赖到,都能看得到的,可见父工程的依赖完全可以供子工程进行使用。

2:导入框架配置文件

作为SpringMVC来讲,他的配置文件就是原有Spring的配置文件,SpringMVC既然衍生自Spring很多的功能都是公用的。

两个注意事项:
1:SpringMVC的配置文件明后名称可以随意命名,但是我们在这里叫做:dispatcher.xml
2:SpringMVC的配置文件放置路径可以随意放置,但是这次我们放到根下,准确来讲是资源文件夹的根下。有了这两个特殊的说明之后。我们就可以在SpringMVC项目中引入他的配置文件了。
资源文件夹的根目录下就是resources底下,这个dispatcher.xml文件本质上就是Spring的配置文件。

3:初始化配置

对配置文件进行相应的配置

1):web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--这是一个典型的Servlet标签的配置-->
    <servlet>
        <!--servlet-name这里可以随便取名字,只要保证servlet-name和下边的servlet-name配对即可。-->
        <servlet-name>dispatcherServlet</servlet-name>
        <!--这个是最核心的类型:整个Springmvc的核心-->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--配置完之后,需要指定一些默认的配置-->
        <!--指定SpringMVC配置文件的路径,这里需要使用init-param标签进行配置-->
        <init-param>
            <!--这个是固定写死的。-->
            <param-name>contextConfigLocation</param-name>
            <!--这个必须以classpath开头,后边是我们配置文件的路径。-->
            <!--我们知道SpringMVC的配置文件和路径都是可以随意放置和使用的。但是我们后续使用的时候,需要告诉具体的名字和路径-->
            <!--classpath代表了类路径的根。但是我们dispatcher在我们的类路径的根下,也就是在我们资源路径的根下。-->
            <!--如果后续配置文件被放置到了子路径下,我们需要把我们的子路径写上。-->
            <param-value>classpath:dispatcher.xml</param-value>
        </init-param>
        <!--1:本Servlet会在tomcat启动的时候,就会被创建-->
        <!--servelet被创建的时机有两个,用户第一次请求的时候,Servlet会被创建。-->
        <!--要么就是Tomcat启动的时候,由下边这个标签控制随着Tomcat启动而创建-->
        <!--对于我们来讲,SpirngMVC最核心的类型就是这个,我们期待他能更早的被创建。-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

2):dispatcher.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--设置注解扫描的路径-->
    <context:component-scan base-package="com.baizhiedu"/>

    <!--引入SpringMVC的核心功能-->
    <!--配置过程当中有一个选择的过程,这里边有很多命名空间的标签,这里边我们一定选择MVC命令空间的标签,不然整个MVC都会出现一些莫名其迈的问题-->
    <!--这个标签是为了引入SpringMVC的核心功能,写了这个之后,SpringMVC一些功能被引入进来-->
    <mvc:annotation-driven/>
</beans>

4:初始化配置当中细节

1):dispatcher起到了什么作用

DispacherServlet我们习惯称之为前端控制器或者叫中央控制器。他的核心作用有两点:

1:创建Spring的工厂和容器。
我们每次测试的时候都需要创建Spring的工厂,在工厂当中去获取我们的对象。
然而在Web开发当中,我们Spring工厂对象是交由我们的前端控制器来创建的,所以这个在我们配置以后就等效于我们已经在Tomcat服务启动的时候就已经创建了Spring的工厂,所以这块就等效于我们进行了new ClassPathXmlApplicationContext(“dispacher.xml”);所以这里边需要配置文件的名称和路径,这也是为什么我们需要将Spring配置文件的信息写入Web.xml当中。
因为DispathcherServlet封装的Spring工厂的创建只能通过读取XML文件的形式,所以无法迁移到纯注解的开发上。但是目前的SpringMVC是无法做到纯注解开发的,直到我们后边有了更高级的课程才能迁移到纯注解编程上去。

2:控制SpringMVC的内部运行流程。
内部运行流程是怎么流转的,这些相关的操作,必须等我们深入学习SpringMVC源码之后,才能会有更深入的了解。这里边只需要注意的是,他控制了SpringMVC的运行流程。

2):SpringMVC的配置文件dispatcher.xml

mvc:annotation-driven/作用:
这块配置的主要作用就是:引入了SpringMVC的核心功能,主要引入了2个核心类型:RequestMappingHandlerMapping
RequestMappingHandlerAdapter
配置文件当中引入这个标签就是在SpringMVC项目中引入了这两个关键类。这两个类起到的作用
RequestMappingHandlerMapping:实现了HandlerMapper接口,并将其诸注册到请求注册表当中。
RequestMappingHandlerAdapter:实现了HandlerAdaper接口,主要作用就是处理请求适配器,他是专门处理请求的适配器,确定调用某个符合要求的控制器类中的具体服务的方法。
所以在这,整个SpringMVC控制器的调用,都是交由这个Adapter来完成的,他会在N多个控制器当中找到那个符合要求的控制器,并且调用这个控制器当中的某个方法,对外提供服务。

我们来验证我们以上的想法:
首先我们将左边的任务栏调整为浮动模式:项目上右键—> view mode:floot修改为浮动模式,找到我们项目中依赖管理的地方,在找到我们webmvc的jar包
打开下图这个文件之后,下面可以看到一组key_value这样的配置,前端的key是:http://www.springframework.org/schema/mvc这个含义就是说这一组标签都是所有核心配置文件当中mvc开头的标签都是由这个Schema来对应
后续的Value是一个类,这个类专门用来处理这些个对标签的类,我们说一切皆对象,这些对象就是我们用来处理这些标签的对象。
在这里插入图片描述

package org.springframework.web.servlet.config;

import org.springframework.beans.factory.xml.NamespaceHandlerSupport;

public class MvcNamespaceHandler extends NamespaceHandlerSupport {
    public MvcNamespaceHandler() {
    }
    public void init() {
        this.registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());
        this.registerBeanDefinitionParser("default-servlet-handler", new DefaultServletHandlerBeanDefinitionParser());
        this.registerBeanDefinitionParser("interceptors", new InterceptorsBeanDefinitionParser());
        this.registerBeanDefinitionParser("resources", new ResourcesBeanDefinitionParser());
        this.registerBeanDefinitionParser("view-controller", new ViewControllerBeanDefinitionParser());
        this.registerBeanDefinitionParser("redirect-view-controller", new ViewControllerBeanDefinitionParser());
        this.registerBeanDefinitionParser("status-controller", new ViewControllerBeanDefinitionParser());
        this.registerBeanDefinitionParser("view-resolvers", new ViewResolversBeanDefinitionParser());
        this.registerBeanDefinitionParser("tiles-configurer", new TilesConfigurerBeanDefinitionParser());
        this.registerBeanDefinitionParser("freemarker-configurer", new FreeMarkerConfigurerBeanDefinitionParser());
        this.registerBeanDefinitionParser("groovy-configurer", new GroovyMarkupConfigurerBeanDefinitionParser());
        this.registerBeanDefinitionParser("script-template-configurer", new ScriptTemplateConfigurerBeanDefinitionParser());
        this.registerBeanDefinitionParser("cors", new CorsBeanDefinitionParser());
    }
}

打开这个类之后,我们看到了annotation-driven对应了一个新的类型。也就这样这个标签更具体的处理类是后边对应的这个。我们在进入到这个类之后,确实引入了我们上述的两个类型:

package org.springframework.web.servlet.config;
class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
    public static final String HANDLER_MAPPING_BEAN_NAME = RequestMappingHandlerMapping.class.getName();
    public static final String HANDLER_ADAPTER_BEAN_NAME = RequestMappingHandlerAdapter.class.getName();
    }

至此就证明了咱们上述表述的正确性。

<context:component-scan base-package=“com.baizhiedu”/>
这个标签就不陌生了,他就是为了注解扫描。这里边需要注意的是什么:因为DispathcherServlet封装的Spring工厂的创建只能通过读取XML文件的形式,所以无法迁移到纯注解的开发上。这样就导致了,我们这里边开发方式是:Spring配置文件+基础注解的形式。

基础注解: @Component,@Service,@Repository,@Controller,@Scope,@Transactional等
高级注解: @Confiquration,@Bean,@ComponentScan等
后续SpringMVC高级版的课程,会使用纯注解版开发,与SpringBoot的使用方式高度一致。

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

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

相关文章

了解软件测试

软件测试课程 1.1课程内容&#xff1a; 软件基础课程 ------设计测试用例方法 自动化课程&#xff08;web自动化&#xff09;------ 抢票功能 性能测试课程 ----项目性能测试 1.2 什么是测试 1.21 生活中测试的案例 坐地铁&#xff0c;做核酸&#xff0c;扫核酸码 比如当我…

[附源码]计算机毕业设计学生社团信息管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

零基础学习软件测试,掌握四点就够了

近年来越来越多的人转行到软件测试这一领域&#xff0c;对于很多外行的人来说&#xff0c;肯定对这一行业有很多不了解&#xff0c;对于这一职业的职责以及要求都会不清楚&#xff0c;那么我们今天就来梳理一下关于软件测试行业的信息。 一、软件测试的主要职责你知道吗&#x…

裸辞闭关60天,啃下这些软件测试笔记,有幸通过阿里测开岗P6面试

时代在发展&#xff0c;互联网之下&#xff0c;稍有一些落后可能就会被淘汰掉&#xff0c;因此我们需要不断去审视自己&#xff0c;通过学习来让自己得到相应的提升。 近段时间&#xff0c;我也了解到很多小伙伴不清楚作为测试工程师应该掌握什么样的核心知识&#xff1f;实际…

暴力算法 --- 莫队

文章目录莫队基础莫队带修改莫队树上莫队回滚莫队莫队 什么是莫队&#xff1f; 答&#xff1a;优雅的暴力&#xff01;&#xff01;&#xff01; 基础莫队 重复的数 题目描述&#xff1a;给出一个长度为NNN的序列&#xff0c;有若干查询&#xff0c;每次查询区间[li,ri][l_i,…

网页信息抓取-网页信息采集器

抓取整个网页&#xff0c;我们怎么抓取整个网页自己想要的文章内容&#xff0c;很多人一想到内容抓取。就想到要学习一门编程语言&#xff0c;最让大家熟知的就是python爬虫。如果完全靠自己自学&#xff0c;又是从零基础开始学习Python的情况下&#xff0c;我认为至少需要半年…

Spring Boot 2 (六):使用 Docker 部署 Spring Boot 开源软件云收藏

云收藏项目已经开源2年多了,作为当初刚开始学习 Spring Boot 的练手项目,使用了很多当时很新的技术,现在看来其实很多新技术是没有必要使用的,但做为学习案例来讲确实是一个绝佳的 Spring Boot 实践。 从开源到现在,写了一些教程给大家介绍如何部署云收藏,如何在IDE中运…

[附源码]计算机毕业设计ssm校园二手交易平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

解决JSP中Bean在页面显示不正确问题(scope关键字)

问题出现 有一天我在编写JSP的程序时&#xff0c;在Java后端写了跳转并且传输数据语句&#xff0c;但前端界面渲染出来的数据却是我在DAO中初始化的数据。 第一句语句将book对象注入request的Session中&#xff0c;第二句实现跳转到JSP页面&#xff0c;第三句将此时的request和…

Logistic回归——银行违约情况分析

文章目录一、Logistic回归原理1、Sigmoid函数作用2、用梯度下降法求解参数二、利用Logistic回归分类1、数据预处理2、利用梯度上升计算回归系数3、训练和验证总结一、Logistic回归原理 1、Sigmoid函数作用 Logistic回归的原理是用逻辑函数把线性回归的结果(-∞,∞)映射到(0,1…

【408篇】C语言笔记-第十章(线性表)

文章目录第一节&#xff1a;线性表的顺序表示线性表1. 定义2. 特点线性表的顺序表示1. 顺序表2. 优缺点比较3. 插入操作4. 删除操作5. 动态分配代码示例第二节&#xff1a;线性表的链式表示单链表优缺点对比插入操作删除操作代码示例第一节&#xff1a;线性表的顺序表示 线性表…

python中的序列(列表、元组、字符串)的切片操作

目录 一.序列 二. 序列常用操作——切片 注意 演示 一.序列 序列是指:内容连续、有序&#xff0c;可使用下标索引的一类数据容器 列表、元组、字符串&#xff0c;均可以可以视为序列。 二. 序列常用操作——切片 序列支持切片&#xff0c;即:列表、元组、字符串&#xf…

看卡塔尔世界杯,diff一下足球比赛与软件开发

diff一下足球比赛与软件开发吐槽世界杯E组&#xff01;类比软件开发与足球比赛教练与架构师的作用新技术——半自动越位技术世界杯冠军吐槽世界杯E组&#xff01; 最近博主看了多场世界杯比赛&#xff0c;看的我心力交瘁&#xff0c;欲哭无泪。 从日本与哥斯达黎加那场比赛开始…

算法刷题打卡第34天:有效的井字游戏

有效的井字游戏 难度&#xff1a;中等 给你一个字符串数组 boardboardboard 表示井字游戏的棋盘。当且仅当在井字游戏过程中&#xff0c;棋盘有可能达到 boardboardboard 所显示的状态时&#xff0c;才返回 truetruetrue 。 井字游戏的棋盘是一个 3 x 3 数组&#xff0c;由字…

MYSQL 中连接的使用

文章目录0 写在前面1 语法说明2 SQL准备3 举例说明3.1 内连接3.2 左连接3.3 右连接4 写在最后0 写在前面 实际业务中&#xff0c;查询数据库大多都是多表链接查询&#xff0c;所以MYSQL的连接的使用非常重要。 连接有三种: INNER JOIN&#xff08;内连接,或等值连接&#xff0…

[附源码]计算机毕业设计疫情背景下社区互助服务系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Git基本使用

目录 一、Git基础 1.Git与Github 2.注册Github账号并安装Git 二、Git的使用 1.本地仓库 进行全局配置&#xff1a; 创建仓库&#xff1a; Git常用操作指令&#xff1a; 版本回退&#xff1a; 2.远程仓库 两种常规使用方式&#xff1a; 分支管理&#xff1a; 冲突的产生…

python http模块快速搭建“简单”服务器笔记

极简运行 python -m http.sever或 # test.py import http.server import socketserverPORT 8000Handler http.server.SimpleHTTPRequestHandlerwith socketserver.TCPServer(("", PORT), Handler) as httpd:print("serving at port", PORT)httpd.serve…

m基于matlab的光通信的信道估计,均衡,抑制papr误码率仿真,对比ZF,RLS,MMSE三种算法

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 可见光通信的信道估计&#xff0c;均衡&#xff0c;抑制papr。 不考虑光信道&#xff0c;用传统的无线通信的OFDM的信道估计&#xff0c;均衡&#xff0c;抑制papr 信道估计&#xff0c;均衡最…

解决Windows RDP远程桌面连接同时多用户连接不互踢不干扰问题及rdp wrapper windows版本不受支持问题.

注意: 如果你当前正在通过RDP方式远程连接到你要更改设置的目标计算机,请在目标计算机上安装其他远程控制软件.防止RDP因在此过程中挂掉无法连接. 下载: 使用GitHub - stascorp/rdpwrap: RDP Wrapper Library开源软件 转到Release 最新版本的是1.6.2,原作者没有更新的了.好…