java - 为什么不使用 service() 而不是 doPost() 和 doGet()?
问题描述
我对 Java 很陌生。我有一个运行良好的脚本,但我想了解它背后的逻辑。
如果用户输入他的用户名,我想输出相同的。
我在用
protected void service(HttpServletRequest req, HttpServletResponse resp)
但从我看到的许多教程中
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
和
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
doGet()
我想我理解和之间的区别doPost()
。他们都将被方法调用service()
。那么,如果我可以简单地使用,我为什么要使用doGet()
and呢?doPost()
service()
我的整个代码如下所示:
package ch.yourclick.zt;
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.io.PrintWriter;
@WebServlet("/login")
public class Login extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.print(req.getParameter("username"));
}
}
解决方案
如果您覆盖service
您的 servlet 将处理所有请求方法 ( GET
, POST
, ...)。这些请求方法具有不同的含义,并且期望以不同的方式运行,请参阅HTTP 请求方法。
因此,您的 servlet 将无法为其中一些返回正确的响应,并且您的 servlet 的用户可能会感到困惑,例如,为什么 a 的DELETE
行为方式与 a 相同GET
,并且实际上并未修改源代码。
此外,根据您的 servlet 所做的事情,它可能会引入安全漏洞,例如当您的 servlet(它也处理GET
)修改数据库时。
推荐阅读
- c++ - 当我将 unsigned char*(UIImage bytes) 转换为 GLuint(textureId) 时,使用 opengles 并调用 c++ 方法来处理它,但结果为 null
- r - 使用支持向量机训练垃圾邮件分类器
- bash - 尝试使用 awk 和 sed 替换 bash 中的一行时出错
- android - 附加到 ObjectOutputStream 不会改变任何东西
- javascript - 如果不是 JSON [Javascript]
- jenkins - Jenkins - 如何通过对另一个 git 项目的更改来触发 QA 测试作业构建
- r - 从数据框中提取值
- python - 如何在 txt 文件中的特定位置放置换行符?
- powerbi - 如何将 Power BI 中的表从行转置为列
- javascript - 有没有办法加载脚本标签并在页面完全加载后执行它包含的脚本?