zoukankan      html  css  js  c++  java
  • Servlet的5种方式实现表单提交(注册小功能)

    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]+"	");
            }
        }
    
        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]+"	");
                }
            }
        }
    
        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);
        }
    }
    复制代码

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

  • 相关阅读:
    linux开发中常用的命令及技巧(连载)
    使用CCS调试基于AM335X的SPL、Uboot(原创)
    [C语言]变量的声明和定义有什么区别
    C语言中void*详解及应用
    使用中断处理程序实现loop功能
    原码,反码,补码的深入理解与原理
    关于C和C++不同源文件中重名变量的问题(转)
    const extern static 终极指南(转)
    函数调用栈分析
    16位和32位的80X86汇编语言的区别(转)
  • 原文地址:https://www.cnblogs.com/bingxing/p/9523429.html
Copyright © 2011-2022 走看看