java - 状态 500 – Java Servlet 上的内部服务器错误

标签 java jsp servlets tomcat9

当我尝试发布请求时,我的 JSP 中出现状态 500 – 内部服务器错误的错误。 所以我需要执行 http 请求以在 Dropbox 上创建具有某些名称的文件夹(测试等) 我有 Tomcat 9.0.30 并添加 jSTL-1-2.jar 我有一个 DropboxActioner 类

package ua.oleh.application;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class DropboxActioner {
    private  String token ="Bearer <my token>";
    public void createFolder(String path) throws Exception {

        try {
            URL url = new URL("https://api.dropboxapi.com/2/files/create_folder");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            String parameters = "{\"path\": \"" + path + "\"}";
            conn.setRequestProperty("Content-Type", "application/json");
            conn.addRequestProperty ("Authorization", token);
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            DataOutputStream writer = new DataOutputStream(conn.getOutputStream());
            writer.writeBytes(parameters);
            writer.flush();
            if (writer != null)
                writer.close();
            if (conn.getResponseCode() != 200) {
                System.out.println(conn.getResponseMessage());
                throw new RuntimeException("Failed : HTTP error code : "
                        + conn.getResponseCode());
            }
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    (conn.getInputStream())));
            String output;
            System.out.println("Output from Server .... \n");
            while ((output = br.readLine()) != null) {
                System.out.println(output);
            }
            conn.disconnect();
        } catch (MalformedURLException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();
        }
    }
}

如果我用 public static void main 尝试它,它就会起作用。 我需要在需要输入 token 和文件夹名称的网页上执行此操作。 为了进行测试,我没有从 JSP 获取此参数并将其静态写入代码中。 我有JSP页面


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>DropboxDemo</title>
</head>
<body>
Enter token
<input id ="key"></input>
Enter folder Name
<input id ="folder_name"></input>
<button id="login">Login</button>
<button id ="create">Create folder</button>
<%@page import="ua.oleh.application.DropboxActioner" %>
<% DropboxActioner dropboxActioner = new DropboxActioner();%>
<% String token;%>
<% String name = request.getParameter("name");%>
<%= dropboxActioner.createFolder(name)%>
</body>
</html>

我在 Chrome 上遇到错误

Type Exception Report

Message Unable to compile class for JSP:

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: [18] in the jsp file: [/index.jsp]
The method print(boolean) in the type JspWriter is not applicable for the arguments (void)
15: <% DropboxActioner dropboxActioner = new DropboxActioner();%>
16: <% String token;%>
17: <% String name = request.getParameter("name");%>
18: <%= dropboxActioner.createFolder(name)%>
19: </body>
20: </html>


Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:213)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:519)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:392)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:362)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:346)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:605)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    org.apache.jasper.servlet.JspServlet.init(JspServlet.java:139)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:748)
Note The full stack trace of the root cause is available in the server logs.

我在 Youtube 上查看了一个指南,其中程序员使用 Java 类中的方法获取数据

<% DropboxActioner dropboxActioner = new DropboxActioner();%>
<% String token;%>
<% String name = request.getParameter("name");%>
<%= dropboxActioner.createFolder(name)%>

但是我有一个错误。 我该如何解决它? 也许我只能从 jsp/html 读取数据到 Java 类并在 public static void main 中运行它,并且不将 jsp 页面与 Java 类连接?

最佳答案

行:

<%= dropboxActioner.createFolder(name)%>

表示输出调用 dropboxActioner.createFolder(name) 返回的值.

但是你已经声明了createFolder返回void 。所以JSP无法打印它。

How i can resolve it?

更改方法以返回您想要输出的字符串。该方法当前正在将内容写入标准输出。这可能最终会出现在日志文件中。

I need only create folder. So i need convert void to String and return some string like "finish" etc?

这将是一种方法。另一个会替换 <%=<%这样它就不会尝试渲染该方法的(不存在的)输出。

关于java - 状态 500 – Java Servlet 上的内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59435190/

相关文章:

java - 调用servlet将JSON格式的数据写入服务器中的URL

javascript - 如何在javascript和servlet之间发送和接收json数据?

java - 刷新数据时发生异常。这是什么,为什么我会得到这个?

java - 将 xml 转换为 java bean

java - 为什么要使用compare和comparator接口(interface)

java - 递归方法是如何添加自己的?

java - 如何恢复平衡服务器上的端口

javascript - 在表单中输入的数据未发送到 Oracle 数据库

html - 背景图片未添加到 div 中

javascript - 将 json 响应重定向到 Ajax PUT 到 JSP 中以供 EL 解析