关于#HTTP状态 500 - 内部服务器错误#的问题,如何解决?代码应该没问题 使用的是IDEA

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <style type="text/css">
        body {
            background: #99FFCC;
        }

    </style>
</head>
<body>
<ul>
    <%
        //定义上载文件的最大字节
        int MAX_SIZE = 10240 * 102400;
// 创建根路径的保存变量
        String rootPath;
        String fileName="";
//声明文件读入类
        DataInputStream in;
        FileOutputStream fileOut;
//取得客户端的网络地址
        //获得服务器的名字
        String serverName = request.getServerName();
//取得互联网程序的绝对地址
        String realPath = request.getRealPath(serverName);
        realPath = realPath.substring(0,realPath.lastIndexOf("\\"));
//创建文件的保存目录
        rootPath = realPath + "\\upload\\";
//取得客户端上传的数据类型
        String contentType = request.getContentType();
        try{
            if(contentType.contains("multipart/form-data")){
//读入上传的数据
                in = new DataInputStream(request.getInputStream());
                int formDataLength = request.getContentLength();
                if(formDataLength > MAX_SIZE){
                    return;
                }
//保存上传文件的数据
                byte[] dataBytes = new byte[formDataLength];
                int byteRead;
                int totalBytesRead = 0;
//上传的数据保存在byte数组
                while(totalBytesRead < formDataLength){
                    byteRead = in.read(dataBytes,totalBytesRead,formDataLength);
                    totalBytesRead += byteRead;
                }
//根据byte数组创建字符串
                String file = new String(dataBytes);
//out.println(file);
//取得上传的数据的文件名
                String saveFile = file.substring(file.indexOf("filename=\"") + 10);
                saveFile = saveFile.substring(0,saveFile.indexOf("\n"));
                saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));
                int lastIndex = contentType.lastIndexOf("=");
//取得数据的分隔字符串
                String boundary = contentType.substring(lastIndex + 1);
//创建保存路径的文件名
                fileName = rootPath + saveFile;
//out.print(fileName);
                int pos;
                pos = file.indexOf("filename=\"");
                pos = file.indexOf("\n",pos) + 1;
                pos = file.indexOf("\n",pos) + 1;
                pos = file.indexOf("\n",pos) + 1;
                int boundaryLocation = file.indexOf(boundary,pos) - 4;
//out.println(boundaryLocation);
//取得文件数据的开始的位置
                int startPos = ((file.substring(0,pos)).getBytes()).length;
//out.println(startPos);
//取得文件数据的结束的位置
                int endPos = ((file.substring(0,boundaryLocation)).getBytes()).length;
//out.println(endPos);
//检查上载文件是否存在
                File checkFile = new File(fileName);
                if(checkFile.exists()){
                }
//检查上载文件的目录是否存在
                File fileDir = new File(rootPath);
                if(!fileDir.exists()){
                    fileDir.mkdirs();
                }
//创建文件的写出类
                fileOut = new FileOutputStream(fileName);
//保存文件的数据
                fileOut.write(dataBytes,startPos,(endPos - startPos));
                fileOut.close();
            }
            else{
            }
        }
        catch(Exception ex){
            throw new ServletException(ex.getMessage());
        }

    %>


运行结果及报错内容

img

都爆500了 还敢说代码没问题

500报错 一般指的就是提示的服务器后端代码或者逻辑错误,请注意排查代码逻辑。
报错提示 upload_jsp.java 第223行 请排查这部分代码逻辑。

错误代码500是服务器问题,这代表服务器程序有问题

将你的这里

img

改成

img

这个500是服务返回的。服务是你开发的,就和你有关。

500是服务器内部问题,就是你的处理上传逻辑的代码有问题,根据报错信息,应该是Upload_jsp页面223行代码有问题,你看下该处的逻辑

img

请把这个代码贴出来,HTTP状态500说明服务端报错,请仔细排查代码问题。

这玩意和服务端协商一下,不要把服务端的异常直接抛给前端,最后在服务端统一捕获转成约定好的返回码,这样前端可以根据返回码做判断并给出相应的提示。

把你这页面的代码一行行删除,排除看是哪行代码出错了

500报错 提示的服务器后端代码或者逻辑错误,请排查代码逻辑。
注:根据多年的经验,可能前端请求参数不符合后端接收参数的规范。可以排查是否是大附件导致,java服务器默认附件最大是10M,如果有大附件需求可以在底层配置调整

大致看了一下贴上来的代码,第43行初始化字节数组dataBytes的长度为前端提交的表单数据的长度,之后读取数据,然后取文件名,最后存文件。这样貌似取不到文件名,着重检查一下获取文件名称的部分,另外读取内容的时候定义的字节数组长度不应该是整个请求的长度,可以设置小点,每次读取以后将数据存到另外的数组中,最后创建的字符串才是请求中的完整字符串吧,89行后应该加一句fileOut.flush()才能将文件内容全部存盘。

此代码可能以多种方式呈现,如:500 Internal Server Error、500 Internal Server Error、Temporary Error(500)、Internal Server Error、HTTP 500 Internal Error、500 Error、HTTP Error 500、500.That’s an error。

500内部服务器错误修复方法

1、尝试刷新页面,偶尔简单的重新加载将解决难题。

2、如果刷新页面不起作用,请尝试清除浏览器cookie和缓存。

3、如果您在网站上发现此错误,则解决方案大不相同。请联系您的内容管理系统或网站管理员以获取更多帮助。

文档regsvr32 %windir% /system32/*.dll 另存为批处理cmd文件重新注册

要检查服务端报什么,发出来,帮你分析定位原因。

你都没把报错地方的代码贴出来怎么看啊

500错误,说明服务端有问题,服务端也是你开发的,servlet报错,应该是jar冲突,去掉servlet包,采用tomcat自带的。