一、继承 Servlet 的分发处理
1、继承 Servlet 的自定义类
可以观察到,当实现 Servlet 接口时,里面提供了一个 service() 方法,但是当从客户端对服务器进行访问的时候,无论是采用 GET 方式还是 POST 方式,都会执行这一个里面的代码。
如果我们需要对不同的请求作出不同的处理,这时就需要进行分发处理。
Servlet 示例:
1 public class HelloServlet implements Servlet {
2 /**
3 * service 方法是专门用来处理请求和响应的
4 * @param servletRequest
5 * @param servletResponse
6 * @throws ServletException
7 * @throws IOException
8 */
9 @Override
10 public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws Exception{
11 System.out.println("Hello Servlet 被访问了");
13 }
14}
2、分发处理
在 service() 方法中可以获取 servletRequest,然后把它强转成 HttpServletRequest 对象,就可以获取对应的请求方式,然后再处理。
Demo:
1 public class HelloServlet implements Servlet {
2 /**
3 * service 方法是专门用来处理请求和响应的
4 *
5 * @param servletRequest
6 * @param servletResponse
7 * @throws ServletException
8 * @throws IOException
9 */
10 @Override
11 public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws
12 ServletException, IOException {
13 System.out.println("3 service === Hello Servlet 被访问了");
14 // 类型转换(因为它有 getMethod()方法)
15 HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
16 // 获取请求的方式
17 String method = httpServletRequest.getMethod();
18 if ("GET".equals(method)) {
19 doGet();
20 } else if ("POST".equals(method)) {
21 doPost();
22 }
23 }
24
25 /**
26 * 做 get 请求的操作
27 */
28 public void doGet() {
29 System.out.println("get 请求");
30 System.out.println("get 请求");
31 }
32
33 /**
34 * 做 post 请求的操作
35 */
36 public void doPost() {
37 System.out.println("post 请求");
38 System.out.println("post 请求");
39 }
40 }
二、继承 HttpServlet 实现 Servlet 程序
一般在实际项目开发中, 都是使用继承 HttpServlet 类的方式去实现 Servlet 程序:
(1)编写一个类去继承 HttpServlet 类;
(2)根据业务需要重写 doGet 或 doPost 方法;
(3)到 web.xml 中的配置 Servlet 程序的访问地址;
Servlet 类的代码:
1 public class HelloServlet3 extends HttpServlet {
2
3 /**
4 * doPost() 在 post 请求的时候调用
5 * @param request
6 * @param response
7 * @throws ServletException
8 * @throws IOException
9 */
10 @Override
11 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
12 System.out.println("HelloServlet3 的 doGet 方法");
13 }
14
15 /**
16 * doGet() 在 get 请求的时候调用
17 * @param request
18 * @param response
19 * @throws ServletException
20 * @throws IOException
21 */
22 @Override
23 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
24 System.out.println("HelloServlet3 的 doPost 方法");
25 }
26 }
web.xml 中的配置信息
1 <servlet>
2 <servlet-name>HelloServlet3</servlet-name>
3 <servlet-class>com.njf.java.HelloServlet3</servlet-class>
4 </servlet>
5 <servlet-mapping>
6 <servlet-name>HelloServlet3</servlet-name>
7 <url-pattern>/hello3</url-pattern>
8 </servlet-mapping>
三、使用开发工具创建 Servlet 程序
1、使用 Eclipse 创建 Servlet 程序
(1)菜单: new —> Servlet 程序
(2)配置 Servlet 信息
2、使用 Intellij IDEA 创建 Servlet 程序
(1)菜单:new —> Serlvet 程序
(2)配置 Servlet 信息
3、共性
可以发现,使用工具创建的 Servlet 是实现 HttpServlet这个类的,然后里面有构造器、doGet() 和 doPost() 方法。