Servlet API


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。

<!DOCTYPE html>
<html>
<head>
<meta charset="GB2312">
<title>测试接收数据</title>
</head>
<body>
<form action="GetParam" method="get">
发送的内容:<br><br>
框A:<input type="text" name="text">
框B:<input type="text" name="text">
<br><br>
<input name="checkbox" type="checkbox" value="a">
选项一
<br>
<input name="checkbox" type="checkbox" value="b">
选项二
<br><br>
<select name="select">
<option value="1">1</option>
<option value="2">2</option>
</select>
<br><br>
<input type="submit" value="传送">
</form>
</body>
</html>
package com.ahabest.param;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GetParamServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=gb2312");
        PrintWriter out = resp.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>asss</title>");
        out.println("</head>");
        out.println("<body>");
        req.setCharacterEncoding("gb2312");
        String value = null;
        value = req.getParameter("text");
        out.println(value);
        out.println("<br>");
        value = req.getParameter("checkbox");
        out.println(value);
        out.println("<br>");
        value = req.getParameter("select");
        out.println(value);
        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>");
    }
}
<?xml version="1.0" encoding="gb2312"?>
<web-app>
    <welcome-file-list>
        <welcome-file>sendparam.html</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>GetParamServlet</servlet-name>
        <servlet-class>com.ahabest.param.GetParamServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>GetParamServlet</servlet-name>
        <url-pattern>/GetParam</url-pattern>
    </servlet-mapping>
</web-app>

03Servlet API的更多相关文章

  1. 干货来袭-整套完整安全的API接口解决方案

    在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...

  2. 12306官方火车票Api接口

    2017,现在已进入春运期间,真的是一票难求,深有体会.各种购票抢票软件应运而生,也有购买加速包提高抢票几率,可以理解为变相的黄牛.对于技术人员,虽然写一个抢票软件还是比较难的,但是还是简单看看123 ...

  3. 几个有趣的WEB设备API(二)

    浏览器和设备之间还有很多有趣的接口, 1.屏幕朝向接口 浏览器有两种方法来监听屏幕朝向,看是横屏还是竖屏. (1)使用css媒体查询的方法 /* 竖屏 */ @media screen and (or ...

  4. html5 canvas常用api总结(三)--图像变换API

    canvas的图像变换api,可以帮助我们更加方便的绘画出一些酷炫的效果,也可以用来制作动画.接下来将总结一下canvas的变换方法,文末有一个例子来更加深刻的了解和利用这几个api. 1.画布旋转a ...

  5. JavaScript 对数据处理的5个API

    JavaScript对数据处理包括向上取整.向下取整.四舍五入.固定精度和固定长度5种方式,分别对应ceil,floor,round,toFixed,toPrecision等5个API,本文将对这5个 ...

  6. ES5对Array增强的9个API

    为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...

  7. javascript的api设计原则

    前言 本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块.系卤煮自己总结的一些经验和教训.本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来.很难做到 ...

  8. 一百元的智能家居——Asp.Net Mvc Api+讯飞语音+Android+Arduino

    大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说 ...

  9. 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

    由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...

随机推荐

  1. android学习一(了解android)

    声明:android学习文件中面的全部内容为都是整理来自第一行代码Android.在接下来的文章里我就不在进行反复的声明. 想看原版的能够买书看看.或者去作者的博客http://blog.csdn.n ...

  2. STM32学习之路-感觉自己走到了一个天大的坑里了!

    先前兴致勃勃的来弄16位并口驱动LCD.本以为就须要改下LCD IC的初始化即可了,没想到弄了这么多天最终发现自己走进了一个深坑了 T T 原因是我的开发板是奋斗V5的, 它确实有MCU外扩IO口, ...

  3. 【hdu3966】Aragorn's Story

    题意:给一棵树,并给定各个点权的值,然后有3种操作:I C1 C2 K: 把C1与C2的路径上的所有点权值加上KD C1 C2 K:把C1与C2的路径上的所有点权值减去KQ C:查询节点编号为C的权值 ...

  4. 【uoj35】后缀排序

    后缀数组模板题 #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio ...

  5. jboss相关的术语

    1 jboss eap java ee application server.red hat官方版本. 2 jboss as/wildfly java ee application server的社区 ...

  6. the “identity” of an object

    2. Built-in Functions — Python 3.6.5 documentation https://docs.python.org/3.6/library/functions.htm ...

  7. 蓝书3.3 SPFA算法的优化

    T1 最小圈 bzoj 1486 题目大意: 一个环的权值平均值为定义为一个这个环上所有边的权值和除以边数 求最小的环的权值平均值 思路: 二分一个值 把所有边减去这个值 判断是否有负环 #inclu ...

  8. python-----文件自动归类

    如何移动文件? →  使用内置模块来实现 归类的规则是什么? → 手动(预设文件夹)/ 自动(创建文件夹) import shutil import os path = './' #由于这里是相对路径 ...

  9. ZOJ3965 Binary Tree Restoring

    ZOJ3965 给定一颗二叉树的两种DFS序列 输出一种可能的二叉树的结构. 考察树的递归性质,不要想的太复杂. 当前节点在两个串中后面的节点假如不同则能确认两个子树,如果相同则把下个点作当前点的一个 ...

  10. ruby on rails, api only, 脚手架

    rails new connector_api --api --database=postgresql bundle install rake db:create rails g scaffold i ...