Javaweb 获取客户端通过form表单提交上来的参数三种方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43599377/article/details/102549675

先来看一下html文件

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Html的Form表单元素</title>
    <meta charset="UTF-8">
</head>
<fieldset style="width:500px;">
    <legend>Html的Form表单元素</legend>
    <!--form表单的action属性规定当提交表单时,向何处发送表单数据,method属性指明表单的提交方式,分为get和post,默认为get-->
    <form action="/J4EE/RequestDemo03" method="post">
    <!--输入文本框,SIZE表示显示长度,maxlength表示最多输入长度-->
    编&nbsp;&nbsp;号(文本框):
    <input type="text" name="userid" value="NO." size="2" maxlength="2"><br>
    <!--输入文本框,通过value指定其显示的默认值-->
    用户名(文本框):<input type="text" name="username" value="请输入用户名"><br>
    <!--密码框,其中所有输入的内容都以密文的形式显示-->
    密&nbsp;&nbsp;码(密码框):
    <!--&nbsp;表示的是一个空格-->
    <input type="password" name="userpass" value="请输入密码"><br>
    <!--单选按钮,通过checked指定默认选中,名称必须一样,其中value为真正需要的内容-->
    性&nbsp;&nbsp;别(单选框):
    <input type="radio" name="sex" value="男" checked>男 
    <input type="radio" name="sex" value="女">女<br>
    <!--下拉列表框,通过<option>元素指定下拉的选项-->
    部&nbsp;&nbsp;门(下拉框):
    <select name="dept">
        <option value="技术部">技术部</option>
        <option value="销售部" SELECTED>销售部</option>
        <option value="财务部">财务部</option>
    </select><br>
    <!--复选框,可以同时选择多个选项,名称必须一样,其中value为真正需要的内容-->
    兴&nbsp;&nbsp;趣(复选框): 
    <input type="checkbox" name="inst" value="唱歌">唱歌 
    <input type="checkbox" name="inst" value="游泳">游泳 
    <input type="checkbox" name="inst" value="跳舞">跳舞 
    <input type="checkbox" name="inst" value="编程" checked>编程 
    <input type="checkbox" name="inst" value="上网">上网
    <br>
    <!--大文本输入框,宽度为34列,高度为5行-->
    说&nbsp;&nbsp;明(文本域):
    <textarea name="note" cols="34" rows="5">
     </textarea>
    <br>
    <!--隐藏域,在页面上无法看到,专门用来传递参数或者保存参数-->
    <input type="hidden" name="hiddenField" value="hiddenvalue"/>
    <!--提交表单按钮,当点击提交后,所有填写的表单内容都会被传输到服务器端-->
    <input type="submit" value="提交(提交按钮)">
    <!--重置表单按钮,当点击重置后,所有表单恢复原始显示内容-->
    <input type="reset" value="重置(重置按钮)">
</form>
</fieldset>
</body>
</html>

方法一://getParameter(String)方法(常用)
//getParameterValues(String name)方法(常用)

protected void method1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		//获取html基本信息
		String userid=request.getParameter("userid");//获取html填写的编号,是文本框的名字
		String username=request.getParameter("username");
		String userpass=request.getParameter("userpass");
		String sex=request.getParameter("sex");
		String dept=request.getParameter("dept");
		String[] insts=request.getParameterValues("inst");
		String note=request.getParameter("note");//获取填写信息的说明宁
		String hiddenField=request.getParameter("hiddenField");
		String instStr="";
		
		for (int i = 0; insts!=null && i < insts.length; i++) {
			if (i==insts.length-1) {
				instStr+=insts[i];
			}else {
				instStr+=insts[i]+",";
			}
		}
		//将获取来的信息格式化
		String htmlStr = "<table>" +
                "<tr><td>填写的编号:</td><td>{0}</td></tr>" +
                "<tr><td>填写的用户名:</td><td>{1}</td></tr>" +
                "<tr><td>填写的密码:</td><td>{2}</td></tr>" +
                "<tr><td>选中的性别:</td><td>{3}</td></tr>" +
                "<tr><td>选中的部门:</td><td>{4}</td></tr>" +
                "<tr><td>选中的兴趣:</td><td>{5}</td></tr>" +                          
                "<tr><td>填写的说明:</td><td>{6}</td></tr>" +
                "<tr><td>隐藏域的内容:</td><td>{7}</td></tr>" +
            "</table>";
		htmlStr = MessageFormat.format(htmlStr, userid,username,userpass,sex,dept,instStr,note,hiddenField);
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		response.getWriter().write(htmlStr);
	}

方法二:在服务器使用getParameterNames方法接受表单参数

request.getParameterNames() 方法是将发送请求页面中form表单里所有具有name属性的表单对象获取(包括button).返回一个Enumeration类型的枚举.
通过 Enumeration 的hasMoreElements()方法遍历.再由nextElement()方法获得枚举的值.此时的值是form表单中所有控件的name属性的值.
最后通过request.getParameter()方法获取表单控件的value值.

private void method2(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");//服务器解析方式
		response.setCharacterEncoding("UTF-8");//返回浏览器让浏览器去解析方式
		response.setHeader("content-type", "text/html;charset=UTF-8");
		Enumeration<String> paramNames= request.getParameterNames();//获取所有的参数名称
		while(paramNames.hasMoreElements()) {
			String name=paramNames.nextElement();//得到参数名称
			String value=request.getParameter(name);
			response.getWriter().write(MessageFormat.format("{0}={1} <br/>", name,value));
			
		}
	}

方法三:在服务器端使用getParameterMap方法接收表单参数

根据Java规范:request.getParameterMap()返回的是一个Map类型的值,
该返回值记录着前端(如jsp页面)所提交请求中的请求参数和请求参数值的映射关系。
这个返回值有个特别之处——只能读。不像普通的Map类型数据一样可以修改。
这是因为服务器为了实现一定的安全规范,所作的限制。比如WebLogic,Tomcat,Resin,JBoss等服务器均实现了此规范。

对request.getParameterMap()的返回值使用泛型时应该是Map<String,String[]>形式,
因为有时像checkbox这样的组件会有一个name对应对个value的时候,
所以该Map中键值对是String[]>的实现。

protected void method3(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setHeader("content-type", "text/html;charset=UTF-8");
		//request对象封装的参数是以map行使存储的
		Map<String, String[]> paraMap= request.getParameterMap();
		for (Map.Entry<String, String[]>entry:paraMap.entrySet()) {
			String paramName=entry.getKey();
			String paramvalue="";
			String[] paramValueArr=entry.getValue();
			for (int i = 0;paramValueArr!=null && i < paramValueArr.length; i++) {
				if (i==paramValueArr.length-1) {
					paramvalue+=paramValueArr[i];
				}else {
					paramvalue+=paramValueArr[i];
				}
			}
			 response.getWriter().write(MessageFormat.format("{0}={1} <br/>", paramName,paramvalue));
		}
		
	}

猜你喜欢

转载自blog.csdn.net/weixin_43599377/article/details/102549675
今日推荐