} }
图7.10Post、Get处理方式不相同
7.5.2 处理HTTP请求头及表单信息
有关HTTP请求头的和表单的介绍,可参见第3章。
在下面的例子8中,servlet显示请求的HTTP头的值和表单提交的信息(可参考对比第3章例子4)。
例子8
提交信息的JSP页面 Example7_8.jsp:
<%@ page contentType=\
处理HTTP请求头的sevlet源文件 GetMessages.java: import java.io.*; import java.util.*;
16
import javax.servlet.*; import javax.servlet.http.*;
public class GetMessages extends HttpServlet {
public void init(ServletConfig config) throws ServletException {super.init(config); }
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException { //获得一个向客户发送数据的输出流: PrintWriter out=response.getWriter();
response.setContentType(\MIME类型。
out.println(\ out.println(\ // 客户使用的协议是:
out.println(\
String protocol=request.getProtocol(); out.println(protocol);
//获取接受客户提交信息的servlet: out.println(\ String path=request.getServletPath(); out.println(path); //客户提交的信息的长度:
out.println(\ int length=request.getContentLength(); out.println(length); // 客户提交信息的方式: out.print(\
String method=request.getMethod(); out.println(method);
//获取HTTP头文件中User-Agent的值: out.println(\
String header1=request.getHeader(\ out.println(header1);
//获取HTTP头文件中accept的值: out.println(\
17
String header2=request.getHeader(\ out.println(header2);
// 获取HTTP头文件中Host的值: out.println(\
String header3=request.getHeader(\ out.println(header3);
//获取HTTP头文件中accept-encoding的值: out.println(\
String header4=request.getHeader(\ out.println(header4); //获取客户的IP地址:
out.println(\ String IP=request.getRemoteAddr(); out.println(IP); // 获取客户机的名称:
out.println(\
String clientName=request.getRemoteHost(); out.println(clientName); // 获取服务器的名称:
out.println(\
String serverName=request.getServerName(); out.println(serverName); // 获取服务器的端口号:
out.println(\ int serverPort=request.getServerPort(); out.println(serverPort);
//获取客户端提交的所有参数的名字: out.println(\
Enumeration enum=request.getParameterNames(); while(enum.hasMoreElements())
{String s=(String)enum.nextElement(); out.println(s); }
// 文本框text提交的信息: out.println(\
String str=request.getParameter(\ out.println(str); out.println(\
18
out.println(\ }
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
doPost(request,response); } }
下面的例子9用servlet实现用户注册。用户通过一个JSP页面提交姓名和email地址实现注册。当servlet获取这些信息后,首先检查散列表对象中是否已经存在这个名字,该散列表存储了已经注册的用户的名字。如果目前准备注册的用户提交的名字在散列表中已经存在,就提示客户更换名字,否则将检查客户是否提供了书写正确的email地址,如果提供了书写正确email地址将允许注册(仅仅要求email地址中不允许出现空格)。
例子9(效果如图7.11所示) 提交注册名字的JSP页面 Example7_9.jsp:
<%@ page contentType=\
19
图7.10 Post、Get处理方式不相同
sevlet源文件
LoginByServlet.java: import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*;
public class LoginByServlet extends HttpServlet { Hashtable hashtable=new Hashtable();
public void init(ServletConfig config) throws ServletException {super.init(config); }
public synchronized void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException { //获得一个向客户发送数据的输出流: PrintWriter out=response.getWriter();
response.setContentType(\ response.setContentType(\MIME类型。 out.println(\ out.println(\ //获取用户提交的名字:
String person_name=request.getParameter(\ name_found=null; if(person_name==null)
20