JavaWeb 第5章 任务1:使用 Servlet 添加新闻

JavaWeb 应用设计及实战 目录

上一章  下一章

上一个任务/上一节       下一个任务/下一节

目录

5.1.1  认识 Servlet 组件    

      1. 初识 Servlet 

        2.Servlet API 

      3. Servlet 生命周期

       Servlet 生命周期是指 Servlet 从创建到销毁的过程,这个过程包括以下几个环节。

 5.1.2  Servlet 组件的开发和使用

1. 创建 Servlet 

     2. Servlet 的部署与运行

     1)设置初始化参数,需要在配置文件中进行参数设置,以便初始化时再 Servlet 中

进行参数读取。

     2)配置文件设置完毕后,在 Servlet 中读取初始化参数。

    (3) Servlet 的运行

      5.1.3   使用 Servlet 改造添加新闻功能

2.数据的获取与响应

   (1)ServletRequest 接口与 HttpServletRequest 接口

     (2)ServletResponse 接口与 HttpServletReponse 接口

   3. 表单 action 属性设置

  4.新闻增加功能的实现


 任务1:使用 Servlet 添加新闻

使用 Servlet 控制业务,实现新闻添加功能

任务1   使用 Servlet  添加新闻

    关键步骤如下。

  • 创建 Servlet 并进行配置。
  • 使用 Servlet 实现业务处理。
  • 使用 Servlet 控制页面跳转。

5.1.1  认识 Servlet 组件    

 

             在  JSP 技术出现之前,如果要动态生成 Web 页面,需要使用 Servlet 来实现。

Servlet 技术如何生成 Web 页面?如何控制 Web 程序执行?这是本节将要介绍的内容。

首先需要了解什么是 Servlet.

      1. 初识 Servlet 

      Servlet  是一种独立于平台和协议的服务器端 Java 应用程序,通过 Servlet 可以生成

动态的 Web 页面。同时,使用  Servlet 还可以在服务器端对客户端的请求进行处理,控

制程序的执行。

      Servlet 的主要作用就是交互式地浏览和更新数据,并生成动态的页面内容进行展示,

其处理 Web 请求的过程如图 5.1 所示。

JavaWeb 第5章 任务1:使用 Servlet 添加新闻_第1张图片 图5.1  Servlet 处理 Web 请求的过程

                       

        Servlet 处理 Web 请求的过程,主要包括以下几个步骤。

  • 服务器接收从客户端发送的请求。
  • 服务器将请求信息发送至 Servlet。
  • Servlet 经过处理后,生成响应的内容。
  • 服务器将响应的内容返回给客户端。

       JSP 与 Servlet 都可以实现动态页面显示,二者之间有什么关系?在之前学习 JSP 的

过程中,曾今介绍过 JSP 在被 Web 容器解析的时候,最终会被编译成一个 Servlet 类,

这就是二者之间的关系。

        2.Servlet API 

        Servlet 其实是 Server 以及 applet 两个单词的合成,所以它是一种服务器端的 Java 

应用程序,但并不是所有服务器端的 Java 应用程序都是 Servlet ,只有当服务器端使用

Servlet API 时,才能算一个 Servlet 。

       Servlet API 又称为 Java Servlet 应用程序接口,包含了很多 Servlet 中重要的接口和类,

如表 5-1 所示。

表 5-1 Servlet API
名称 说明 所在包
Servlet 接口 Java Servlet 的基础接口,定义了 Servlet 必须实现的方法 javax.servlet
GenericServlet类 继承自 Servlet 接口,属于通用的、不依赖协议的 Servlet javax.servlet
HttpServlet 类 继承自 GenericServlet 类,是在其基础上扩展了 HTTP 协议的 Servlet javax.servlet.http
HttpServletRequest 接口 继承自 ServletRequest 接口,用于获得请求数据 javax.servlet.http
HttpServletResponse 接口 继承自 ServletResponse 接口,用于返回响应数据 javax.servlet.http

          注意

             Servlet API 中不仅仅包含表 5-1 中所示的接口和类,还有很多接口、类和方法,

需要大家在练习和工作中去不断积累、查阅帮助文档才能逐步了解和掌握。

      3. Servlet 生命周期

      在了解 Servlet 生命周期之前,先来了解一个名词:Servlet 容器。 Servlet 容器是用

来装载 Servlet 对象的一种容器,是负责管理 Servlet 的一类组件。

       Servlet 生命周期是指 Servlet 从创建到销毁的过程,这个过程包括以下几个环节。

       (1)加载和实列化。 Servlet 容器负责加载和实例化 Servlet ,当客户端发送一个请

求时,Servlet 容器会查找内存中是否在该 Servlet 的实列,如果不存在,就创建一个

Servlet 实列:如果存在,就直接从内存中取出该实列来响应请求。

        注意

       Servlet 容器根据 Servlet 类的位置加载 Servlet 类,加载成功后,由容器创建

Servlet 实列。

        (2)初始化。在 Servlet 容器完成 Servlet 后实列化后,Servlet 容器将调用 Servlet 的

init() 方法进行初始化。初始化的目的是让 Servlet 对象在处理客户端请求前完成一些怎么

工作,如设置数据库连接参数、建立 JDBC 连接、或者建立对其他资源的引用。init() 

方法在 javax.servlet.Servlet 接口中定义。

      注意

         对于每一个 Servlet  实列,init() 方法只被调用一次。

      (3) 提供服务,处理请求。 Servlet 初始化以后,就处于能响应请求的就绪状态。

当 Servlet 容器接收到客户端请求时,调用 Servlet 的 service() 方法处理客户端请求。

Servlet 实列通过 ServletRequest 对象获得客户端的请求,通过调用 ServletReponse 对象

的相关方法设置响应信息。

      (4)销毁。  Servlet 的实列是由 Servlet 容器创建的,所以实列的销毁也是由容器来

完成的。Servlet 容器判断一个 Servlet 是否应被释放时(容器关闭或需要回收资源),

容器就会调用 Servlet 的 destroy() 方法,destroy() 方法指明哪些资源可以被系统回收。

       Servlet 的生命过程和相应的方法如图 5-2 所示。

JavaWeb 第5章 任务1:使用 Servlet 添加新闻_第2张图片 图 5-2  Servlet 的生命周期

       

 5.1.2  Servlet 组件的开发和使用

    了解了 Servlet 的基本概念以及 Servlet 的生命周期后,下面就要开始使用 Servlet 了。

1. 创建 Servlet 

要想使用 Servlet 就必须先创建 Servlet,创建 Servlet 有如下 3 种方式。

  • 实现 Servlet 接口。
  • 继承 GenericServlet 类。
  • 继承 HttpServlet 类。

     下面就通过显示 Servlet 生命周期来完成一个 Servlet 的编写。

   示例1

   创建 Servlet 。

     分析:显示 Servlet 的生命周期,分别将 Servlet 生命周期中相应的方法予以实现,

然后通过浏览器进行访问。

     关键代码:

public class MyServlet extends HttpServlet{
    protected void doGet(HttpServletRequest req,HttpServletResponse rep)
            throws ServletException,IOException{
        System.out.println("调用 doGet 方法");
    }
    protected void doPost(HttPServletRequest req,HttpServletResponse resp)
            throws ServletException,IOException{
        System.out.println("调用 doPost 方法");
    }
    public void destroy(){
        System.out.println("Servlet 被销毁");
    }
    public void init(ServletConfig config)throws ServletException{
        System.out.println("Servlet 初始化");
    }
}

   在示例 1 中创建了名称为 MyServlet 的 Servlet ,它继承自 HttpServlet 类。

     2. Servlet 的部署与运行

   (1)Servlet 的部署

      部署 Servlet 时,需要对 web.xml 文件进行配置,配置的过程如下。

     1)在 web.xml 文件中添加 元素,作用是将 Servlet 内部名映射到一个

Servlet 类名,格式为 "包名+类名"。

     2)添加 元素,作用是将用户访问的 URL 映射到 Servlet 内部化。

   示例2

    将示例1 中已经创建好的 Servlet ,在 web.xml 文件中进行配置。

    分析:配置 Servlet 主要包括两个部分,一个是添加 Servlet 类,另一个是配置 Servlet

类对应的 映射。

     关键代码:


    myServlet
    demo.web.servlet.MyServlet


    myServlet>
    /myServlet

   注意

      中的 必须保持一致。

       在配置了 Servlet  与 URL 的映射后,当 Servlet 容器收到一个请求时,首先确定哪

个 Web 应用程序响应该请求,然后对请求的路径和 Servlet 映射的路径进行匹配。web.

xml 中 常用的 设置方法有以下 3 中形式。

1. /xxx。精确匹配,例如:

           /xxx

2./xxx/*.。路径匹配,如果没有精准匹配,对 /xxx/ 路径

的所有请求将由该 Servlet 进行处理,例如:

           /helloServlet/*

3.*.do。如果没有精确匹配和路径匹配,则对所有.do 扩

展名的请求将由该 Servlet 处理。

    (2)初始化参数方式设置默认的字符编码为 UTF-8 。

     分析如下。

     1)设置初始化参数,需要在配置文件中进行参数设置,以便初始化时再 Servlet 中

进行参数读取。

     2)配置文件设置完毕后,在 Servlet 中读取初始化参数。

     关键文件设置代码:


    myServlet
    demo.web.sevlet.MyServlet
    
        charSetContent
        utf-8
    

,.读取初始化参数代码:

public class MyServlet extends HttpServlet{
   ……
public void init (ServletConfig config)throws ServletException{
    System.out.println("Servlet 初始化");
    String initParam = config.getInitParameter("charSetContnet");
    System.out.println(initParam);
    }
}

 

在示例 3 中,关于初始化设置的说明如下。

  • <.intt-param>元素表示初始化参数部分。
  • <.param-name> 元素表示初始化参数的名称。
  • 元素表示初始化参数的值。

     注意

        初始化参数一定要在所属的 Servlet 内进行设置。

    (3) Servlet 的运行

   Servlet 的运行比较简单,只需要通过 URL 就可以实现访问。需要注意的是,

Servlet 的访问路径必须与在 web.xml 文件中设置的 URL 映射一致。

      在浏览器中输入地址:http://localhost:8080/ServletDemo/myServlet ,此时,将会调

用部署好的 Servlet 并且在控制台输出相应的信息,如图 5.3 所示。

          图  5-3  运行 Servlet

    至此,通过 Servlet 生命周期的演示,已经学习了如何创建 Servlet 、部署和运行

 Servlet 。在实际的应用程序中, Servlet 通常都会执行控制器的功能,而 JSP 用于内容展示。

      5.1.3   使用 Servlet 改造添加新闻功能

     1. Servlet 实现新闻增加的思路分析

      新闻增加功能在之前的学习过程中已经实现了,这里只是改用 Servlet 来实现业务

逻辑控制。其实现思路如下。

      1)编写新闻增加业务控制的 Servlet .

      2) 在 Servlet 中获取数据,并调用 Servlce 中实现新闻添加的方法。

      3)根据新闻增加的结果,选择响应方式。

      4)修改表单的 action 属性为 Servlet 映射。

2.数据的获取与响应

   (1)ServletRequest 接口与 HttpServletRequest 接口

     当客户端发送请求时,由 Servlet 容器创建 ServletRequest 对象(用于封装客户的

请求信息),这个对象将被容器作为 service() 方法的参数之一传递给 Servlet,Servlet

能够利用 ServletRequest 对象获取客户端的请求数据。ServletRequest 接口的常用方法如

表 5-2 所示。

表 5-2 ServletRequest 接口的常用方法
方法 说明
Object getAttriute(String name) 获取名称为 name 的属性值
void setAttribute (String name ,Object object) 在请求中保存名称为 name 的属性值
void removeAttribute(String name) 清除请求中名称为 name 的属性
String getParameter(String name) 获取请求中传递的参数

      HttpServletRequest 位于 javax.servlet.http 包中,继承自 ServletRequest 接口,其主要

作用是读取用户请求中的数据, HttpServletRequest 接口除继承了 ServletRequest 接口中

的方法外,还增加了一些用于读取请求信息的方法,如表 5-3 所示。

表 5-3 HttpServletRequest 接口的自有方法
方法 说明
String getCOntextPath() 返回请求 URL 中表示请求上下文的路径,上下文路径是请求 URI 的开始部分
Cookie[] getCookies() 返回客户端在此次请求中发送的所有 Cookie 对象
HttpSession getSession

返回和此次请求相关的 Session 对象,如果没有给客户端分配 Sessdion 对象,则

创建一个新的 Session 对象

String getMethod() 返回此次请求所使用的 HTTP 方法的名字,如 GET、POST

     (2)ServletResponse 接口与 HttpServletReponse 接口

         Servlet 容器在接收客户请求时,除了创建 ServletRequest 对象用于封装客户的请求

信息外,还创建了一个 ServletResponse 对象,用来封装响应数据,并且同时将这两个

对象一并作为参数传递给 Servlet。Servlet 利用 ServletRequest 对象获取客户端的请求数

据,经过处理后由 ServletResponse 对象发送响应数据。ServletResponse 接口的常用方法

如表 5-4 所示。

表 5-4 ServletResponse 接口的常用方法
方法 说明
PrintWriter getWriter() 返回 PrintWriter 对象,用于向客户端发送文本
String getCharacterEncoding() 返回在响应中发送的正文所使用的字符编码
void setCharacterEncoding(String charset) 设置发送到客户端的响应所使用的字符编码
void setContentType(String type) 设置发送到客户端的内容类型

        与 HttpServletRequest 接口类似,HttpServletResponse 接口也继承自 Servlet-

Response 接口,用于客户端的请求进行响应。它除了具有 ServletResponse 接口的常

用方法外,还增加了新的方法,如表 5-5 所示。

表 5-5 HttpServletResponse 接口的自有方法
方法 说明
void addCookie(Cookie cookie)

增加一个 Cookie 到响应中,这个方法可多次调用,用于设置多个 Cookie

void addHeader(String name,String value) 将一个名称为 name、值为 value 的响应报头添加到响应中
void sendRedirect(String location)

发送一个临时的重定向响应到客户端,以便客户端访问新的URL,该

方法会抛出一个 IOException

String encodeURL(String url)

使用 Session ID 对用于重定向的 URL 进行编码,以便用于 sendRedirect(0

方法中

了解  Servlet 中导航路径设置请扫描二维码。

   3. 表单 action 属性设置

      使用 Servlet 控制新闻信息增加,除了要编写 Servlet 代码,还要对 JSP 表单

进行修改,实现在表单提交时调用 Servlet。

       修改表单的 action  属性,设置如下。

action = "<% = request.getContextPath()%>/AddNewsServlet"

 

  • <.% = request.getContextPath()%> :获取页面上下文环境。
  • /AddNewsServlet: 对应 web.xml 文件中 元素的内容。

  4.新闻增加功能的实现

   由于新闻增加功能在之前已经完成,在这里不再描述。本任务使用 Servlet 增加新

闻的效果如图 5.4所示。

     图5.4 使用 Servlet 增加新闻

       通过亲自编码实现新闻增加的功能,大家可更好地理解和掌握如何

使用 Servlet 实现业务控制。

   了解 MVC  内容请扫描二维码。

 

 

初识  MVC

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

     

     

 

 

 

 

 

 

 

 

你可能感兴趣的:(JavaWeb,JavaWeb第5章,JavaWeb,第5章)