JSP学习笔记之requst对象

request对象是HttpServletRequest接口的一个实例,而HttpServletRequest的父接口是ServletRequest,但是目前ServletRequest只有HttpServletRequest一个接口,如果以后出现了新的协议,只要让新的协议继承ServletRequest即可

request对象功能:

1、接收表单参数:request.getParameter();

此时要注意接收参数是可能会产生乱码,因为所有的静态WEB的执行流程是先从服务器取得一个页面,之后通过此页面把内容进行提交,提交给服务器后,服务器在将处理的结果返回给客户端进行显示,故如果要想直接输入内容,就要把编码设置为和服务器内容的编码一直,可以使用ServletRequest接口中提供的setCharacterEncoding()方法进行统一的编码设置,即在接收页面上使用request.setCharacterEncoding("GBK");进行统一编码后在进行表单值的接收

2、表单的提交方式:get 和post

get提交的表单在地址栏中会将全部的参数显示出来,这样一来是不安全,而来时如果提交过多的内容将会产生错误,因为URL地址栏最大只能储存4k~5k的内容,所以过大会造成无法提交

post提交表单在地址栏中不会显示提交参数等内容,这样的提交比较安全,而且不会受到内容多少的限制,但是如果内容过大将会超出http的超时时间限制

3、使用地址重写的方式提交参数

格式:Xxx.jsp?参数名称=参数值&参数名称=参数值&参数名称=参数值

 <h1><a href="url_override_do.jsp?name=hello&school=sichuan univercity">地址重写参数提交</a></h1>

接收时采用:

		<%
  			request.setCharacterEncoding("GBK");//处理中文乱码问题
  			String rename=request.getParameter("name");
  			String reschool=request.getParameter("school");
  		%>
  		<h1>姓名:<%=rename %></h1>
  		<h1>日期:<%=reschool %></h1>


使用此种方式提交时,在提交后的页面上右击页面属性时依然可以看到url地址中带有参数的地址

4、隐藏域传递参数

在表单中有一种叫做隐藏域的对象,此对象中的内容会随表单的提交一起提交给jsp页面

	<form action="input.jsp" method="post">
  		<input type="hidden" name="school" value="四川农业大学网络教育学院">
  		<input type="submit" value="提交隐藏域对象">
  	</form>


处理页面

<%
  		request.setCharacterEncoding("GBK");  //按照中文接收
  		String reschool =new String( request.getParameter("school").getBytes("GBK"));//转码
  		
  	%>
  	<h1>参数内容为:<%=reschool %></h1>

5、接收多个参数

在表单中有复选框按钮,可以用来多选,但是复选框的name属性都是一样的,那么在表单的处理页面要使用request.getParameterValues()函数进行接收

看如下代码:

表单页面:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>复选框表单的提交</title>
    <meta http-equiv="content-type" content="text/html; charset=GBK">
  </head>
  
  <body>
  	<form action="check_input.jsp" method="post">
  		<table>
  			<tr>
  				<td>姓名:</td>
  				<td><input type="text" name="name"></td>
  			</tr>
  			<tr>
  				<td>兴趣:</td>
  				<td>
  					<input type="checkbox" name="inst" value="游泳">游泳
  					<input type="checkbox" name="inst" value="上网">上网
  					<input type="checkbox" name="inst" value="电影">电影
  					<input type="checkbox" name="inst" value="音乐">音乐
  				</td>
  			</tr>
  		</table>
  		<input type="submit" value="提交">
  	</form>
  </body>
</html>

处理页面:

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page contentType="text/html; charset=GBK" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>使用地址重写的方式提交参数</title>
  </head>
  
  <body>
  	<%
  		request.setCharacterEncoding("GBK");  //按照中文接收
  		String  rename=request.getParameter("name");
  		String  reinst[] = request.getParameterValues("inst");
  		
  	%>
  	<h1>姓名:<%=rename %></h1>
  	<h1>兴趣:
  		<% 
  			for(int i=0;i<reinst.length;i++){
  		%>
  			<%=reinst[i]%>
  		<%
  			}
  		%>
  	</h1>
  </body>
</html>



6、对于一个工程上的表单来说,类型肯定是复杂多样的,此时我们该如何接收呢?对于有单选、复选、一般的输入等我们可以使用request.getParameterNames()方法进行接收,然后对于一般的参数就可以直接使用request.getParameter()方法进行接收了,对于像复选框之类的name属性一样的控件,我们可以使用String类的startWith()方法进行判断。因为如果是诸如复选框之类的name属性我们在进行书写时一般在此name数值上加上***,表示数组,看案例:

表单页面:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>复杂表单的提交</title>
    <meta http-equiv="content-type" content="text/html; charset=GBK">
  </head> 
  
  <body>
  	<form action="Generic_input.jsp" method="post">
  		<table>
  			<tr>
  				<td>姓名:</td>
  				<td><input type="text" name="name"></td>
  			</tr>
  			<tr>
  				<td><input type="hidden" name="hidden" value="隐藏的值"></td>
  			</tr>
  			<tr>
  				<td>兴趣:</td>
  				<td>
  					<input type="checkbox" name="**inst" value="游泳">游泳
  					<input type="checkbox" name="**inst" value="上网">上网
  					<input type="checkbox" name="**inst" value="电影">电影
  					<input type="checkbox" name="**inst" value="音乐">音乐
  				</td>
  			</tr>
  		</table>
  		<input type="submit" value="提交">
  	</form>
  </body>
</html>


处理页面:

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page contentType="text/html; charset=GBK" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>使用地址重写的方式提交参数</title>
  </head>
  
  <body>
  	<h1>
  	<%
  		request.setCharacterEncoding("GBK");  //按照中文接收
  		Enumeration enu = request.getParameterNames();
  		while(enu.hasMoreElements()){
  			String paraname = (String)enu.nextElement();
  			if(paraname.startsWith("**")){
  				String temp[] = request.getParameterValues(paraname);
  				for(int i=0;i<temp.length;i++){
  	%>
  				<%=temp[i] %>
  	<% 				
  				}
  			}else{
  	%>
  				<%=request.getParameter(paraname) %>
  	<% 			
  			}
  		}
  	%>
  	</h1>
  </body>
</html>

7、取得客户端IP地址

String ip = request.getRemoteAddr();


 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值