发布一篇处置表双数据
诸如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或是其他语言都可以学,编程的关键不是语言,而是思想。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 是一种突破用户端机器环境和CPU 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 是一种将安全性(Security)列为第一优先考虑的语言
页:
[1]