tomcat Javaweb开发基础(6承接五)

本文详细解读request内置对象的使用方法,包括如何通过request对象接收参数、处理GET和POST提交、URL重写、隐藏域传递参数、接受多个同名参数以及如何获取客户端IP地址等关键点。此外,还探讨了HTTP请求的不同提交方式及其特点。
摘要由CSDN通过智能技术生成

继续五接着讲解:request内置对象详解

一:request内置对象

request对象已经出现过多次 ,在之前接受参数的时候都使用了request对象完成的。
 request对象是HttpServletRequest接口的一个实例,HttpServletRequest的父接口ServletRequest,但是ServletRequest只有一个子接口—HttpServletRequest。
 之所以这样设计,主要是考虑到了以后程序的扩展型,因为现在的程序都是基于Http协议的,如果以后有新的协议,则只需要让新的协议直接继承自ServletRequest即可。
使用request接受参数:
完成一个最简单的接受参数。
  范例:input.htm
<FORM METHOD="POST" ACTION="input.jsp">
	输入信息:<INPUT TYPE="text" NAME="info">
	<INPUT TYPE="submit" value="显示">
</FORM>
input.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%
	String str = request.getParameter("info") ;		// 接收表单参数
%>
<h2>参数内容:<%=str%></h2>

       发现,页面中 原本的文字,可以正确的显示,但是 传递过来的参数文字却无法正确的进行显示。在进行request接受参数的过程中会产生乱码。
分析乱码产生:
  所有的静态WEB的执行流程,是先从服务器上取得一个页面,之后通过此页面把内容进行提交,提交给服务器之后服务器再将提交的内容返回给客户进行显示。
如果想解决乱码,直接将输入的内容变为服务器的默认编码---ISO-8859-1即可。如果要想完成转码操作,需要将字符串内容重新变为
byte数组。
<%@ page contentType=“text/html;charset=GBK”%>
<%
     String str=request.getParameter(“info”);  
     str=new String(str.getBytes(“ISO-8859-1”));//转码
%>
<h2>参数内容:<%=str%></h2>

此方法太过复杂,最好的做法是:设置一个统一的编码。之后就按此编码进行数据的接受。可以直接使用从servletRequest接口中继承而来的:setCharacterEncoding()方法进行统一的编码设置
<%@ page contentType="text/html;charset=GBK"%>
<%
	request.setCharacterEncoding("GBK") ;			// 按中文接收
	String str = request.getParameter("info") ;		// 接收表单参数
	// str = new String(str.getBytes("ISO8859-1")) ;// 转码
%>
<h2>参数内容:<%=str%></h2>
二: get  post 提交
 在表单中存在两种方式的提交:
        1. get
        2.post
两者的区别?
范例:将input.htm中的提交方式修改为get提交
<FORM METHOD=“get" ACTION="input.jsp">
	输入信息:<INPUT TYPE="text" NAME="info">
	
	<INPUT TYPE="submit" value="显示">
</FORM>

从页面的地址上可以发现,用户的表单输入的全部信息都显示在了地址栏中,证明get提交的时候是将所有的内容都在地址栏中进行显示。
      get提交:
              会在地址栏中显示提交的内容
              地址栏中最大能放4K-5K容量的文字,所以过大肯定会无法提交。
     post提交:
             不在地址栏中显示提交的内容
             本身不受长度的限制,理论上是任意长度,但是如果上传的内容过多,则会超过http的超时时间的限制。
三: URL重写
除了使用表单传递参数之外,也可以使用地址重写的方式传递参数,传递的格式如下:
          XXX.jsp?参数名称=参数值&参数名称=参数值
   下面通过代码来验证此操作。
范例:request01.htm
<h2><a href="request01.jsp?var1=hello&var2=world">request01</a></h2>

范例:request01.jsp
 

<%@ page contentType="text/html;charset=GBK"%>
<%
	request.setCharacterEncoding("GBK") ;			// 按中文接收
	String str1 = request.getParameter("var1") ;
	String str2 = request.getParameter("var2") ;
%>
<h2>参数内容:<%=str1%></h2>
<h2>参数内容:<%=str2%></h2>

四: 隐藏域传递参数
  在表单中有一种称为隐藏域的对象,此对象中的内容会随着表单一起提交到JSP页面中。
范例:input.htm
 
<FORM METHOD="POST" ACTION="input.jsp">
	输入信息:<INPUT TYPE="text" NAME="info">
	<INPUT TYPE="hidden" name="var" value="www.mldn.cn">
	<INPUT TYPE="submit" value="显示">
</FORM>

Input.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%
	request.setCharacterEncoding("GBK") ;			// 按中文接收
	String str = request.getParameter("info") ;		// 接收表单参数
	String var = request.getParameter(“var”) ;		// 接收表单隐藏域参数
	
%>
<h2>参数内容:<%=str%></h2>
<h2>参数内容:<%=var%></h2>


五: 接受多个同名参数
在表单控件中,存在复选框,如果现在使用复选框该如何接受参数呢?
范例:request02.htm
 
<form action="request02.jsp" method="post">
	姓名:	<input type="text" name="name"><br>
	兴趣:	<input type="checkbox" name="inst" value="游泳">游泳
			<input type="checkbox" name="inst" value="唱歌">唱歌
			<input type="checkbox" name="inst" value="跳舞">跳舞
	<br><input type="submit" value="显示">
</form>

request02.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%
	request.setCharacterEncoding("GBK") ;			// 按中文接收
	String name = request.getParameter("name") ;	// 接收表单参数
	String inst = request.getParameter ("inst") ;	// 接收表单参数
%>
<h2>姓名:<%=name%></h2>
<h2>姓名:<%=inst%></h2>


在整个操作中复选框的内容,只能得到一个。因为getParameter()方法,只能接受一个参数的内容。如果想接受多个参数内容,则必须使用:
     public String[] getParameterValues(String name)
此方法返回的是一个数组,表示接受同名的一组参数。
request02.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%
	request.setCharacterEncoding("GBK") ;			// 按中文接收
	String name = request.getParameter("name") ;	// 接收表单参数
	String[] inst = request.getParameterValues("inst") ;	// 接收表单参数
%>
<h2>姓名:<%=name%></h2>
<h2>兴趣:
<%
	for(int i=0;i<inst.length;i++){
%>
		<%=inst[i]%>、
<%
	}
%>
</h2>

六: getParameterNames()方法
此方法的定义:
     public java.util.Enumeration  getParameterNames()
此方法可以获得表单的所有提交参数的参数名称。
request03.htm
<form action="request03.jsp" method="post">
	姓名:<input type="text" name="name"><br>
	兴趣:<input type="checkbox" name="inst" value="游泳">游泳
		<input type="checkbox" name="inst" value="唱歌">唱歌
		<input type="checkbox" name="inst" value="跳舞">跳舞<br>

	<input type="submit" value="显示">
	<input type="hidden" name="info" value="MLDN">
</form>

request03.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.util.*"%>
<%
	request.setCharacterEncoding("GBK") ; 	// 按中文接收
	Enumeration enu = request.getParameterNames() ; // 接收参数的名称
%>
<%
	while(enu.hasMoreElements()){
		String paramName = (String)enu.nextElement() ;
%>
		<h2><%=paramName%></h2>
<%
	}
%>

以上出现了三个表单控件中的参数名称。
但是,如果现在假设想取得参数的名字,继续使用
request.getParameterNames()
修改后的request03.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.util.*"%>
<%
	request.setCharacterEncoding("GBK") ;		// 按中文接收
	Enumeration enu = request.getParameterNames() ; // 接收参数的名称
%>
<%
	while(enu.hasMoreElements()){
		String paramName = (String)enu.nextElement() ;
%>
		<h2><%=paramName%>
			--> 
			<%=request.getParameter(paramName)%>
		</h2>
<%
	}
%>

以上虽然把内容取出来了,但是会发现,里面对于复选框只有一个值。但是使用getParameterNames()有一个明显的好处,在表单任意修改的时候,JSP页面依然可以取得全部的内容。
   但是,现在首要解决的是,如何解决接受数组的问题,所以,工程上可以采用以下的方式完成,修改表单,在需要使用数组的地方加一个标注。
request04.htm
<form action="request04.jsp" method="post">
	姓名:<input type="text" name="name"><br>
	兴趣:<input type="checkbox" name="**inst" value="游泳">游泳
		<input type="checkbox" name="**inst" value="唱歌">唱歌
		<input type="checkbox" name="**inst" value="跳舞">跳舞
	<br><input type="submit" value="显示">
	<input type="hidden" name="info" value="MLDN">
</form>

requesto4.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.util.*"%>
<%
	request.setCharacterEncoding("GBK") ;			// 按中文接收
	Enumeration enu = request.getParameterNames() ;	// 接收参数的名称
%>
<%
	while(enu.hasMoreElements()){
		String paramName = (String)enu.nextElement() ;
%>
		<h2><%=paramName%>
			--> 
<%
		if(paramName.startsWith("**")){
			// 按数组接收
			String temp[] = request.getParameterValues(paramName) ;
			for(int i=0;i<temp.length;i++){
%>				<%=temp[i]%>、
<%
			}
		}else{
%>
			<%=request.getParameter(paramName)%>
<%
		}
%>
		</h2>
<%
	}
%>

七:
取得客户端的IP地址

范例:

<%@ page contentType="text/html;charset=GBK"%>
<%
	String ip = request.getRemoteAddr() ;
%>
<h2><%=ip%></h2>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值