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

 更新时间:2017年05月22日 16:21:06   作者:柠檬旋风腿  
这篇文章主要介绍了Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例,非常具有实用价值,需要的朋友可以参考下

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

注册页面:

  

注册页面代码 :

<!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);
  }

}

得到的数据:

    

接收方法二:

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);
  }
  
  

}

得到的数据:

    

接收方法三: 利用反射赋值给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);
  }

}

得到的结果:

  

接收方法四:使用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);
  }
  
  
}

得到的结果:

   

 接收方法 方式五: 使用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);
  }
}

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 创建并运行一个java线程方法介绍

    创建并运行一个java线程方法介绍

    这篇文章主要介绍了创建并运行一个java线程,涉及线程代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java中接口和抽象类的区别详解

    Java中接口和抽象类的区别详解

    这篇文章主要介绍了Java中接口和抽象类的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • java使用@Scheduled注解执行定时任务

    java使用@Scheduled注解执行定时任务

    这篇文章主要给大家介绍了关于java使用@Scheduled注解执行定时任务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Java中临时文件目录的使用

    Java中临时文件目录的使用

    :Java提供了系统属性java.io.tmpdir来获取默认临时文件目录,适用于不同操作系统,使用Files.createTempFile方法创建临时文件,并在不需要时应及时删除,下面就来介绍一下
    2024-10-10
  • Java中LinkedHashSet的源码剖析

    Java中LinkedHashSet的源码剖析

    这篇文章主要介绍了Java中LinkedHashSet的源码剖析,LinkedHashSet是HashSet的子类,LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表,需要的朋友可以参考下
    2023-09-09
  • Java 8中的Collectors API介绍

    Java 8中的Collectors API介绍

    这篇文章主要介绍了Java 8中的Collectors API,Stream.collect()是Java 8的流API的终端方法之一。它允许我们对流实例中保存的数据元素执行可变折叠操作,下文相关内容需要的小伙伴可以参考一下
    2022-04-04
  • Java中的PowerMock使用实践

    Java中的PowerMock使用实践

    这篇文章主要介绍了Java中的PowerMock使用实践,@PrepareForTest和@RunWith是成对出现的,一般@RunWith(PowerMockRunner.class),@PrepareForTest的值是引用的静态方法或私有方法的类,需要的朋友可以参考下
    2023-12-12
  • Spring Cloud-Feign服务调用的问题及处理方法

    Spring Cloud-Feign服务调用的问题及处理方法

    Feign 是一个声明式的 REST 客户端,它用了基于接口的注解方式,很方便实现客户端配置。接下来通过本文给大家介绍Spring Cloud-Feign服务调用,需要的朋友可以参考下
    2021-10-10
  • SpringBoot 入门教程之引入数据传输层的方法

    SpringBoot 入门教程之引入数据传输层的方法

    这篇文章主要介绍了SpringBoot 入门教程之引入数据传输层的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 分析Java中的类加载问题

    分析Java中的类加载问题

    很多时候提到类加载,大家总是没法马上回忆起顺序,这篇文章会用一个例子为你把类加载的诸多问题一次性澄清
    2021-06-06

最新评论