SpingMVC框架:fileUpload组件原理和实现

QUESTION:fileUpload组件原理和实现

 

ANSWER:

 

目录

QUESTION:fileUpload组件原理和实现

ANSWER:

一:异常产生

查询了一系列博客后,发现这是由于上传文件的大小超过了可以上传的临时文件限制。

二:fileUpload组件及Java Web中文件上传的原理方法

2.1基本原理

2.2实现代码

2.3重要方法

2.4注意事项:


 

一:异常产生

在刚学习springMVC框架时,上传文件出现了以下HTTP Status 500 – Internal Server Error:

Exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. C:\Program Files\apache-tomcat-8.5.38\temp\upload_2f146db1_be01_4311_a3d8_e6c7cd69c8d3_00000002.tmp (拒绝访问。)org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1013)org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)javax.servlet.http.HttpServlet.service(HttpServlet.java:661)org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)javax.servlet.http.HttpServlet.service(HttpServlet.java:742)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

Root Cause

org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. C:\Program Files\apache-tomcat-8.5.38\temp\upload_2f146db1_be01_4311_a3d8_e6c7cd69c8d3_00000002.tmp (拒绝访问。)org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:351)org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:115)com.xy.controller.UserController.fileUpload(UserController.java:36)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:498)org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)javax.servlet.http.HttpServlet.service(HttpServlet.java:661)org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)javax.servlet.http.HttpServlet.service(HttpServlet.java:742)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

Root Cause

java.io.FileNotFoundException: C:\Program Files\apache-tomcat-8.5.38\temp\upload_2f146db1_be01_4311_a3d8_e6c7cd69c8d3_00000002.tmp (拒绝访问。)java.io.FileOutputStream.open0(Native Method)java.io.FileOutputStream.open(FileOutputStream.java:270)java.io.FileOutputStream.<init>(FileOutputStream.java:213)java.io.FileOutputStream.<init>(FileOutputStream.java:162)org.apache.commons.io.output.DeferredFileOutputStream.thresholdReached(DeferredFileOutputStream.java:178)org.apache.commons.io.output.ThresholdingOutputStream.checkThreshold(ThresholdingOutputStream.java:224)org.apache.commons.io.output.ThresholdingOutputStream.write(ThresholdingOutputStream.java:128)org.apache.commons.fileupload.util.Streams.copy(Streams.java:107)org.apache.commons.fileupload.util.Streams.copy(Streams.java:70)org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:347)org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:115)com.xy.controller.UserController.fileUpload(UserController.java:36)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:498)org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)javax.servlet.http.HttpServlet.service(HttpServlet.java:661)org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)javax.servlet.http.HttpServlet.service(HttpServlet.java:742)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

Note The full stack trace of the root cause is available in the server logs.

查询了一系列博客后,发现这是由于上传文件的大小超过了可以上传的临时文件限制。

 

二:fileUpload组件及Java Web中文件上传的原理方法

2.1基本原理

给出官网文档:upLoad。

组件FileUpload依赖于Commons IO组件,因此在继续之前,要确保在你的工程classpath中有描述页中提到的相应版本。(这里FileUpload版本为:commons- fileupload-1.2.1,Commons IO版本为:commons-io-1.4)。

最简单的示例(官网):

// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();// Configure a repository (to ensure a secure temp location is used)
ServletContext servletContext = this.getServletConfig().getServletContext();
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);// Parse the request
List<FileItem> items = upload.parseRequest(request);

原理:

上传的文件要求包括一个根据RFC 1867(在HTML中基于表单的文件)编码的选项列表清单。组件FileUpload可以解析这个请求,并给你的应用程序提供一份独立上传的项目清单。无论每个项目背后如何执行都实现了FileItem接口。

这里将描述组件FileUpload库的普通API,这些API比较简单。不过,对于最终的实现,你可以参考最新的API流。

每一个文件项目都有一些属性,这些可能在你的应用程序中应用到。比如:每一个项目有一个名称name和内容类型content type,并提供了一个 InputStream访问其数据。另一方面,你处理项目的方法可能有所不同,这个依赖于是否这个项目是一个规则的表单域,即:这个数据是来自普通的表单文本,还是普通的HTML域或是一个上传文件。在FileItem接口中提供了处理这些问题的方法,可以更加方便的去访问这些数据。

组件FileUpload使用FileItemFactory工厂创建新的文件项目。这个给了组件FileUpload很大的灵活性。这个工厂拥有怎样创建项目的最终控制权。工厂执行过程中上传项目文件的临时数据可以存储在内存中或硬盘上。这个依赖于上传项目的大小(即:数据的字节)。不过这种行为可以在你的应用程序中适当的自定制。

解析:

在实现上传项目之前,当然需要解析这个请求。确保这个请求的确是一个正确的上传文件,组件FileUpload为了使这个判断简单,提供了一个静态的方法去做这个事情。

// 检测我们是否一个文件上传的请求

boolean isMultipart = ServletFileUpload.isMultipartContent(request);

示例:

最简单的使用情况如下:

* 上传项目只要足够小,就应该将其保存在内存中。

* 较大的项目应该被写入到硬盘的临时文件中。

* 应该避免有非常大的上传项目。

* 设置项目默认的在内存中所占的空间,限制最大的上传请求,并设定临时文件 的位置。

处理这种情况下的请求非常的简单:

// 创建磁盘工厂

FileItemFactory factory = new DiskFileItemFactory();

// 创建处理工具

ServletFileUpload upload = new ServletFileUpload(factory);

// 解析

List <FileItem> items = upload.parseRequest(request);

这就是我们真正需要的全部代码。

处理的结果是生成了一个文件项目列表,每个文件项目实现一个FileItem接口。下面将介绍如何处理这些项目。

 

控制:

如果你的使用情况和上面描述的例子很接近,但是你需要在一点更多的控制限定文件的大小或临时文件的存放位置。你可以很容易的自定义上传实例或文件项目或两者的行为。下面例子展示了几种配置选项:

// 创建磁盘工厂

DiskFileItemFactory factory = new DiskFileItemFactory();

// 设置参数

factory.setSizeThreshold(yourMaxMemorySize);

factory.setRepository(yourTempDirectory);

// 创建处理工具

ServletFileUpload upload = new ServletFileUpload(factory);

// 设置最大允许的尺寸

upload.setSizeMax(yourMaxRequestSize);

// 解析

List <FileItem> items = upload.parseRequest(request);

当然,每一个配置处理方法都是独立于其他方法的,但是如果你想一次性配置这个工厂,你可以使用工厂的另一个重载方法。像这样:

DiskFileItemFactory factory = new DiskFileItemFactory( yourMaxMemorySize, yourTempDirectory);

详细的接口文档:http://commons.apache.org/proper/commons-fileupload/javadocs/api-release/index.html

2.2实现代码

使用fileUpload固定步骤:

    创建工厂类:DiskFileItemFactory factory=new DiskFileItemFactory();
    创建解析器:ServletFileUpload upload=new ServletFileUpload(factory);
    使用解析器解析request对象:List<FileItem> list=upload.parseRequest(request);

 

首先导入相关包。见上文。

1.jsp代码:

<%--Created by IntelliJ IDEA.User: 杨路恒Date: 2019/8/17 0017Time: 11:24
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>文件上传</title>
</head>
<body><form action="UserController/fileUpload1" method="post" enctype="multipart/form-data">选择文件:<input type="file" name="upload"><br>上传:<input type="submit" value="上传" name="uploadFile"></form>
</body>
</html>

2.配置springmvc-xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--扫描spring的包--><context:component-scan base-package="com.xy"></context:component-scan><!--视图解析器对象--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"></property><property name="suffix" value=".jsp"></property></bean><!--前端控制器,哪些静态资源不拦截--><mvc:resources location="/css/" mapping="/css/**"/>  <!-- 样式    --><mvc:resources location="/images/" mapping="/images/**"/>  <!-- 图片    --><mvc:resources location="/js/" mapping="/js/**"/>  <!-- javascript --><!--开启springMVC的支持,类型转换器生效--><mvc:annotation-driven></mvc:annotation-driven></beans>

3.配置web.xml:

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--前端控制器--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--中文乱码过滤器--><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>

4.控制器代码:

package com.xy.controller;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.List;@Controller
@RequestMapping("/UserController")
public class UserController {/*** 文件上传* @return*/@RequestMapping("/fileUpload1")public String fileUpload(HttpServletRequest request) throws Exception {System.out.println("文件上传");//使用fileupload组件上传文件//上传路径String path=request.getSession().getServletContext().getRealPath("/uploads");//判断该路径是否存在File file=new File(path);if (!file.exists()){file.mkdirs();}//解析request对象获取上传文件项DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory();
//        diskFileItemFactory.setSizeThreshold(1024*1024);    //设置内存缓冲区大小,系统默认值10KBFile temp=new File(request.getSession().getServletContext().getRealPath("/temp"));temp.mkdirs();System.out.println("建立成功");diskFileItemFactory.setRepository(temp);System.out.println(System.getProperty("java.io.tmpdir"));ServletFileUpload servletFileUpload=new ServletFileUpload(diskFileItemFactory);servletFileUpload.setFileSizeMax(100*1024*1024);//解析requestList<FileItem> items=servletFileUpload.parseRequest(request);for (FileItem item:items) {//判断当前item是否是上传文件对象if (item.isFormField()){//说明普通表单向}else {//说明上传文件项//获取文件名称String fileName=item.getName();//完成文件上传item.write(new File(path,fileName));System.out.println("写入成功");//删除临时文件,系统会自动删除
//                item.delete();}}return "success";}
}

5.success代码:

<%--Created by IntelliJ IDEA.User: 杨路恒Date: 2019/8/17 0017Time: 11:21
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><h1>文件上传成功</h1>
</body>
</html>

1.普通表单提交默认enctype="application/x-www-form-urlencoded";但是当表单中存在文件类型时,需要设置enctype="multipart/form-data",它不对字符进行编码,用于发送二进制的文件(即所有文件类型,如视频、图片、音乐、文档都可以用此类型entype);还有一种enctype="text/plain"用于发送纯文本内容。

2.表单请求方式必须为post。

3.接收时不能再用request.getParameter(),而是request.getInputStream()解析二进制流,得到ServletInputStream对象。
 

2.3重要方法

1.DiskFileItemFactory:

DiskFileItemFactory有两个方法 :setSizeThreshold和setRepository

 setRepository方法用于设置当上传文件尺寸大于setSizeThreshold方法设置的临界值时,将文件以临时文件形式保存在磁盘上的存放目录。有一个对应的获得临时文件夹的 File getRespository() 方法。
        注意:当从没有调用此方法设置临时文件存储目录时,默认采用系统默认的临时文件路径,可以通过系统属性 java.io.tmpdir 获取。如下代码:
System.getProperty("java.io.tmpdir");
Tomcat系统默认临时目录为“<tomcat安装目录>/temp/”。
 setSizeThreshold方法说明:
  
 Apache文件上传组件在解析上传数据中的每个字段内容时,需要临时保存解析出的数据,以便在后面进行数据的进一步处理(保存在磁盘特定位置或插入数据库)。因为Java虚拟机默认可以使用的内存空间是有限的,超出限制时将会抛出“java.lang.OutOfMemoryError”错误。如果上传的文件很大,例如800M的文件,在内存中将无法临时保存该文件内容,Apache文件上传组件转而采用临时文件来保存这些数据;但如果上传的文件很小,例如600个字节的文件,显然将其直接保存在内存中性能会更加好些。
       setSizeThreshold方法用于设置是否将上传文件已临时文件的形式保存在磁盘的临界值(以字节为单位的int值),如果从没有调用该方法设置此临界值,将会采用系统默认值10KB。对应的getSizeThreshold() 方法用来获取此临界值。

2.FileItem:

    String getFieldName():获取表单项的name的属性值。
    String getName():获取文件字段的文件名。如果是普通字段,则返回null
    String getString():获取字段的内容。如果是普通字段,则是它的value值;如果是文件字段,则是文件内容。
    String getContentType():获取上传的文件类型,例如text/plain、image。如果是普通字段,则返回null。
    long getSize():获取字段内容的大小,单位是字节。
    boolean isFormField():判断是否是普通表单字段,若是,返回true,否则返回false。
    InputStream getInputStream():获得文件内容的输入流。如果是普通字段,则返回value值的输入流。

2.4注意事项:

1.文件名中文乱码处理:servletFileUpload.setHeaderEncoding("utf-8") 或 request.setCharacterEncoding("utf-8");
2.表单普通字段中文乱码处理:new String(str.getBytes("iso-8859-1","utf-8"));
3.设置内存缓冲区的大小,默认为10KB:diskFileItemFactory.setSizeThreshold(1024*1024);
4.指定临时文件目录,如果单个文件的大小超过内存缓冲区,该文件将会临时缓存在此目录下diskFileItemFactory.setRepository(file);
5.设置单个文件大小限制,如果有某个文件超过此大小,将抛出FileUploadBase.FileSizeLimitExceededException:servletFileUpload.setFileSizeMax(1024*1024*10);
6.设置所有文件,也就是请求大小限制,如果文件总和超过此大小,将抛出FileUploadBase.SizeLimitExceededException:servletFileUpload.setSizeMax(1024*1024*20);
7.利用UUID生成伪随机字符串作为文件名避免重复:UUID.randomUUID().toString();
8.将文件写到硬盘上。写完之后,系统会自动将放在临时文件目录的该文件删除:fileItem.write(new File(path,fileName));
 

fileUpload用来上传文件,主要任务解析request:

parseRequest(request)

 

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

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

相关文章

科学家在类脑芯片上实现类似LSTM的功能,能效高1000倍

来源&#xff1a;机器学习研究组订阅格拉茨技术大学的计算机科学家在 Nature 子刊上发表的一篇论文表明&#xff0c;他们找到了一种在神经形态芯片上模拟 LSTM 的方案&#xff0c;可以让类脑神经形态芯片上的 AI 算法能效提高约 1000 倍。随着智能手机的普及&#xff0c;手机游…

人类为什么活得这么累?Nature论文解开谜底:人总是选择做加法来解决问题

来源&#xff1a;【iNature】想象一座由乐高积木制成的桥。一侧有三个支撑件&#xff0c;另外两个。你将如何稳定这座桥&#xff1f;一项新的研究表明&#xff0c;大多数人会添加一块&#xff0c;这样每边都有三个支撑。但是为什么不移除一块&#xff0c;让每一侧都有两个支撑呢…

SSM:Spring整合MyBatis框架时出现 java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManaged

QUESTION:出现异常&#xff1a;java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer ANSWER: 这是spring、springMVC、mybatis、MyBatis-Spring版本冲突问题产生的异常&#xff0c;去mybatis​​​​​​…

研究速递:使用AI应对腐败的潜力和风险

来源&#xff1a;Peter东腐败是当今社会面临的一大顽疾&#xff0c;近年来&#xff0c;已有一些尝试&#xff0c;通过人工智能的方法应对腐败。自然机器智能的观点论文&#xff1a;“使用人工智能来对抗腐败的前景和危险”&#xff0c;指出相比自上而下的使用AI应对腐败&#x…

Python中出现:RunTimeError:implement_array_function method already has a docstring.异常解决

QUESTON:Python中出现:RunTimeError:implement_array_function method already has a docstring.异常解决 ANSWER: 在网上查了一上午&#xff0c;发现写的在我这都没有解决问题&#xff0c;于是我费尽心机自己动手解决。 我在cmd命令行将本机上的numpy卸载后&#xff0c;重新…

谷歌背后的数学

来源&#xff1a;卢昌海作者&#xff1a;赛先生1引言在如今这个互联网时代&#xff0c; 有一家公司家喻户晓——它自 1998 年问世以来&#xff0c; 在极短的时间内就声誉鹊起&#xff0c; 不仅超越了所有竞争对手&#xff0c; 而且彻底改观了整个互联网的生态。这家公司就是当今…

Python中出现:AttributeError: module 'numpy' has no attribute 'dtype'问题解决

QUESTION:Python中出现:AttributeError: module numpy has no attribute dtype问题解决 ANWSER: 这个问题可是困扰了我一天的时间&#xff0c;心情很是不好&#xff0c;这不是技术上的问题&#xff0c;而是由于软件或者库的问题。 在网上寻找答案无果&#xff0c;本着暴力的方…

梅宏院士:如何构造人工群体智能?| 智源大会特邀报告回顾

来源&#xff1a;智源社区导读&#xff1a;在自然界当中&#xff0c;群体智能广泛存在&#xff0c;诸如蜂群、蚁群以及鱼群的聚集。而从宏观上说&#xff0c;人类社会的不断发展和演化也是一种群体智能现象&#xff0c;绝大多数文明成果都是人类个体在长期群体化、社会化的生产…

Maven:构建web工程出现Failed to execute goal org.apache:maven-archetype-plugin:3.1.1:generate (default-cli)

QUESTION:Maven:构建web工程出现Failed to execute goal org.apache:maven-archetype-plugin:3.1.1:generate (default-cli) ANSWER: 在无意间删除了一个工程后&#xff0c;重新构建web工程时出现该问题&#xff0c;一时间煞费苦心&#xff0c;看了好多都是说jre路径问题&…

菲尔兹奖得主丘成桐院士:数学之美与应用

来源&#xff1a;微信公众号&#xff1a;全景式数学丘成桐院士自然界的美是研究基础数学的灵感来源&#xff0c;几何学有着非常漂亮的理论和重要的应用。丘成桐院士带领学生发展的计算共形几何学&#xff0c;在现代工程、医学图像等中发挥着巨大的作用。从数学的角度&#xff0…

Maven:解决jar包冲突和企业开发常用编写

QUESTION:Maven:解决jar包冲突和企业开发常用编写 目录 QUESTION:Maven:解决jar包冲突和企业开发常用编写 ANSWER&#xff1a; 一&#xff1a;Maven的作用 二&#xff1a;解决jar包冲突&#xff1a; 三&#xff1a;版本锁定&#xff1a; ANSWER&#xff1a; 一&#xff…

SSM:Maven整合ssm时的步骤

QUESTION:SSM:Maven整合ssm时的步骤 目录 QUESTION:SSM:Maven整合ssm时的步骤 ANSWER: ANSWER: 工程结构&#xff1a; 1.在新建的web工程中&#xff0c;pom.xml文件中导入以下坐标&#xff1a; <properties><project.build.sourceEncoding>UTF-8</project.bu…

日研究称小行星样本含多种氨基酸,系首次在地球外确认氨基酸存在

来源&#xff1a;彭拜新闻当地时间6月6日&#xff0c;有日本政府相关人士表示&#xff0c;日本宇宙航空研究开发机构&#xff08;JAXA&#xff09;在“隼鸟2号”小行星探测器带回的岩石样本中&#xff0c;发现了超过20种氨基酸。这是首次在地球以外确认氨基酸的存在。是小行星“…

Maven:私服Nexus的安装

QUESTION:Maven:私服Nexus的安装 目录 QUESTION:Maven:私服Nexus的安装 ANWSER: 1.1 简介&#xff1a; 1.2 下载&#xff1a; 1.3 配置nexus 1.4 nexus测试 1.5 安装并启动nexus 1.6 nexus启动失败处理 ANWSER: 1.1 简介&#xff1a; Nexus 是Maven仓库管理器&#x…

译科技|人工智能进化——那些不得不面对的局限性

来源&#xff1a;The Next Web作者&#xff1a;Charles Simon翻译&#xff1a;王忠伟审校&#xff1a;黄玉叶"认清现实&#xff1a;AI虽不完美&#xff0c;但它的本事令人印象深刻。"从医学成像、语言翻译到面部识别、自动驾驶汽车&#xff0c;人工智能的案例无处不在…

Maven:导入Oracle的jar包时出现错误

QUESTION:Maven&#xff1a;导入Oracle的jar包时出现错误 目录 QUESTION:Maven&#xff1a;导入Oracle的jar包时出现错误 ANSWER: 一&#xff1a;问题分析 二&#xff1a;解决方案 ANSWER: 一&#xff1a;问题分析 一开始我在导入oracle时以为是编译器的原因&#xff0c;于…

“数字孪生”十问:从概念到应用

来源&#xff1a;北京航空航天大学 自动化科学与电气工程学院 数字孪生研究组本文对以下十个问题进行了深入分析与思考&#xff0c;以期抛砖引玉&#xff0c;为研究者更好理解数字孪生&#xff0c;为决策者理性和正确对待数字孪生&#xff0c;为实践者更好落地应用数字孪生提供…

图灵奖得主 Adi Shamir最新理论,揭秘对抗性样本奥秘 | 智源大会特邀报告回顾...

来源&#xff1a; 智源社区导读&#xff1a;为什么模型会将「猫」识别成「牛油果酱」&#xff0c;将「猪」识别成「飞机」&#xff1f;要回答这个问题&#xff0c;就涉及到对抗性样本&#xff08;Adversarial examples&#xff09;。对抗性样本指在原始样本添加一些人眼无法察觉…

SSM:出现Connections could not be acquired from the underlying database异常的解决

QUESTION:SSM&#xff1a;出现Connections could not be acquired from the underlying database异常的解决 ANSWER: 近期在学习ssm框架做小demo时&#xff0c;配了半天的框架&#xff0c;好不容易解决了maven中的jar包错误&#xff0c;现在运行tomcat服务器时出现数据库异常…

因果性与因果模型 | 中国人民大学哲学与认知科学明德讲坛

来源&#xff1a;中国人民大学哲学与认知科学明德讲坛第25期《因果性与因果模型》文字稿主持人&#xff1a;袁园 嘉宾&#xff1a;张双南、李伟、朱锐 主办&#xff1a;中国人民大学哲学与认知科学跨学科交叉平台、服务器艺术 协办&#xff1a;神经现实 封面&#xff1a;Dan …