You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
GenFlightRec/src/servlet/ChatServlet.java

82 lines
3.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONObject;
import java.util.logging.Logger;
import java.util.logging.Level;
public class ChatServlet extends HttpServlet {
private static final String API_KEY = "sk-0ad1eaf5194249439f82698893607bef"; // 请替换为您的实际 API 密钥
private static final String APP_ID = "1d2b00751a914efd84ea4b354fffd962"; // 请替换为您的实际应用 ID
private static final String API_URL = "https://dashscope.aliyuncs.com/api/v1/apps/" + APP_ID + "/completion";
private static final Logger LOGGER = Logger.getLogger(ChatServlet.class.getName());
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
String prompt = request.getParameter("prompt");
try {
HttpClient client = HttpClient.newHttpClient();
JSONObject requestBody = new JSONObject();
JSONObject input = new JSONObject();
input.put("prompt", prompt);
requestBody.put("input", input);
requestBody.put("parameters", new JSONObject());
HttpRequest apiRequest = HttpRequest.newBuilder()
.uri(URI.create(API_URL))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + API_KEY)
.POST(HttpRequest.BodyPublishers.ofString(requestBody.toString()))
.build();
HttpResponse<String> apiResponse = client.send(apiRequest, HttpResponse.BodyHandlers.ofString());
/*
if (apiResponse.statusCode() == 200) {
PrintWriter out = response.getWriter();
out.print(apiResponse.body());
out.flush();
*/
if (apiResponse.statusCode() == 200) {
String responseBody = apiResponse.body();
String formattedResponse = formatResponse(responseBody); // 格式化响应
PrintWriter out = response.getWriter();
out.print(formattedResponse);
out.flush();
} else {
LOGGER.log(Level.SEVERE, "API request failed with status code: " + apiResponse.statusCode());
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.getWriter().write("{\"error\":\"API请求失败\"}");
}
} catch (Exception e) {
LOGGER.log(Level.SEVERE, "Error in ChatServlet", e);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.getWriter().write("{\"error\":\"服务器错误: " + e.getMessage() + "\"}");
}
}
// 格式化函数
private String formatResponse(String responseBody) {
// 假设responseBody是字符串形式的JSON您可能需要先解析它
// 这里简单示例对字符串进行替换和格式化
return responseBody
.replaceAll("\\*\\*(.*?)\\*\\*", "<strong>$1</strong>") // 加粗文本
.replaceAll("\\n", "<br>") // 替换换行符
.replaceAll("(\\d+\\. )", "<li>$1") // 列表项处理
.replaceAll("\\s+", " "); // 去除多余空白
}
}