zoukankan      html  css  js  c++  java
  • 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);
        }
    }

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

  • 相关阅读:
    Chrome浏览器与常用插件推荐
    时间戳 转换24小时制
    fis3 开启相对地址
    web手机端禁止滑动,web手机端禁止上下滑动。
    rem的用法
    手机端复制,pc端复制
    ruby 镜像安装
    使用Potree渲染大规模点云-踩坑记录
    移动端真机调试神器-spy-debugger
    手撕Promise.any
  • 原文地址:https://www.cnblogs.com/zhanghaoliang/p/5622900.html
Copyright © 2011-2022 走看看