2024.5.31

今天将网络安全部分的后端servlet代码进行了完善,相关代码如下:

package com.example.three;

import com.fasterxml.jackson.databind.JsonNode;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

//@WebServlet(name="FinishServlet",value="/finishpro-servlet")
public class FinishServlet extends HttpServlet {

    public String getAccessToken() throws Exception {
        String clientId = "9B8HzZ4FpaUWW5mt975LEzoP";
        String clientSecret = "KHHt5wIrGjIRZmLMiXzo6UdXYGOwmMSC";
        String url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + clientId + "&client_secret=" + clientSecret;

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .header("Content-Type", "application/json")
                .header("Accept", "application/json")
                .POST(HttpRequest.BodyPublishers.noBody())
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        ObjectMapper mapper = new ObjectMapper();
        Map<String, Object> responseMap = mapper.readValue(response.body(), Map.class);

        return (String) responseMap.get("access_token");
    }
    private static final long serialVersionUID=1L;
    JDBC jdbc=new JDBC();

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
        // 设置响应内容类型
        response.setContentType("application/json");

        // 从请求中读取 JSON 数据
        JsonObject requestData = new Gson().fromJson(request.getReader(), JsonObject.class);

        String problem=requestData.get("problem").getAsString();
        String answer=requestData.get("answer").getAsString();
        String username=requestData.get("username").getAsString();

        //获取token
        try {
            String accessToken = getAccessToken();
            System.out.println(accessToken);
            String url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/chatglm2_6b_32k?access_token=" + accessToken;

            // Constructing the payload
            Map<String, Object> payloadMap = new HashMap<>();
            Map<String, String> message = new HashMap<>();
            message.put("role", "user");
            String st = "问题:" + problem + "用户的答案:" + answer + ",根据问题以及用户的答案进行评价与纠正,控制在200字以内。";
            message.put("content", st);
            payloadMap.put("messages", new Map[]{message});

            ObjectMapper mapper = new ObjectMapper();
            String payload = mapper.writeValueAsString(payloadMap);

            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request1 = HttpRequest.newBuilder()
                    .uri(URI.create(url))
                    .header("Content-Type", "application/json")
                    .POST(HttpRequest.BodyPublishers.ofString(payload))
                    .build();

            HttpResponse<String> response1 = client.send(request1, HttpResponse.BodyHandlers.ofString());

            // Print the response
            System.out.println(response1.body());
            JsonNode responseNode = mapper.readTree(response1.body());
            JsonNode resultNode = responseNode.get("result");

            answer = resultNode.asText();

        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println(problem);

        String number="";
        String finishresult="";


        try {
            String sql1="select * from threelogin where user = '"+username+"'";
            Statement statement=jdbc.getConnection().createStatement();
            ResultSet res=statement.executeQuery(sql1);
            while(res.next()){
                number=res.getString("number");
                finishresult=res.getString("finishresult");
            }

            res.close();
            statement.close();
            jdbc.getConnection().close();

            if(Integer.parseInt(number)>=5){
                number="0";
                finishresult=null;
            }
            number= Integer.toString(Integer.parseInt(number)+1);
            if(finishresult==null)
                finishresult=(Integer.toString(Integer.parseInt(number))+"、"+problem+"\n答:"+answer+"\n\n\n\n\n");
            else
                finishresult+=(Integer.toString(Integer.parseInt(number))+"、"+problem+"\n答:"+answer+"\n\n\n\n\n");

            String sql2="update threelogin set number = '"+number+"',finishresult = '"+finishresult+"' where user ='"+username+"'";
            PreparedStatement preparedStatement=jdbc.getConnection().prepareStatement(sql2);
            preparedStatement.executeUpdate();

        } catch (SQLException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }

        // 构建响应数据
        JsonObject responseData = new JsonObject();
        responseData.addProperty("number", number);
        System.out.println(finishresult);
        responseData.addProperty("result",finishresult);

        // 将响应数据写回前端
        PrintWriter out = response.getWriter();
        out.print(responseData.toString());
        out.flush();

    }
}

 

posted @ 2024-05-31 22:08  贾贾鱼  阅读(13)  评论(0)    收藏  举报