servlet层次

servlet层次

    Servlet是实现javax.servlet.Servlet接口的对象。大多数Servlet通过从GenericServlet或HttpServlet类进行扩展来实现。Servlet API包含于两个包中,即javax.servlet和javax.servlet.http。下边我们分别来介绍。

Ø         javax.servlet

接口

ServletConfig

定义了在Servlet初始化的过程中由Servlet容器传递给Servlet的配置信息对象

ServletContext

定义Servlet使用的方法以获取其容器的信息

ServletRequest

定义一个对象封装客户向Servlet的请求信息

ServletResponse

定义一个对象辅助Servlet将请求的响应信息发送给客户端

Servlet

定义所有Servlet必须实现的方法

ServletInputStream

定义名为readLine()的方法,从客户端 读取二进制数据

ServletOutputStream

向客户端发送二进制数据

GenericServlet

抽象类,定义一个通用的、独立于底层协议的Servlet

Ø         javax.servlet.http

接口

HttpSession

用于标识客户端并存储有关客户端的信息

HttpSessionAttributeListener

这个侦听接口用于获取会话的属性列表的改变的通知

HttpServletRequest

扩展ServletRequest接口,为HTTP Servlet提供HTTP请求信息

HttpServletResponse

扩展ServletResponse接口,提供HTTP特定的发送响应的功能

HttpServlet

扩展了GenericServlet的抽象类,用于扩展创建Http Servlet

Cookie

创建一个Cookie,用于存储Servlet发送给客户端的信息

    在这里,我们需要详细了解下HttpServletRequest获得参数名和参数值的方法。

getParameter(String key)

返回一个字符串,获得name和key一样的表单控件的数据,如果有重复的name,则返回第一个的值。

getParameterValues(String key)

返回一个字符串数组,获得name和key一样的表单控件的数据,但相同name的控件会有多个,如同名的多个checkbox等。

getParameterMap()

返回一个包含所有参数的Map,为key-String[]模式,即,key是表单控件的name,同时,为了防止有重复name的控件存在,每个name对应的值是一个字符串数组。

getParameterNames()

返回一个枚举类型值,返回所有表单中所有表看控件的name。

    下面我们举个例子来说明这四个方法的用法。

    我们首选创建一个sendparam.html文件,代码如例3.2所示。

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>测试HttpRequest接收参数方法_发送参数</title>

</head>

<body>

<form action="GetParam" method="get">

发送的内容:<br>

输入框A(name="txt"):<input type="text" name="text"/>

<br>

输入框B(name="txt"):<input type="text" name="text"/>

<br><br>

<input type="checkbox" name="checkbox" value="a">

选项1(name="chk" value="a")

<br>

<input type="checkbox" name="checkbox" value="b">

选项2(name="chk" value="b")

<br><br>

<select name="select">

  <option value="1">内容1_值是1</option>

  <option value="2">内容2_值是2</option>

</select>

<br><br>

<input type="submit" value="传送"/>

</form>

</body>

</html>

例3.2

    在例3.2中,我们定义了两个输入框,name都设定为“text”,定义了两个多选框,name都设定为“checkbox”,最后定义了一个下拉选择框,name设定为“select”。

    我们接着创建一个GetParamServlet类,里边分别用到了上面提到的四个方法。代码如例3.3所示。

/*

 * TestServlet.java

 *

 *

 * 功能:Servlet获得参数

 */

package com.jy.sample.servlet;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Enumeration;

import java.util.Iterator;

import java.util.Map;

 

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

/**

 * Servlet获得参数的方法演示.

 * @author JY

 */

public class GetParamServlet extends HttpServlet {

 

    /** SerialVersionUID */

    private static final long serialVersionUID = 1711689663622072980L;

 

    /**

     * 处理Get请求

     * @param req Request

     * @param resp Response

     * @throws IOException IO异常

     */

    @Override

    protected void doGet(HttpServletRequest req,

            HttpServletResponse resp) throws IOException {

 

        // 设置输出的格式

        resp.setContentType("text/html;charset=UTF-8");

        PrintWriter out = resp.getWriter();

        out.println("<html>");

        out.println("<head>");

        out.println("<title>HttpRequest获得参数的方法</title>");

        out.println("</head>");

        out.println("<body>");

        // 设置接收参数所用的编码

        req.setCharacterEncoding("UTF-8");

 

        // 通过getParameter()获得的参数

        out.println("getParameter()获得的参数<br>");

        String value = null;

        // 获得name="txt"的表单控件的值

        value = req.getParameter("text");

        out.println("输入框内输入的值:" + value);

        out.print("<br>");

        // 获得name="chk"的表单控件的值

        value = req.getParameter("checkbox");

        out.println("多选框选中的值:" + value);

        out.print("<br>");

        // 获得name="sel"的表单控件的值

        value = req.getParameter("select");

        out.println("下拉框选中的值:" + value);

        out.println("<br>");

        out.println("=====================================<br>");

 

        // 通过getParameterValues()获得的参数

        out.println("getParameterValues()获得的参数<br>");

        // 获得name="txt"的表单控件的值

        String[] paramValue = null;

        paramValue = req.getParameterValues("text");

        if (null != paramValue) {

            out.print("输入框内输入的值:");

            for (int i = 0; i < paramValue.length; i++) {

                out.print(paramValue[i]);

                out.print("&nbsp;&nbsp;");

            }

        }

        out.println("<br>");

        // 获得name="chk"的表单控件的值

        paramValue = req.getParameterValues("checkbox");

        if (null != paramValue) {

            out.print("多选框选中的值:");

            for (int i = 0; i < paramValue.length; i++) {

                out.print(paramValue[i]);

                out.print("&nbsp;&nbsp;");

            }

        }

        out.println("<br>");

        // 获得name="sel"的表单控件的值

        paramValue = req.getParameterValues("select");

        if (null != paramValue) {

            out.print("下拉框选中的值:");

            for (int i = 0; i < paramValue.length; i++) {

                out.print(paramValue[i]);

                out.print("&nbsp;&nbsp;");

            }

        }

        out.println("<br>");

        out.println("=====================================<br>");

 

        // 通过getParameterMap()获得的参数

        out.println("getParameterMap()获得的参数<br>");

        // 获得参数的Map

        Map paramMap = req.getParameterMap();

        Object o = null;

        String[] val = null;

        // 循环Map的key

        for (Iterator it = paramMap.keySet()

.iterator(); it.hasNext();) {

            o = it.next();

            out.print(o);

            out.print(":");

            // 获得key对应的value

            val = (String[]) paramMap.get(o);

            if (null != val) {

                for (int j = 0; j < val.length; j++) {

                    out.print(val[j]);

                    out.print("&nbsp;&nbsp;");

                }

            }

        }

        out.println("<br>");

        out.println("=====================================<br>");

 

        // 通过getParameterNames()获得参数的名称

        out.println("getParameterNames()获得参数的名称<br>");

        // 获得参数名称枚举

        Enumeration en = req.getParameterNames();

        for (;en.hasMoreElements();) {

            o = en.nextElement();

            out.print(o);

            out.print("&nbsp;&nbsp;");

        }

        out.println("<br>");

        out.println("=====================================<br>");

 

        out.println("</body>");

        out.println("</html>");

 

    }

}


你可能感兴趣的:(servlet层次)