上一篇博文写到了用GET方法向servlet传递信息:https://blog.csdn.net/duan_2018/article/details/79843722这一篇博文在这个基础上,用post方法传递各种信息。
一、读取表单信息
HelloServlet的代码,在dopost()这里写了即可
doGet(request, response);
package duan; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HelloServlet */ @WebServlet("/HelloServlet") public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HelloServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = " "; String docType = "<!DOCTYPE html> \n"; String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8"); out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<ul>\n" + " <li><b>姓名</b>:" + name + "\n" + " <li><b>say</b>:" + request.getParameter("say") + "\n" + "</ul>\n" + "</body></html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
主页的代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>my_hello_test</title> </head> <body> <form action="HelloServlet" method="POST"> 姓名<input type="text" name="name"> <br /> 要说的话:<input type="text" name="say" /> <input type="submit" value="提交" /> </form> </body> </html>
在method这里写“POST”即可。基本上和用GET方法没有什么区别
二、复选框的信息传递
<!--hello.html--> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>my_hello_test</title> </head> <body> <form action="HelloServlet" method="POST"> 姓名 <input type="checkbox" name="duan" />duan <input type="checkbox" name="coco" />coco <br /> 要说的话: <input type="checkbox" name="hello" /> hello <input type="checkbox" name="hi" /> hi <input type="submit" value="提交" /> </form> </body> </html>
//HelloServlet.java package duan; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HelloServlet */ @WebServlet("/HelloServlet") public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HelloServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = " "; String docType = "<!DOCTYPE html> \n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<ul>\n" + " <li><b>duan</b>:" + request.getParameter("duan") + "\n" + " <li><b>coco</b>:" + request.getParameter("coco") + "\n" + " <li><b>hello</b>:" + request.getParameter("hello") + "\n" + " <li><b>hi</b>:" + request.getParameter("hi") + "\n" + "</ul>\n" + "</body></html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
三、读取所有表单参数
<!--hello.html--> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>my_hello_test</title> </head> <body> <form action="HelloServlet" method="POST"> 姓名 <input type="checkbox" name="duan" />duan <input type="checkbox" name="coco" />coco <br /> 要说的话: <input type="checkbox" name="hello!" /> hello! <input type="checkbox" name="hello!" /> hello! <input type="checkbox" name="hello!" /> hello! <input type="checkbox" name="hello,1" /> hello,1 <input type="checkbox" name="hello,2" /> hello,2 <input type="checkbox" name="hello,3" /> hello,3 <input type="checkbox" name="hello,4" /> hello,4 <input type="submit" value="提交" /> </form> </body> </html>
//HelloServlet.java package duan; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HelloServlet */ @WebServlet("/HelloServlet") public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HelloServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "读取所有表单参数"; String docType = "<!DOCTYPE html> \n"; Enumeration paramNames = request.getParameterNames(); out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<table border=\"1\">\n" + "<tr><th>参数名称</th><th>参数值</th></tr>"); while(paramNames.hasMoreElements()) { String paramName = (String)paramNames.nextElement(); out.print("<tr><td>" + paramName + "</td>\n"); String[] paramValues = request.getParameterValues(paramName); // 读取单个值的数据 if (paramValues.length == 1) { String paramValue = paramValues[0]; if (paramValue.length() == 0) out.println("<td><i>没有值</i></td>"); else out.println("<td>" + paramValue + "</td>"); } else { // 读取多个值的数据 out.println("<td><ul>"); for(int i=0; i < paramValues.length; i++) { out.println("<li>" + paramValues[i]); } out.println("</ul></td>"); } out.print("</tr>"); } out.println("\n</table>\n</body></html>");} /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
四、使用 Servlet 读取表单数据
Servlet 处理表单数据的三个方法至此都得到了使用,另外注意到的是在想html传递字符串的时候遇到双引号要转义处理
- getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值。
- getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
- getParameterNames():如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。