servlet:10.2.2 Servlet与表单交互的例子来源: 发布时间:星期三, 2008年9月10日 浏览:48次 评论:0
1.静态HTML文本:ourform.html
<html> <head> <title>OurForm</title> </head> <body> <h3>OurForm</h3> <formname="ourform"method="GET"action="FormDemo"> <table> <tr> <td>姓名:</td> <td><inputtype=textname="Name"></td> </tr> <tr> <td>性别:</td> <td><selectname="Sex"> <optionvalue="1"selected>男</option> <optionvalue="2">女</option> </select></td> </tr> </table> </form> </body> </html> 在IE下显示效果如图所示: 不熟悉HTML的读者可以参考有关HTML的书籍,尤其要注意的form的两个属性method和action 2.FormDemo.java //FormDemo.java importjava.io.*; importjavax.servlet.*; importjavax.servlet.http.*; publicclassFormDemoextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsIOException,ServletException//处理GET请求的方法 { response.setContentType("text/html"); //先设置Header,在这里只设置ContentType一项 PrintWriterout=response.getWriter(); //得到文本输出Writer Stringname=request.getParameter("Name"); //得到表单值Name Stringsex=request.getParameter("Sex"); //得到表单值Sex name=newString(name.getBytes(),"ISO-8859-1"); //转换到正确的编码 //打印得到的表单值 out.println("<html>"); out.println("<head>"); out.println("<metahttp-equiv=\\"Content-Type\\"content=\\"text/html;charset=gb2312\\">"); out.println("<title>YourInfo</title>"); out.println("</head>"); out.println("<body>"); out.println("<h3>DataYouPosted</h3>"); out.println("<table>"); out.println("<tr>"); out.println(newString(newString("<td>你的姓名:</td>").getBytes(),"ISO-8859-1")); out.println("<td>"+name+"</td>"); out.println("</tr>"); out.println("<tr>"); out.println(newString(newString("<td>你的性别:</td>").getBytes(),"ISO-8859-1")); out.print("<td>"); if(sex.equals("1"))out.println(newString(newString("男</td>").getBytes(),"ISO-8859-1")); elseout.println(newString(newString("女</td>").getBytes(),"ISO-8859-1")); out.println("</tr>"); out.println("</table>"); out.println("</body>"); out.println("</html>"); out.close();//关闭Writer } } 这个Servlet也是比较简单的,首先从提交的表单中得到需要的两个值,然后用HTML向客户端打印这些信息。 值得注意的是,在这个例子中,所有出现打印中文的地方,我们都使用了字符编码的转换来正确打印中文。前面的例子我们都没有涉及中文,在这里我们有必要提一下Servlet的中文问题。我们知道在同一台机器上,所有的编码方式都是一样的,一般中文平台是gb2312,英文平台是ISO-8859-1,但是网络上的两台机器并不能保证他们的编码方式都是一样的,这时候就有可能出现乱码的问题。在进行HTTP网络传输的时候,统一采用的编码方式是ISO-8859-1,这时候如果还是按照本地编码来传输就会出现问题,这也是Servlet在实现网络传输的时候一个不完美的地方,它不会自动进行本地编码到ISO-8859-1的转换,所以直接打印的话就会出现乱码。原理上讲任何出现打印字符串的地方,都是需要进行编码转换的,但是西文字符在不同字符集下对应相同的编码,以在打印西文字符的时候就不需要转换了。在Servlet后继的规范中可能会改变这种麻烦的状况。不同的是,从网络提交的表单数据,Servlet是自动把它转换成本地编码的,所以程序中得到的name字符串变量是gb2312编码的,同样需要进行转换后才能在客户端正确打印。 字符编码转换常用的方法是 Stringnative_encoded="中文字符串"; //本地编码的字符串 Byte[]byte_array=native_encoded.getBytes(); //得到本地编码的字节数组 5
相关文章
读者评论
发表评论 |