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 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("\\*\\*(.*?)\\*\\*", "$1") // 加粗文本 .replaceAll("\\n", "
") // 替换换行符 .replaceAll("(\\d+\\. )", "
  • $1") // 列表项处理 .replaceAll("\\s+", " "); // 去除多余空白 } }