您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > Java > 3.客户请求的处理表单数据
客户请求处理:表单数据议程表单数据的功用HTML表单的创建和提交单个请求参数的读取整个系列请求参数的读取数据缺失或者异常时的处理不完整表单提交的应对请求参数中特殊字符的过滤表单数据的功用在线旅行社可能会用到的URL=Marty+Hall&origin=bwi&dest=lax名称由HTML制作者指定,而值由最终用户提供。传统CGI中对表单(查询)数据的解析采用不同的方式读取GET请求(QUERY_STRING)和POST请求(标准输入)的数据。在&符号处将名/值对拆分开来,然后将参数名(等号左边)和参数值(等号右边)分开。对值进行URL解码(比如,“%7E”变为~“)在servlet中这一切得到极大简化所有情况下都使用request.getParameter。直接给出经过URL解码后的结果表单数据的创建:HTML窗体!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.0Transitional//ENHTMLHEADTITLEASampleFormUsingGET/TITLE/HEADBODYBGCOLOR=#FDF5E6H2ALIGN=CENTERASampleFormUsingGET/H2FORMACTION=:INPUTTYPE=TEXTNAME=firstNameVALUE=JoeBRLastname:INPUTTYPE=TEXTNAME=lastNameVALUE=HackerPINPUTTYPE=SUBMIT!--Pressthistosubmitform--/CENTER/FORM/BODY/HTML插入语:HTML文件的安装HTML文件不放置在WEB-INF/classes目录中它们需要放置在含有WEB-INF目录的目录中。Tomcatinstall_dir\webapps\ROOT\Form.html或install_dir\webapps\ROOT\SomeDir\Form.htmlURL或自定义Web应用使用不同于默认Web应用的目录,但使用相同的结构在URL中使用目录名(…)POST数据的发送!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.0Transitional//ENHTMLHEADTITLEASampleFormUsingPOST/TITLE/HEADBODYBGCOLOR=#FDF5E6H2ALIGN=CENTERASampleFormUsingPOST/H2FORMACTION=”METHOD=POST”CENTERFirstname:INPUTTYPE=TEXTNAME=firstNameVALUE=JoeBRLastname:INPUTTYPE=TEXTNAME=lastNameVALUE=HackerPINPUTTYPE=SUBMIT/CENTER/FORM/BODY/HTMLservlet中表单数据的读取request.getParameter(name)返回查询字符串中name首次出现时所对应的值,已经完成URL解码无论GET和POST请求都以相同的方式工作如果在查询数据中没有这个参数,则返回nullrequest.getParameterValues(name)返回查询字符中name所对应的所有值构成的数组如果参数没有重复出现,则返回仅有一个元素的数组如果在查询中没有这个参数则返回nullrequest.getParameterNames()或request.getParameterMap()返回请求参数构成的Enumeration或Map常常仅用于调试目的多语言输入的处理使用server的默认字符集StringfirstName=request.getParameter(firstName);从英文(Latin-1)转换成中文StringfirstNameWrongEncoding=request.getParameter(firstName);StringfirstName=newString(firstNameWrongEncoding.getBytes(),“GBK);接收英文或中文request.setCharacterEncoding(“GB2312);StringfirstName=request.getParameter(firstName);含有三个参数的HTML表单FORMACTION=/servlet/coreservlets.ThreeParamsFirstParameter:INPUTTYPE=TEXTNAME=param1BRSecondParameter:INPUTTYPE=TEXTNAME=param2BRThirdParameter:INPUTTYPE=TEXTNAME=param3BRCENTERINPUTTYPE=SUBMIT/CENTER/FORM读取三个参数publicclassThreeParamsextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{…out.println(docType+HTML\n+HEADTITLE+title+/TITLE/HEAD\n+BODYBGCOLOR=\#FDF5E6\\n+H1ALIGN=\CENTER\+title+/H1\n+UL\n+LIBparam1/B:+request.getParameter(param1)+\n+LIBparam2/B:+request.getParameter(param2)+\n+LIBparam3/B:+request.getParameter(param3)+\n+/UL\n+/BODY/HTML);}}读取所有参数publicclassShowParametersextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType(text/html);PrintWriterout=response.getWriter();StringdocType=!DOCTYPEHTMLPUBLIC\-//W3C//DTDHTML4.0+Transitional//EN\\n;Stringtitle=ReadingAllRequestParameters;out.println(docType+HTML\n+HEADTITLE+title+/TITLE/HEAD\n+BODYBGCOLOR=\#FDF5E6\\n+H1ALIGN=CENTER+title+/H1\n+TABLEBORDER=1ALIGN=CENTER\n+TRBGCOLOR=\#FFAD00\\n+THParameterNameTHParameterValue(s));读取所有参数(续)EnumerationparamNames=request.getParameterNames();while(paramNames.hasMoreElements()){StringparamName=(String)paramNames.nextElement();out.print(TRTD+paramName+\nTD);String[]paramValues=request.getParameterValues(paramName);if(paramValues.length==1){StringparamValue=paramValues[0];if(paramValue.length()==0)out.println(INoValue/I);elseout.println(paramValue);}else{out.println(UL);for(inti=0;iparamValues.length;i++){out.println(LI+paramValues[i]);}out.println(/UL);}}out.println(/TABLE\n/BODY/HTML);}读取所有参数(续)publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}}数据缺失或异常的检查缺失表单中缺失某个字段getParameter返回null表单提交时字段为空getParameter返回空字符串(或者由空格组成的字符串)在检查字符串是否为空之前必须检查它是否为nullStringparam=request.getParameter(someName);if((param==null)||(param.trim().equals())){doSomethingForMissingValues(...);}else{doSomethingWithParameter(param);}异常值为非空字符串,但格式错误缺失或异常数据的处理使用默认值用应用程序特定的标准值来替代缺失的值参见随后的例子再次显示表单再次显示表单,将缺失的值标示出来之前已经输入的值应该保留实现这个功能有四种选择:由同一个servlet呈现表单、处理数据、并呈现结果。由一个servlet呈现表单;由另一个servlet处理数据并呈现结果。由JSP页面“手动地”呈现表单;由servlet或JSP页面处理数据并呈现结果。由JSP页面呈现表单,自动用从数据对象获得的值填充各个字段。由servlet或JSP页面处理数据并呈现结果。具体的例子请参考本书的内容servlet代码headingFont=replaceIfMissing(headingFont,);intheadingSize=getSize(request.getParameter(headingSize),32);StringbodyFont=request.getParameter(bodyFont);bodyFont=replaceIfMissing(bodyFont,);intbodySize=getSize(request.getParameter(bodySize),18);StringfgColor=request.getParameter(fgColor);fgColor=replaceIfMissing(fgColor,BLACK);StringbgColor=request.getParameter(bgColor);servlet代码(续)privateS
本文标题:3.客户请求的处理表单数据
链接地址:https://www.777doc.com/doc-2927353 .html