- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
只是大概模板
只是大概模板
由于这些前后交互需要用到 json 格式去传入数据.(可以不用,但是我这里约定了使用这样的一个格式)
创建 api 包, 在包下创建 这个类
这个类对应的是交互1
package api;
import com.fasterxml.jackson.databind.ObjectMapper;
import dao.Problem;
import dao.ProblemDao;
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 java.io.IOException;
import java.util.List;
@WebServlet("/problem")
public class ProblemServlet extends HttpServlet {
// 这个 ObjectMapper 是 Jackson 中的一个重要的类
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setStatus(200);
resp.setContentType("application/json;charset=utf8");
// 获取全部的题目列表
ProblemDao problemDao = new ProblemDao();
List<Problem> problems = problemDao.selectAll();
// 转化成json格式字符串
String respString = objectMapper.writeValueAsString(problems);
resp.getWriter().write(respString);
}
}
同样在api包下, 创建 DescServlet 类
这个类对应交互2
package api;
import com.fasterxml.jackson.databind.ObjectMapper;
import dao.Problem;
import dao.ProblemDao;
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 java.io.IOException;
@WebServlet("/desc")
public class DescServlet extends HttpServlet {
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setStatus(200);
resp.setContentType("application/json;charset=utf8");
// 首先获取到id
String idString = req.getParameter("id");
if(idString == null || "".equals(idString)){
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("<h3>id丢失</h3>");
return;
}
int id = Integer.parseInt(idString);
// 获取对应id题目的详情页
ProblemDao problemDao = new ProblemDao();
Problem problem = problemDao.selectOne(id);
// 将problem 转成json格式字符串 写回响应
String respString = objectMapper.writeValueAsString(problem);
resp.getWriter().write(respString);
}
}
同样放到 api 包里.
这个类对应的是交互3
由于这里请求也需要带着这个json格式.所以使用两个静态内部类来表示请求body和响应body的格式.
/**
* 结果的请求body格式
*/
static class ResultRequest{
public int id;
public String code;
}
/**
* 结果的响应body格式
*/
static class ResultResponse{
// error 0:运行成功 1: 编译出错 2: 运行出错 3:其他错误
public int error;
public String reason;
public String stdout;
}
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setStatus(200);
resp.setContentType("application/json;charset=utf8");
// 1. 读取请求正文, 按照json格式读取
String body = readBody(req);
ResultRequest resultRequest = objectMapper.readValue(body, ResultRequest.class);
// 2. 根据 id 从数据库中查找到题目的测试用例
ProblemDao problemDao = new ProblemDao();
Problem problem = problemDao.selectOne(resultRequest.id);
// 测试用例代码
String testCode = problem.getTestCode();
// 提交的代码
String requestCode = resultRequest.code;
// 3. 把用户提交的代码和测试用例的代码,给瓶装成一个完整的代码
String finalCode = mergeCode(requestCode,testCode);
// 4. 创建一个 Task 实例, 调用里面的 compileAndRun 来进行编译运行
Task task = new Task();
Question question = new Question();
question.setCode(finalCode);
Answer answer = task.compileAndRun(question);
// 5. 根据 Task 运行的结果, 包装成一个 Http 响应
ResultResponse resultResponse = new ResultResponse();
resultResponse.error = answer.getError();
resultResponse.reason = answer.getReason();
resultResponse.stdout = answer.getStdout();
String respString = objectMapper.writeValueAsString(resultResponse);
resp.getWriter().write(respString);
}
/**
* 读取请求的正文
* @param req 请求
* @return 以字符串形式返回
* @throws UnsupportedEncodingException 字符编码不支持的异常
*/
private String readBody(HttpServletRequest req) throws UnsupportedEncodingException {
// 1. 根据 Content-Length 获取 body 中的长度(单位是字节)
int contentLength = req.getContentLength();
// 2. 按照找个长度准备一个 byte[]
byte[] buffer = new byte[contentLength];
// 3. 通过 req 里面的 getInputStream 方法, 获取body的流对象(body比较长)
try (InputStream inputStream = req.getInputStream()){
// 4. 基于这个流对象,读取内容,将读取到内容放到byte[]数组中
inputStream.read(buffer);
} catch (IOException e) {
e.printStackTrace();
}
// 5. 把这个 byte[] 的内容构造成一个 String
return new String(buffer,"utf8");
}
/**
* 测试用例代码和提交的代码合并
* @param requestCode 提交的代码
* @param testCode 测试用例代码
* @return 返回合并后的代码
*/
private String mergeCode(String requestCode, String testCode) {
// 找到最后一个"}"的位置
int index =requestCode.lastIndexOf("}");
if (index == -1){
// 这里是不存在的情况
return null;
}
// 截取前面的代码
String curCode = requestCode.substring(0,index);
// 拼接代码
return curCode + testCode + "\n}";
}
打开postman应用
如果不会使用postman 可以看 博文 Postman的使用
更改代码
并在 comon包中 创建这两个类继承 Exception
当catch到异常的时候, 设置状态码为3
我有一个 PowerBI Online 数据集,它是在 PowerBI 桌面中创建然后在线发布的。到目前为止,一切都很好。 我通过 PowerBI pusblish 从 Excel 连接到数据集,按预
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 2 年前。
我必须对一些太大而无法放入内存的数据训练分类模型,我正在使用 scikit learn 和 pandas 来进行分析。所以这是我的问题,如何在在线学习管道中使用验证来调整超参数? 我使用带有chuck
我正在开发一个应用程序,该应用程序将从 webservice 获取数据和图像并将其存储在设备中以供离线使用。同时,应用程序会将一些数据存储在 sqlite db 中,并将一些图像作为默认数据。 这是应
是否可以使用 FileReader API 和 onprogress 事件访问随 HTML5 传入的数据? 如果是这样,是否有 MD5 或其他快速散列算法的“在线”版本,以便我可以在文件完全读取之前开
希望任何人都可以帮助我更改下面的代码,我的临时文件包含以下代码: Temp=8.4* Humidity=70.4% 代替代码 Temp = 24 *C, Hum = 40 % 适用于以下脚本。 我需
我必须创建一个功能类似于联系人应用程序的应用程序。您可以在客户的 iPhone 上添加一个联系人,它应该会上传到客户的 iPad 上。如果客户在他们的 iPad 上更新联系人,它应该会在他们的 iPh
在 gitlab.com 上审查 merge 请求时,有时我必须在完成 merge 之前进行 rebase。 在 gitlab 上按“Rebase”后,我有一个特定的管道步骤失败,因为它无法验证用户的
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
我正在尝试在 azure 上托管 SQL 服务器以与节点应用程序进行通信。我已经成功地完成了创建数据库服务器和数据库本身的过程。现在,我想编辑我的数据库结构。据我发现online ,应该有一种方法可以
我在 Quickbooks Intuit 开发人员 API 中使用 Oauth 2 获得了访问 token 。 范围是 com.intuit.quickbooks.accounting 我能够使用 Q
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
是否可以使Angular Material progress spinner与文本并大致与字符的大小一致地显示? 我想要类似的东西: please wait 微调器仅与“请稍候”文本成行出现。 这可
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一个每天运行的Powershell脚本。今天它失败了,因为我正在使用的域 Controller 不可用。在继续执行脚本的其余部分之前,我想确保可以连接到可用的DC。 $LdapServer = "
我想制作一款在线 Flash 游戏,它将具有社交功能,但游戏玩法将主要是单人游戏。例如,屏幕上不会同时出现两个玩家,社交互动将通过异步消息进行,不会有实时聊天或其他任何内容。大部分逻辑将发生在客户端中
这几天我开始在线玩OpenShift。我部署了一个非常简单的“Hello World”Java 示例(1 行代码!),没有任何依赖项(没有 Spring!)命令行是这样的: oc.exe new-a
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
所以我一直在网上学习Java(初学者),并且我一直在尝试制作一个用于制作矩形的类文件。但是,我的在线 java 评估器指出它找不到实例变量。 This is the comment on it.我的代
我是一名优秀的程序员,十分优秀!