Java自学第11课:电商项目(4)重新建立项目

经过前几节的学习,我们已经找到之前碰到的问题的原因了。那么下面接着做项目学习。

1 新建dynamic web project

建立时把web.xml也生成下,省的右面再添加。

会询问是否改为java ee环境?no就行,其实改过来也是可以的。这个不重要。

新建完毕后,看下当前的web.xml

欢迎界面不需要,删除即可。

2 流程图

我们开始写代码之前,还是重点关注下这个逻辑流程图,之前编程序都没注意这个,所以才发生错误不知道怎么回事。

web.xml很重要,这里配置了这个工程的入口。我们这个程序实际上是一个servlet程序,前端配合jsp网页展示。所以,入口就是规定servlet的名称及url。当部署在服务器后,我们的页面首先要访问servlet,之后拦截请求后,处理请求并获取参数,之后再传给前端的jsp网页去呈现。

在编写代码时,可以先写servlet,也可以先配置web.xml,也可以先写jsp文件,从逻辑上将,我们先去配置servlet的web.xml更好。

3 配置servlet

这里主要是配置servlet信息,如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>eb1</display-name>
<servlet>
	<servlet-name>index</servlet-name>
	<servlet-class>com.xxx.xx</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>index</servlet-name>
	<url-pattern>/index</url-pattern>
</servlet-mapping>
</web-app>

主要是servlet及其mapping,然后各有两个项。

其中名称需要一致,类就指向之后要新建的类。然后url也可以随便指定,部署后就从这里进入。

4 引入类库

这些类库都是配置好的,直接放入lib即可。放入后,所有类库需要buildpath,项目会自动加入reference libraries.

5 创建实体类

实体类根据数据库的表来创建。对于导航栏,有两个表需要用到:大类表和标签表。

实体类可放入vo包里。由于大类型包含小类型,所以小类型也得建类。

下面是具体实现:

tagl类:

package com.xx.vo;
/**
  *  标签类
 *
 */
public class Tag {
	private int id;
	private String name;
	private String url;
	
	public Tag() {
		// TODO Auto-generated constructor stub
	}

	public Tag(int id, String name, String url) {
		super();
		this.id = id;
		this.name = name;
		this.url = url;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	@Override
	public String toString() {
		return "Tag [id=" + id + ", name=" + name + ", url=" + url + "]";
	}

	
	
	
}

bigtype类

package com.xx.vo;

import java.util.ArrayList;
import java.util.List;

public class ProductBigType {
	private int id;
	private String name;
	private String remarks;
	private List<ProductSmallType> smallTypeList = new ArrayList<ProductSmallType>();
	
	public ProductBigType() {
		// TODO Auto-generated constructor stub
	}

	public ProductBigType(int id, String name, String remarks, List<ProductSmallType> smallTypeList) {
		super();
		this.id = id;
		this.name = name;
		this.remarks = remarks;
		this.smallTypeList = smallTypeList;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getRemarks() {
		return remarks;
	}

	public void setRemarks(String remarks) {
		this.remarks = remarks;
	}

	public List<ProductSmallType> getSmallTypeList() {
		return smallTypeList;
	}

	public void setSmallTypeList(List<ProductSmallType> smallTypeList) {
		this.smallTypeList = smallTypeList;
	}

	@Override
	public String toString() {
		return "ProductBigType [id=" + id + ", name=" + name + ", remarks=" + remarks + ", smallTypeList="
				+ smallTypeList + "]";
	}
	
	
	
}

smalltype类

package com.xx.vo;

public class ProductSmallType {
	private int id;
	private String name;
	private String remarks;
	private int bigTypeId;
	
	public ProductSmallType() {
		// TODO Auto-generated constructor stub
	}

	public ProductSmallType(int id, String name, String remarks, int bigTypeId) {
		super();
		this.id = id;
		this.name = name;
		this.remarks = remarks;
		this.bigTypeId = bigTypeId;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getRemarks() {
		return remarks;
	}

	public void setRemarks(String remarks) {
		this.remarks = remarks;
	}

	public int getBigTypeId() {
		return bigTypeId;
	}

	public void setBigTypeId(int bigTypeId) {
		this.bigTypeId = bigTypeId;
	}

	@Override
	public String toString() {
		return "ProductSmallType [id=" + id + ", name=" + name + ", remarks=" + remarks + ", bigTypeId=" + bigTypeId
				+ "]";
	}
	
	
}

其中,大类里用到了List和ArrayList,需要引导util包。

6 创建数据库交互类

数据库交互主要是连接,关闭数据库,需要做成静态的,这样就一直存在。

DBUtil类

package com.xx.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
  * 数据库交互类
 *
 */
public class DBUtil {
	
	// 主方法 用于测试
	public static void main(String[] args) {
		try {
			DBUtil.getConn();
			System.out.println("conn ok...");
		} catch (Exception e) {
			System.out.println("conn error...");
			e.printStackTrace();
		}
		
	}
	
	// 加载驱动
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver"); // 反射机制加载驱动
		} catch (ClassNotFoundException e) {
			System.out.println("error in forName...");
			e.printStackTrace();
		}
	}
	
	// 获取连接
	public static Connection getConn() {
		Connection conn = null;
		try {
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ebuys?useUnicode=true&characterEncoding=utf8","root","1234");
		} catch (SQLException e) {
			System.out.println("error in DriverManager");
			e.printStackTrace();
		}
		return conn;
	}
	
	// 完整关闭
	public static void closeAll(Connection conn, PreparedStatement pstmt, ResultSet rs) {
		closeResult(rs);
		closeState(pstmt);
		closeConn(conn);
	}
	
	// 关闭连接
	private static void closeConn(Connection conn) {
		if(null != conn) {
			try {
				conn.close();
			} catch (SQLException e) {
				System.out.println("error in close...");
				e.printStackTrace();
			}
		}
	}
	
	// 关闭管道
	private static void closeState(PreparedStatement pstmt) {
		if(null != pstmt) {
			try {
				pstmt.close();
			} catch (SQLException e) {
				System.out.println("error in pstmt...");
				e.printStackTrace();
			}
		}
	}
	
	// 关闭结果
	private static void closeResult(ResultSet rs) {
		if(null != rs) {
			try {
				rs.close();
			} catch (SQLException e) {
				System.out.println("error in rs...");
				e.printStackTrace();
			}
		}
	}
	
}

这里可以用main主方法来测试下是否能够连接,注意这些都是需要类库支持的,要是忘记引入,会发生错误。

7 创建servlet

现在来编写刚才web.xml规定的servlet,作用是将数据库内的信息传入页面。这里需要进行间接的数据库操作。

package com.xx.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.xx.service.ProductBigTypeService;
import com.xx.service.TagService;
import com.xx.service.impl.ProductBigTypeServiceImpl;
import com.xx.service.impl.TagServiceImpl;
import com.xx.vo.ProductBigType;
import com.xx.vo.Tag;

public class InitController extends HttpServlet {

	private static final long serialVersionUID = 1L;

	// 通过接口及其实例化来降低耦合度 让程序容易拓展
	private ProductBigTypeService bigTypeService = new ProductBigTypeServiceImpl();
	private TagService tagService = new TagServiceImpl();
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		// 查询类别
		List<ProductBigType> bigTypeList = bigTypeService.findAllBigType();
		// 查询标签
		List<Tag> tagList = tagService.findAll();
		
		// 查询结果放入作用域
		req.setAttribute("bigTypeList", bigTypeList);
		req.setAttribute("tagLiat", tagList);
		
		//
		req.getRequestDispatcher("/index.jsp").forward(req, resp);
		
		
	}
	
}

这个类的思路是重写service来处理请求,并转发到index.jsp。处理过程用到了大类列表和标签列表,这就涉及到查询,这个查询是封装在服务的方法里的。

这里涉及的概念较多,服务被写为了接口,也就是可以理解为纯虚函数。具体在impl里实现方法。

大类列表是通过大类服务的获取大类方法实现的,标签列表是通过标签服务的获取标签方法实现的。两者思路是相同的,需要具体实现。

实现的过程中,大类还包括了小类,因此也需要相应的实现小类的服务和方法。

标签的较为简单,是单层的,先看标签的接口

package com.xx.service;

import java.util.List;

import com.xx.vo.Tag;

public interface TagService {
	// 查询标签
	List<Tag> findAll();
}

其实现是

package com.xx.service.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.xx.service.TagService;
import com.xx.util.DBUtil;
import com.xx.vo.Tag;

public class TagServiceImpl implements TagService {

	@Override
	public List<Tag> findAll() {
		List<Tag> list = new ArrayList<Tag>();
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		

		try {
			conn = DBUtil.getConn();
			String sql = "SELECT * FROM T_TAG";
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while(rs.next()) {
				Tag tag = new Tag();
				tag.setId(rs.getInt("id"));
				tag.setName(rs.getString("name"));
				tag.setUrl(rs.getString("url"));
				list.add(tag);
			}
			return list;
		} catch (SQLException e) {
			System.out.println("error in tagServiceImpl...");
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt, rs);
		}
		
		
		return null;
	}

}

再来看大类接口

package com.xx.service;

import java.util.List;

import com.xx.vo.ProductBigType;

public interface ProductBigTypeService {
	// 查询大类信息
	List<ProductBigType> findAllBigType();
}

其实现为

package com.xx.service.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.xx.service.ProductBigTypeService;
import com.xx.service.ProductSmallTypeService;
import com.xx.util.DBUtil;
import com.xx.vo.ProductBigType;
import com.xx.vo.ProductSmallType;

public class ProductBigTypeServiceImpl implements ProductBigTypeService {

	private ProductSmallTypeService smallTypeService = new ProductSmallTypeServiceImpl();
	
	@Override
	public List<ProductBigType> findAllBigType() {
		List<ProductBigType> list = new ArrayList<ProductBigType>();
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {
			conn = DBUtil.getConn();
			String sql = "SELECT * FROM T_BIGTYPE";
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while(rs.next()) {
				ProductBigType pbt = new ProductBigType();
				pbt.setId(rs.getInt("id"));
				pbt.setName(rs.getString("name"));
				pbt.setRemarks(rs.getString("remarks"));
				
				List<ProductSmallType> pst = smallTypeService.findByBigTypeId(rs.getInt("id"));
				pbt.setSmallTypeList(pst);
				list.add(pbt);
			}
			return list;
		} catch (SQLException e) {
			System.out.println("error in bigTypeServiceImpl...");
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt, rs);
		}
		
		
		
		return null;
	}

}

在组合列表时,用到了小类接口,这里需要传入大类的id

package com.xx.service;

import java.util.List;

import com.xx.vo.ProductSmallType;

public interface ProductSmallTypeService {
	// 查询当前大类id对应的所有小类
	List<ProductSmallType> findByBigTypeId(int bigTypeId);
}

对应的实现是

package com.xx.service.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.xx.service.ProductSmallTypeService;
import com.xx.util.DBUtil;
import com.xx.vo.ProductSmallType;

public class ProductSmallTypeServiceImpl implements ProductSmallTypeService {

	@Override
	public List<ProductSmallType> findByBigTypeId(int bigTypeId) {
		
		List<ProductSmallType> list = new ArrayList<ProductSmallType>();
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {		
			conn = DBUtil.getConn();
			String sql = "SELECT * FROM T_SMALLTYPE WHERE BIGTYPEID = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, bigTypeId);
			rs = pstmt.executeQuery();
			while(rs.next()) {
				ProductSmallType pst = new ProductSmallType();
				pst.setId(rs.getInt("id"));
				pst.setName(rs.getString("name"));
				pst.setRemarks(rs.getString("remarks"));
				pst.setBigTypeId(bigTypeId);
				list.add(pst);
			}
			return list;
		} catch (SQLException e) {
			System.out.println("error in ProductSmallTypeServiceImpl...");
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt, rs);
		}
		return null;
	}

}

这里用到个知识点,就是怎么用通配符写sql语句。

8 写index.jsp

接下来,就可以写jsp了。首先引入css和图片资源,之后新建index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>eb1</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
	<div id="header" class="wrap">
		<jsp:include page="common/top.jsp"/>
	</div>

	<div id="footer">
		<jsp:include page="common/footer.jsp"/>
	</div>
</body>
</html>

这里用到了jsp里的include指令。分别指向top和footer,先来看footer

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	Copyright &copy; 2019 xx inc. All rights reserved.
</body>
</html>

再来看top,使用div来构建出导航栏。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
	<div id="logo">
		<img src="images/logo.gif" />
		
	</div>
	
	<div class="help">
	</div>
	
	<div class="navbar">
		<ul class="clearfix">
			<li class="current"><a href="index">首页</a></li>
			<c:forEach items="${bigTypeList}" var="bType">
				<li>
					<a href="productServlet?oper=productType&id=${bType.id}">${bType.name}</a>
				</li>
			
			</c:forEach>
		</ul>
	</div>
</body>
</html>

这里先实现了主导航栏,用了c:foreach的写法。

8 效果展示

下面看下实现效果,使用tomcat部署,打开网页:

也就是说前面写的都是正确的。今天的课程就到这里,接下来接着完善jsp页面和servlet类。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

css3 初步了解

1、css3的含义及简介 简而言之&#xff0c;css3 就是 css的最新标准&#xff0c;使用css3都要遵循这个标准&#xff0c;CSS3 已完全向后兼容&#xff0c;所以你就不必改变现有的设计&#xff0c; 2、一些比较重要的css3 模块 选择器 1、标签选择器&#xff0c;也称为元素选择…

滚珠螺杆在注塑机械手中起什么作用?

注塑机械手的配件中滚珠螺杆是重要的一环&#xff0c;在注塑机械手中起着重要的作用。注塑机械手是一种自动化设备&#xff0c;可以在注塑生产中实现自动化操作&#xff0c;而滚珠螺杆则是实现这一操作的关键部件之一。 滚珠螺杆是一种将旋转运动转化为直线运动的精密传动部件&…

在Linux系统下微调Llama2(MetaAI)大模型教程—Qlora

Llama2是Meta最新开源的语言大模型&#xff0c;训练数据集2万亿token&#xff0c;上下文长度是由Llama的2048扩展到4096&#xff0c;可以理解和生成更长的文本&#xff0c;包括7B、13B和70B三个模型&#xff0c;在各种基准集的测试上表现突出&#xff0c;最重要的是&#xff0c…

【Linux网络】本地DNS服务器搭建

目录 一、什么是DNS&#xff0c;相关介绍 1、dns是什么&#xff1a; 2、域名的分类&#xff1a; 3、服务器的类型 二、DNS解析的过程 三、DNS的相关配置文件学习 1、本地主机有关的DNS文件学习 2、本地的DNS缓存服务器的文件 3、bind软件的相关配置文件&#xff1a; 4…

Jmeter执行接口自动化测试-如何初始化清空旧数据

需求分析&#xff1a; 每次执行完自动化测试&#xff0c;我们不会执行删除接口把数据删除&#xff0c;而需要留着手工测试&#xff0c;此时会导致下次执行测试有旧数据我们手工可能也会新增数据&#xff0c;导致下次执行自动化测试有旧数据 下面介绍两种清空数据的方法 一、通…

nginx代理docker容器服务

场景描述 避免暴力服务端口&#xff0c;使用nginx代理 一个前端&#xff0c;一个后端&#xff0c;docker方式部署到服务器&#xff0c;使用docker创建的nginx代理端口请求到前端端口 过程 1 docker 安装nginx 1.1 安装一个指定版本的nginx docker pull nginx#启动一个ngi…

vuejs - - - - - 移动端设备兼容(pxtorem)

pxtorem的使用 1. 依赖安装2. vue.config.js配置3. 动态设置html的font-size大小4. 效果如图&#xff1a; 1. 依赖安装 yarn add postcss-pxtorem -D 2. vue.config.js配置 module.exports {...css: {loaderOptions: {postcss: {plugins: [require("postcss-pxtorem&quo…

22.能被7整除,并且求和。

#include<stdio.h>int main(){int i ,sum0;printf("1-1000能被7整除的数字有&#xff1a;\n");for(i1;i<1000;i){if(i%70){printf("%d ",i);sumsumi;} }printf("\n");printf("能被7整除的数字的和是&#xff1a;%d ",sum);re…

这样书写Python代码的方式,实在是太优雅了~

文章目录 前言一、在Python中配合pipe灵活使用链式写法二 、pipe中常用的管道操作函数1.使用traverse()展平嵌套数组2.使用dedup()进行顺序去重3.使用filter()进行值过滤4.使用groupby()进行分组运算5.使用select()对上一步结果进行自定义遍历运算6.使用sort()进行排序 总结关于…

线性表->栈

文章目录 前言概述栈的初始化销毁压栈出栈判断栈为不为空栈的有效个数 前言 栈相对于链表&#xff0c;稍微简单一点&#xff0c;但是栈的难点在于通过栈去理解递归算法。 概述 **栈&#xff1a;**一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。…

Redis解决缓存问题

目录 一、引言二、缓存三、Redis缓存四、缓存一致性1.缓存更新策略2.主动更新 五、缓存穿透六、缓存雪崩七、缓存击穿1.基于互斥锁解决具体业务2.基于逻辑过期解决具体业务 一、引言 在一些大型的网站中会有十分庞大的用户访问流量&#xff0c;而过多的用户访问对我们的MySQL数…

初学UE5 C++①

游戏类 1.创建所需项的类 2.创建游戏模式类&#xff0c;在该类上实现所需项&#xff0c;引入头文件和构造函数时实例化 三种时间函数类型函数和提示类型 FName、FString、FText类型相互转化 FName用FName FString用ToString&#xff08;&#xff09; FText用FText&#xff1a;…

零代码搭建:无需编程基础,轻松搭建数据自己的能源监测管理平台

零代码搭建能源管理平台&#xff0c;其核心是通过使用图形用户界面和可视化建模工具&#xff0c;来减少编写代码的工作量以及技能要求。平台拥有丰富的预定义组件&#xff0c;可以帮助管理人员快速构建应用程序。并可自定义区域框架&#xff0c;在搭建自己区域时&#xff0c;能…

说说对React Hooks的理解?解决了什么问题?

一、是什么 Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 至于为什么引入hook,官方给出的动机是解决长时间使用和维护react过程中常遇到的问题,例如: 难以重用和共享组件中的与状态相关的逻辑逻辑复杂的组件难以开…

Juniper PPPOE双线路冗余RPM配置

------------------ 浮动静态路由 set routing-options static route 0.0.0.0/0 next-hop pp0.0 qualified-next-hop pp0.1 preference 10 ----------------- RPM测试的内容,包括从哪个接口发起测试,测试ping等等 #指定探针类型用ICMP请求 #探测的目标地址 #探测间隔 #探测阈…

编译原理-语法分析-自上而下分析

文章目录 语法分析器的功能自上而下分析面临的问题LL&#xff08;1&#xff09;分析法左递归的消除直接左递归非直接左递归 消除左递归的算法消除回溯、提左因子FIRST提左因子FOLLOW集 LL(1)的分析条件LL(1)文法构造FIRST和FOLLOW集合构造每个文法符号的FIRST集合构造FOLLOW集合…

windows安装nginx

一、下载安装Nginx 1、官网下载地址&#xff1a;nginx: download 2、下载教程&#xff1a;选择最新的Stable version&#xff08;稳定版本&#xff09;下载到本地 3、下载完成后&#xff0c;解压放入本地非中文的文件夹中&#xff1a; 4、启动nginx&#xff1a;切勿直接双击n…

Django路由层

路由层&#xff08;urls&#xff09; Django的路由层是负责将用户请求映射到相应的视图函数的一层。在Django的MVT架构中&#xff0c;路由层负责处理用户的请求&#xff0c;然后将请求交给相应的视图函数进行处理&#xff0c;最后将处理结果返回给用户。 在Django中&#xff0c…

Redhat7设置国内可用yum源

问题&#xff1a; 因为最近安装了redhat7&#xff0c;在使用的时候提示系统未注册订阅&#xff0c;无法使用官方的yum源进行安装软件。为此&#xff0c;我使用centos7国内的yum源替换redhat的官方的yum源实现软件安装。 “This system is not registered with an entitlement …

机器学习算法实战实战案例代码详解

文章目录 1.问题建模数据预处理 结果分析数据探索特征工程特征选择模型融合 1.问题建模 导入库 import numpy as np import pandas as pd from sklearn.model_selection import KFold from sklearn.metrics import mean_squared_error from sklearn.preprocessing import One…