之前看到有的公众号主说 JSP/Servlet 不用学了,真是惊到我了。。。。。。天下之大,无奇不有。Servlet 是前后端交互的基石,不学 Servlet 你永远不知道前端请求是如何发送到后端的,你也不知道 Web 容器的工作机制是怎样的。这里我先给大家讲一下Servlet的一些基本原理。
1.servlet的作用
servlet的作用是实现动态web,Tomcat10之后的servlet依赖包不是javax
javax.servlet,而是jakarta.servlet。如果导入javax.servlet服务器会报500 xxservlet 不存在。需要更新为以下依赖。
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet.jsp</groupId>
<artifactId>jakarta.servlet.jsp-api</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
复制代码
httpServlet和servlet的关系如下图:
2.servlet原理及配置
2.1原理图
2.2 配置及源码
在查看servlet源码的过程中,发现HttpServlt中请求最终都会指向错误,因此必须继承HttpServlet重写对应的请求方法。
报错代码:
首先在web.xml中配置servlet的路径及映射,如下:
继承了HttpServlet类的子类代码,直接使用父类的doGet
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("test 的 servlet");
super.doGet(req, resp);
}
复制代码
响应结果:
修改web.xml中servlet类为重写了doGet方法的类
配置:
代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello Servlet!</h1>");
out.println("Method: " + request.getMethod());
out.println("Request URI: " + request.getRequestURI());
out.println("Protocol: " + request.getProtocol());
out.println("PathInfo: " + request.getPathInfo());
out.println("Remote Address: " + request.getRemoteAddr());
out.println("</body>");
out.println("</html>");
}
复制代码
输出:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END