Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例

作者:柠檬旋风腿 时间:2022-08-19 20:58:06 

用servlet实现一个注册的小功能 ,后台获取数据。

注册页面:

Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例

注册页面代码 :


<!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="点击注册">
 </form>
</body>
</html>

人员实体类: 注意:人员实体类要与表单中的name一致,约定要优于编码


package com.chensi.bean;

//实体类中的字段要与表单中的字段一致,约定优于编码
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页面(后台接收数据方法一)


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 获得填写的表单数据
*/
@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");
   //获取传过来的表单数据,根据表单中的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);
 }

}

得到的数据:

Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例

接收方法二:


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 获得填写的表单数据
*/
@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");
   //获取传过来的表单数据,根据表单中的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);
 }

}

得到的数据:

Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例

接收方法三: 利用反射赋值给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 获得填写的表单数据
*/
@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");
   //获取传过来的表单数据,根据表单中的name获取所填写的值

try {
       User u = new User();
       System.out.println("数据封装之前: "+u);
       //获取到表单数据
       Map<String, String[]> map = request.getParameterMap();
       for(Map.Entry<String,String[]> m:map.entrySet()){
         String name = m.getKey();
         String[] value = m.getValue();
         //创建一个属性描述器
         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("封装数据之后: "+u);
     } catch (IntrospectionException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
       e.printStackTrace();
     }

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   doGet(request, response);
 }

}

得到的结果:

Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例

接收方法四:使用apache 的 BeanUtils 工具来进行封装数据(ps:这个Benautils工具,Struts框架就是使用这个来获取表单数据的哦!)


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 获得填写的表单数据
*/
@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");
   //获取传过来的表单数据,根据表单中的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);
 }

}

得到的结果:

Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例

 接收方法 方式五: 使用inputStream流来进行接收(一般字符串啥的不用这个方法,一般是文件上传下载时候才会使用这种方法)因为接收到的字符串各种乱码,编码问题解决不好


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 获得填写的表单数据
*/
@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");
   //获取传过来的表单数据,根据表单中的name获取所填写的值
   response.setContentType("text/html;charset=UTF-8");
   //获取表单数据
   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);
 }
}

得到的结果:(各种乱码 。。。。)

Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例

来源:http://www.cnblogs.com/zhanghaoliang/p/5622900.html

标签:servlet,提交,表单
0
投稿

猜你喜欢

  • Android 接收微信、QQ其他应用打开第三方分享功能

    2022-06-12 18:11:58
  • Android Studio 通过登录功能介绍SQLite数据库的使用流程

    2023-09-22 00:37:29
  • Android自定义实现图片加文字功能

    2022-08-03 22:05:49
  • ZooKeeper 实现分布式锁的方法示例

    2023-03-20 07:26:43
  • Unity3D实现相机跟随控制

    2021-09-03 08:38:01
  • android读取Assets图片资源保存到SD卡实例

    2022-12-18 19:50:24
  • java volatile关键字的含义详细介绍

    2021-11-01 16:52:17
  • C# MVC 使用LayUI实现下拉框二级联动的功能

    2022-12-07 02:10:05
  • Java 蒙特卡洛算法求圆周率近似值实例详解

    2023-10-19 23:32:10
  • JAVA中 Spring定时器的两种实现方式

    2022-10-11 02:33:45
  • MyBatis快速入门(简明浅析易懂)

    2022-05-25 23:08:55
  • Android实现图片文字轮播特效

    2021-07-25 18:44:11
  • C#/VB.NET实现在Word文档中添加页眉和页脚

    2022-02-09 07:57:46
  • 如何用java程序(JSch)运行远程linux主机上的shell脚本

    2023-11-24 12:35:58
  • java搭建ftp/sftp进行数据传递的全过程

    2023-11-29 15:08:10
  • synchronized及JUC显式locks 使用原理解析

    2023-08-05 03:28:41
  • C#中的DateTime是值类型还是引用类型

    2023-08-07 17:54:17
  • Java编程基础测试题分享

    2023-11-27 22:14:58
  • c# 类型转换

    2021-06-17 06:45:22
  • 深入理解Java责任链模式实现灵活的请求处理流程

    2022-06-06 23:33:53
  • asp之家 软件编程 m.aspxhome.com