上一篇博文寫到了用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():如果您想要得到當前請求中的所有參數的完整列表,則調用該方法。