我是 Servlet 新手,我正在尝试学习,但我遇到了问题。
我有一个servlet类,我想做CRUD操作。我希望每个操作都重定向到特定的方法。但我遇到了一个问题,它不会重定向。我通过 POSTman 进行了测试,但每当我尝试发送请求时,它都不会收到,并且我的控制台中什么也没有出现。
仅使用默认设置。
这是我的@WebServlet(“/预算”)
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("budgetController, doPost() Started");
String action = request.getServletPath();
System.out.println("doPost, action ==>" + action);
switch (action) {
case "/add": {
addNewBudget(request, response);
break;
}
case "/update": {
updateBudget(request, response);
break;
}
case "/delete": {
deleteBudget(request, response);
break;
}
case "/get": {
getBudget(request, response);
break;
}
case "/list": {
getAllBudgets(request, response);
break;
}
default: {
getAllBudgets(request, response);
break;
}
我尝试更改 @WebServlet("/budgets") 但无法解决。
当前您的 servlet 侦听一个特定路径
/budgets
。
要使 servlet 侦听预算路径后面的所有内容,您应该在 WebServlet 注释中设置以下 URL 模式:
/budgets/*
。
为了读取额外的路径信息,您应该使用
getPathInfo()
方法而不是 getServletPath()
方法。
但是,如果没有额外的路径信息,
getPathInfo()
可能会返回null
。您还应该检查是否有 null
。
因此将代码更改为:
@WebServlet("/budgets/*)
....
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("budgetController, doPost() Started");
String action = request.getPathInfo();
System.out.println("doPost, action ==>" + action);
if (action==null)
getAllBudgets(request, response);
switch (action) {
case "/add": {
addNewBudget(request, response);
break;
}
case "/update": {
updateBudget(request, response);
break;
}
case "/delete": {
deleteBudget(request, response);
break;
}
case "/get": {
getBudget(request, response);
break;
}
case "/list": {
getAllBudgets(request, response);
break;
}
default: {
getAllBudgets(request, response);
break;
}