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(" "); } } 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(" "); } } 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(" "); } } 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(" "); } } } 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(" "); } out.println("<br>"); out.println("=====================================<br>");
out.println("</body>"); out.println("</html>");
} } |