JavaWeb-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>"); }
输出: