创建一个servlet

servlet:

  它是web应用程序的核心类,可以直接处理和相应用户请求,又或者将处理工作委托给应用中的其他部分的类。

  让servlet继承HttpServlet的原因是:

    1.HttpServlet继承了javax.servlet.GenericServlet,并实现了只接收Http请求的service()方法。

    2.HttpServlet提供了每种http请求的空实现

    3.当用户以http的方法提交请求时,我们可以在HttpServlet的基础上,根据请求的类型,把处理工作放入重写的相应方法中。假如用户以post的方法提交表单数据,那么可以重写HttpServlet中的doPost()方法,然后编写处理逻辑。

  servlet的生命周期:

    1.初始化状态:调用init()方法

      时间:第一种情况:当servlet构建完成后,并在第一个请求到达之前

         第二种情况:若servlet被设置在web应用部署和启动时自动启动,那么它的init()方法也会被调用;这种设置有两种实现方式,一是在部署描述文件/WEB-INF/web.xml中为该servlet添加一项说明<load-on-startup>level</load-on-startup>,level表示启动顺序的优先级;二是在servlet类中使用注解,在注解中添加一项说明 loadOnStartup = level;

    2.处理请求:调用service()方法,或者根据请求类型分别调用相关的doXXX()

      时间:用户的请求到达

    3.销毁:调用destory()方法

      时间:当servlet不再接收请求后,立即调用;通常发生在web应用被停用或卸载或web容器关闭

 

例子:创建一个简单的servelt,在用户以get的方式发出请求时,在用户的浏览器中显示“Hello World”

 1 package cn.example;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 public class HelloServlet extends HttpServlet{
12     
13     /*
14      * 处理Http中的Get请求
15      */
16     @Override
17     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
18         // 获取字符输出流
19         PrintWriter writer = resp.getWriter();
20         // 向字符输出流中输入一段文字
21         writer.write("Hello, world");
22         
23     }
24     
25     /*
26      * 初始化方法,当servlet构建完成后,在第一个请求到达之前调用
27      * 在调用init()时,servlet中的所有属性都已经设置完成,并提供了对ServletConfig和javax.servlet.ServletContext对象的访问
28      */
29     @Override
30     public void init() throws ServletException {
31         // 向终端输入一段文字,表示该方法被调用
32         System.out.println("Servlet " + this.getServletName() + " has started");
33     }
34     
35     /*
36      * 销毁方法,当Servlet不再接收请求之后立即调用,这种情况通常发生在Web应用被停止或者卸载,或者web容器关闭。
37      */
38     @Override
39     public void destroy() {
40         // 向终端输入一段文字,表示该方法被调用
41         System.out.println("Servlet " + this.getServletName() + " has stopped");
42     }
43 }

 

编写完servlet后,需要告诉web容器如何部署应用程序中的servlet,有两种方式:

  1.在web.xml中部署

  2.使用注解

 

在web.xml中部署servlet:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    id="WebApp_ID" version="3.1">
    
  <!-- 
      web.xml文件将指示web容器如何部署应用程序
   -->
   <!-- 应用程序在服务器中显示的名字 -->
  <display-name>Hello-World</display-name>
    
    <!-- 声明servlet,包括servlet的名字,在哪里可以定位到该servlet -->
    <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>cn.example.HelloServlet</servlet-class>
    </servlet>
    
    <!-- 
        该servlet应该对哪些请求URL做出相应
        所有访问应用程序相对URL/greeting,URL/salutation,URL/wazzup的请求都可以被helloServlet处理,在这里的请求URL可以有多个 
    -->
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/greeting</url-pattern>
        <url-pattern>/salutation</url-pattern>
        <url-pattern>/wazzup</url-pattern>
    </servlet-mapping>
    
    
</web-app>

 

完成这两项工作之后,就可以运行servlet

 

posted @ 2017-12-07 16:47  Aristole  阅读(345)  评论(0编辑  收藏  举报