|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net里有这些工具吗?要简单多少?。
假如你已经利用过Web搜刮引擎,大概扫瞄过在线书店、股票代价、机票信息,也许会寄望到一些乖僻的URL,好比“http://host/path?user=Marty+Hall&origin=bwi&dest=lax”。这个URL中位于问号前面的部分,即“user=Marty+Hall&origin=bwi&dest=lax”,就是表双数据,这是将Web页面数据发送给服务器程序的最经常使用办法。关于GET哀求,表双数据附加到URL的问号前面(如上例所示);关于POST哀求,表双数据用一个独自的行发送给服务器。
之前,从这类情势的数据提掏出所必要的表单变量是CGI编程中最贫苦的事变之一。起首,GET哀求和POST哀求的数据提取办法分歧:关于GET哀求,一般要经由过程QUERY_STRING情况变量提取数据;关于POST哀求,则一样平常经由过程尺度输出提取数据。第二,程序员必需卖力在“&”标记处截断变量名字-变量值对,再分别出变量名字(等号右边)和变量值(等号右侧)。第三,必需对变量值举行URL反编码操纵。由于发送数据的时分,字母和数字以本来的情势发送,但空格被转换成加号,其他字符被转换成“%XX”情势,个中XX是十六进制暗示的字符ASCII(大概ISOLatin-1)编码值。比方,假如HTML表单中名为“users”的域值为“~hall,~gates,and~mcnealy”,则实践向服务器发送的数据为“users=%7Ehall%2C+%7Egates%2C+and+%7Emcnealy”。最初,即第四个招致剖析表双数据十分坚苦的缘故原由在于,变量值既大概被省略(如“param1=val1&param2=&param3=val3”),也有大概一个变量具有一个以上的值,即统一个变量大概呈现一次以上(如“param1=val1&param2=val2&param1=val3”)。
JavaServlet的优点之一就在于一切上述剖析操纵都可以主动完成。只必要复杂地挪用一下HttpServletRequest的getParameter办法、在挪用参数中供应表单变量的名字(巨细写敏感)便可,并且GET哀求和POST哀求的处置办法完整不异。
getParameter办法的前往值是一个字符串,它是参数中指定的变量名字第一次呈现所对应的值经反编码失掉得字符串(能够间接利用)。假如指定的表单变量存在,但没有值,getParameter前往空字符串;假如指定的表单变量不存在,则前往null。假如表单变量大概对应多个值,能够用getParameterValues来代替getParameter。getParameterValues可以前往一个字符串数组。
最初,固然在实践使用中Servlet极可能只会用到那些已出名字的表单变量,但在调试情况中,取得完全的表单变量名字列表常常是很有效的,使用getParamerterNames办法能够便利地完成这一点。getParamerterNames前往的是一个Enumeration,个中的每项都能够转换为挪用getParameter的字符串。
4.2实例:读取三个表单变量
上面是一个复杂的例子,它读取三个表单变量param1、param2和param3,并以HTML列表的情势列出它们的值。请注重,固然在发送应对内容之前必需指定应对范例(包含内容范例、形态和其他HTTP头信息),但Servlet对什么时候读取哀求内容却没有甚么请求。
别的,我们也能够很简单地把Servlet做成既能处置GET哀求,也可以处置POST哀求,这只必要在doPost办法中挪用doGet办法,大概掩盖service办法(service办法挪用doGet、doPost、doHead等办法)。在实践编程中这是一种尺度的办法,由于它只必要很少的分外事情,却可以增添客户端编码的天真性。
假如你习气用传统的CGI办法,经由过程尺度输出读取POST数据,那末在Servlet中也有相似的办法,即在HttpServletRequest上挪用getReader大概getInputStream,但这类办法对一般的表单变量来讲太贫苦。但是,假如是要上载文件,大概POST数据是经由过程专门的客户程序而不是HTML表单发送,那末就要用到这类办法。
注重用第二种办法读取POST数据时,不克不及再用getParameter来读取这些数据。
ThreeParams.java
packagehall;
importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjava.util.*;
publicclassThreeParamsextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html");
PrintWriterout=response.getWriter();
Stringtitle="读取三个哀求参数";
out.println(ServletUtilities.headWithTitle(title)+
"<BODY>\n"+
"<H1ALIGN=CENTER>"+title+"</H1>\n"+
"<UL>\n"+
"<LI>param1:"
+request.getParameter("param1")+"\n"+
"<LI>param2:"
+request.getParameter("param2")+"\n"+
"<LI>param3:"
+request.getParameter("param3")+"\n"+
"</UL>\n"+
"</BODY></HTML>");
}
publicvoiddoPost(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{
doGet(request,response);
}
}
<p>
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。 |
|