Servlet的5種方式實(shí)現(xiàn)表單提交(注冊小功能),后臺獲取表單數(shù)據(jù)實(shí)例
用servlet實(shí)現(xiàn)一個注冊的小功能 ,后臺獲取數(shù)據(jù)。
注冊頁面:
注冊頁面代碼 :
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="/RequestDemo/RequestDemo3" method="post"> 用戶名:<input type="text" name="userName"><br/> 密碼:<input type="text" name="pwd"><br/> 性別:<input type="radio" name="sex" value="男" checked="checked">男 <input type="radio" name="sex" value="女">女<br/> 愛好:<input type="checkbox" name="hobby" value="足球">足球 <input type="checkbox" name="hobby" value="籃球">籃球 <input type="checkbox" name="hobby" value="排球">排球 <input type="checkbox" name="hobby" value="羽毛球">羽毛球<br/> 所在城市:<select name="city"> <option>---請選擇---</option> <option value="bj">北京</option> <option value="sh">上海</option> <option value="sy">沈陽</option> </select> <br/> <input type="submit" value="點(diǎn)擊注冊"> </form> </body> </html>
人員實(shí)體類: 注意:人員實(shí)體類要與表單中的name一致,約定要優(yōu)于編碼
package com.chensi.bean; //實(shí)體類中的字段要與表單中的字段一致,約定優(yōu)于編碼 public class User { private String userName; private String pwd; private String sex; private String[] hobby; private String city; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String[] getHobby() { return hobby; } public void setHobby(String[] hobby) { this.hobby = hobby; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } }
接收方法一: Servlet頁面(后臺接收數(shù)據(jù)方法一)
package com.chensi; import java.io.IOException; import java.util.Iterator; 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 獲得填寫的表單數(shù)據(jù) */ @WebServlet("/RequestDemo3") public class RequestDemo3 extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); //獲取傳過來的表單數(shù)據(jù),根據(jù)表單中的name獲取所填寫的值 String userName = request.getParameter("userName"); String pwd = request.getParameter("pwd"); String sex = request.getParameter("sex"); String[] hobbys = request.getParameterValues("hobby"); System.out.println(userName); System.out.println(pwd); System.out.println(sex); for (int i = 0; hobbys!=null&&i < hobbys.length; i++) { System.out.println(hobbys[i]+"\t"); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
得到的數(shù)據(jù):
接收方法二:
package com.chensi; import java.io.IOException; import java.util.Enumeration; import java.util.Iterator; 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 獲得填寫的表單數(shù)據(jù) */ @WebServlet("/RequestDemo3") public class RequestDemo3 extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); //獲取傳過來的表單數(shù)據(jù),根據(jù)表單中的name獲取所填寫的值 Enumeration<String> names = request.getParameterNames(); while (names.hasMoreElements()) { String strings = (String) names.nextElement(); String[] parameterValues = request.getParameterValues(strings); for (int i = 0;parameterValues!=null&&i < parameterValues.length; i++) { System.out.println(strings+":"+parameterValues[i]+"\t"); } } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
得到的數(shù)據(jù):
接收方法三: 利用反射賦值給User
package com.chensi; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Enumeration; import java.util.Iterator; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.chensi.bean.User; /** * Servlet 獲得填寫的表單數(shù)據(jù) */ @WebServlet("/RequestDemo3") public class RequestDemo3 extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); //獲取傳過來的表單數(shù)據(jù),根據(jù)表單中的name獲取所填寫的值 try { User u = new User(); System.out.println("數(shù)據(jù)封裝之前: "+u); //獲取到表單數(shù)據(jù) Map<String, String[]> map = request.getParameterMap(); for(Map.Entry<String,String[]> m:map.entrySet()){ String name = m.getKey(); String[] value = m.getValue(); //創(chuàng)建一個屬性描述器 PropertyDescriptor pd = new PropertyDescriptor(name, User.class); //得到setter屬性 Method setter = pd.getWriteMethod(); if(value.length==1){ setter.invoke(u, value[0]); }else{ setter.invoke(u, (Object)value); } } System.out.println("封裝數(shù)據(jù)之后: "+u); } catch (IntrospectionException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
得到的結(jié)果:
接收方法四:使用apache 的 BeanUtils 工具來進(jìn)行封裝數(shù)據(jù)(ps:這個Benautils工具,Struts框架就是使用這個來獲取表單數(shù)據(jù)的哦!)
package com.chensi; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Enumeration; import java.util.Iterator; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; import com.chensi.bean.User; /** * Servlet 獲得填寫的表單數(shù)據(jù) */ @WebServlet("/RequestDemo3") public class RequestDemo3 extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); //獲取傳過來的表單數(shù)據(jù),根據(jù)表單中的name獲取所填寫的值 //方法四:使用beanUtil來封裝User類 User u = new User(); System.out.println("沒有使用BeanUtil封裝之前: "+u); try { BeanUtils.populate(u, request.getParameterMap()); System.out.println("使用BeanUtils封裝之后: "+u); } catch (IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
得到的結(jié)果:
接收方法 方式五: 使用inputStream流來進(jìn)行接收(一般字符串啥的不用這個方法,一般是文件上傳下載時候才會使用這種方法)因?yàn)榻邮盏降淖址鞣N亂碼,編碼問題解決不好
package com.chensi; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Enumeration; import java.util.Iterator; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; import com.chensi.bean.User; /** * Servlet 獲得填寫的表單數(shù)據(jù) */ @WebServlet("/RequestDemo3") public class RequestDemo3 extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); //獲取傳過來的表單數(shù)據(jù),根據(jù)表單中的name獲取所填寫的值 response.setContentType("text/html;charset=UTF-8"); //獲取表單數(shù)據(jù) ServletInputStream sis = request.getInputStream(); int len = 0; byte[] b = new byte[1024]; while((len=sis.read(b))!=-1){ System.out.println(new String(b, 0, len, "UTF-8")); } sis.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
得到的結(jié)果:(各種亂碼 。。。。)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis 查詢語句條件為枚舉類型時報(bào)錯的解決
這篇文章主要介紹了Mybatis 查詢語句條件為枚舉類型時報(bào)錯的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01Spring擴(kuò)展之基于HandlerMapping實(shí)現(xiàn)接口灰度發(fā)布實(shí)例
這篇文章主要介紹了Spring擴(kuò)展之基于HandlerMapping實(shí)現(xiàn)接口灰度發(fā)布實(shí)例,灰度發(fā)布是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式,灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時候就可以發(fā)現(xiàn)、調(diào)整問題,以保證其影響度,需要的朋友可以參考下2023-08-08Java線程池流程編排運(yùn)用實(shí)戰(zhàn)源碼
這篇文章主要介紹了Java線程池流程編排運(yùn)用實(shí)戰(zhàn)源碼,就在流程引擎的基礎(chǔ)上運(yùn)用?ThreadPoolExecutor,使用線程池實(shí)現(xiàn)?SpringBean?的異步執(zhí)行2022-03-03SpringBoot、mybatis返回樹結(jié)構(gòu)的數(shù)據(jù)實(shí)現(xiàn)
本文主要介紹了SpringBoot、mybatis返回樹結(jié)構(gòu)的數(shù)據(jù)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04