由于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='width: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文件来解决的,但是这个问题依然很困扰我。