由于GET方式提交表单所提交的内容会显示在浏览器中,并且URL总长度不能超过255个字符,因此提交敏感信息或者提交过长的内容需要使用Post方式。
把HTML中FORM的method属性设置为POST,浏览器即以POST形式提交内容。
同GET方式一样,Servlet也可以通过HttpServletRequest对象的getParameter(String param)来获取param对应的参数值。从下面代码11~16行可以看出,getParameter()只能接收String对象,所以对age这样的Int变量需要做转换。
下面主要贴了一下doPost方法中的代码。
1 public void doPost(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 request.setCharacterEncoding("UTF-8"); 4 response.setCharacterEncoding("UTF-8"); 5 response.setContentType("text/html"); 6 7 String name = request.getParameter("name"); 8 String password = request.getParameter("password"); 9 String passwordConfirm = request.getParameter("passwordConfirm"); 10 String sex = request.getParameter("sex"); 11 Integer age = 0; 12 try{ 13 age = Integer.parseInt(request.getParameter("age")); 14 }catch(Exception e){ 15 16 } 17 String[] interesting = request.getParameterValues("interesting"); 18 String area = request.getParameter("area"); 19 String btn = request.getParameter("btn"); 20 21 PrintWriter out = response.getWriter(); 22 out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); 23 out.println("<HTML>"); 24 out.println("<HEAD><TITLE>感谢您提交信息</TITLE>"); 25 out.println("<fieldset style='90%'><legend>填写用户信息</legend><br/>"); 26 27 out.println(" <div class='line'>"); 28 out.println(" <div align='left' class='leftDiv'>您的姓名:</div>"); 29 out.println(" <div align='left' class='rightDiv'>" + name + "</div>"); 30 out.println(" </div>"); 31 out.println(" <div class='line'>"); 32 out.println(" <div align='left' class='leftDiv'>您的性别:</div>"); 33 out.println(" <div align='left' class='rightDiv'>" + sex + "</div>"); 34 out.println(" </div>"); 35 out.println(" </BODY>"); 36 out.println("</HTML>"); 37 out.flush(); 38 out.close(); 39 }
效果图显示如下:
但是在跑的时候我遇到了一个问题,我开始把HTML文件的FORM中的ACTION属性写错了,应该是/servlet/servlet/PostServlet,我把它写成了/servlet/servlet/PostServlet.java,于是遇到了HTTP404的错误,发现之后改了发现还是不行,我觉得应该是之前已经把对应关系写到配置文件里面去了,但是配置文件在哪里呢?看了一下web.xml里面也只有关于servlet的配置信息啊,最后我是新建了一个HTML文件来解决的,但是这个问题依然很困扰我。