servlet 执行流程
编写一个 servlet 程序
-
编写一个普通类
-
实现 servlet 接口,这里我们直接继承 HttpServlet
package com.carve.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1.获取前端参数 String method = req.getParameter("method"); if (method.equals("add")){ req.getSession().setAttribute("msg","执行了add方法"); } if (method.equals("delete")){ req.getSession().setAttribute("msg","执行了delete方法"); } // 2.调用业务层 // 3.视图转发或者重定向 req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
在 HttpServlet 中,自定义了一个新的 service() 方法,其中通过 getMethod() 方法判断请求的类型,从而调用 doGet() 或者 doPost() 处理 get,post 请求,使用者只需要继承 HttpServlet,然后重写 doPost() 或者 doGet() 方法处理请求即可。
-
编写 web 页面
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> $hello$ </body> </html>
test.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ${msg} </body> </html>
编写 Servlet 的映射
为什么需要映射:我们写的是 JAVA 程序,但是要通过浏览器访问,而浏览器需要连接 web 服务器所以我们需要在 web 服务器中注册我们写的 Servlet,还需给他一个浏览器能够访问的路径;
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.carve.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
执行流程
首先客户端发送请求(http://localhost:8080/hello?method=add),请求如果和 web.xml 下的 <url-pattern>/hello</url-pattern> 的虚拟路径相匹配,那么请求就会发送到 <servlet-name>HelloServlet</servlet-name> 所对应的类,HelloServlet 类执行 doGet 方法获得 method 的参数 add,执行对应的代码,最后重定向到指定页面。
配置 tomcat
从这点进去按 + 配置 tomcat,如果没安装过 tomcat 需要先安装。