SpringMVC跨域上传图片出现的405错误及409错误解决方式

第一步,创建两个web项目,创建项目如下所示:
其中在这里插入图片描述其中fileupload_server用作图片服务器使用,day1021_springmvc用作上传图片的web项目使用。
第二步,分别将两个项目发布两个tomcat服务器上,注意,此刻我们所模拟的是在一台电脑上进行跨服务器上传图片操作的。
SpringMVC跨域上传图片出现的405错误及409错误解决方式_第1张图片
将fileupload_server部署到tomcat-9.0.36服务器上,注意修改端口。然后将day1021_springmvc部署到tomcat-8.5.43服务器上。
SpringMVC跨域上传图片出现的405错误及409错误解决方式_第2张图片

然后点击Apply–>OK,这样就部署完毕了。
第三步,编码时刻就到了。首先是fileupload_server图片服务器编码:
其架构是这样的:
SpringMVC跨域上传图片出现的405错误及409错误解决方式_第3张图片
我们只是默认在Idea中创建了一个使用maven构建的web项目,然后在webapp目录下创建了uploads文件夹,其中index.jsp页面代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>图片服务器</title>
</head>
<body>
        <h2>Hello springmvc跨服务器上传图片</h2>
</body>
</html>

只是作为一个简单的提示页面罢了。
接下来是day1021_springmvc的编码过程,同样是一个maven构建的web项目。
第一步:编写一个文件上传的页面,其代码如下所示:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
    <%--springmvc跨服务器上传文件--%>
    <h3>springmvc跨服务器上传文件</h3>
    <form action="user/fileupload_twoServer" method="post" enctype="multipart/form-data">
        选择文件:<input type="file" name="upload"><br/>
        <input type="submit" value="上传文件">
    </form>
</body>
</html>

然后编写相应的controller类,其代码如下所示:

package com.wangchao.day1024.returnValue.controller;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import org.apache.commons.fileupload.FileItem;
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 org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

@Controller
@RequestMapping("/day1024/user")
public class FileUpload {
     
    //springmvc跨服务器上传文件
    @RequestMapping(path = "/fileupload_twoServer")
    public String fileupload_twoServer(MultipartFile upload) throws IOException {
     
        System.out.println("springmvc跨服务器上传文件");
        //定义图片服务器请求路径
        String path = "http://localhost:9090/fileupload_server/uploads/";
        //获取到上传文件的名称
        String filename = upload.getOriginalFilename();
        String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();
        //把文件的名称唯一化
        filename = uuid+"_"+filename;
        //向图片服务器上传文件
        //创建客户端对象
        Client client = Client.create();
        System.out.println("client : "+client);
        //连接图片服务器
        WebResource resource = client.resource(path + filename);
        //上传文件
        resource.put(upload.getBytes());
        return "success";
    }
}

至于springmvc.xml配置如下所示:


<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/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc.xsd
 http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context.xsd">
    
    <context:component-scan base-package="com.wangchao">context:component-scan>
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/day21/">property>
        <property name="suffix" value=".jsp">property>
    bean>
    
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.wangchao.day1022.param1.converter.StringToDateConverter">bean>
            set>
        property>
    bean>
    
    <mvc:resources location="/css/" mapping="/css/**"/>
    <mvc:resources location="/images/" mapping="/images/**"/>
    <mvc:resources location="/js/" mapping="/js/**"/>

    
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10485760">property>
    bean>
    
    
    <mvc:annotation-driven conversion-service="conversionService">mvc:annotation-driven>
beans>

web.xml配置如下所示:



<web-app>
  <display-name>Archetype Created Web Applicationdisplay-name>
    
    <filter>
        <filter-name>characterEncodingFilterfilter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
        
        <init-param>
            <param-name>encodingparam-name>
            <param-value>UTF-8param-value>
        init-param>
    filter>
    <filter-mapping>
        <filter-name>characterEncodingFilterfilter-name>
        <url-pattern>/*url-pattern>
    filter-mapping>
    
    <servlet>
        <servlet-name>springmvcDispatcherServletservlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
        
        <init-param>
            <param-name>contextConfigLocationparam-name>
            <param-value>classpath:1021_springmvc.xmlparam-value>
        init-param>
        
        <load-on-startup>1load-on-startup>
    servlet>
    <servlet-mapping>
        <servlet-name>springmvcDispatcherServletservlet-name>
        <url-pattern>/url-pattern>
    servlet-mapping>
web-app>

代码部分完成,可以将项目发布到服务器了,首先将fileupload_server发布到tomcat-9.0.36服务器上。然后将day1021_springmvc发布到tomcat-8.5.43服务器上。结果我们发现当我们访问图片上传页面进行图片上传提交时,报了405错误,这是因为,我们是在同一电脑上使用的tomcat服务器,需要修改其中一个tomcat服务器中的配置文件,在config-web.xml文件中找到:

<servlet>
        <servlet-name>defaultservlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServletservlet-class>
        <init-param>
            <param-name>debugparam-name>
            <param-value>0param-value>
        init-param>
        <init-param>
            <param-name>listingsparam-name>
            <param-value>falseparam-value>
        init-param>
        <load-on-startup>1load-on-startup>
    servlet>

然后在其中添加如下代码:
readonly false
然后在上传照片时,发现又会报出409错误,这是在fileuoload_server服务器上缺少一个uploads文件夹,所以需要在fileupload_server\target\fileupload_server文件夹下手动创建一个uploads文件夹,然后就可以成功上传图片了。

写在最后:任何成功都是靠一点一滴的坚持,最终就会攀上顶峰,大家加油!!!

你可能感兴趣的:(Java,java,tomcat,web,springmvc)