JSP内置对象--request对象
本文主要介绍JSP中的request对象
request对象的主要方法:
setAttribute(String name,Object):设置名字为name的request的参数值
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
getCharacterEncoding():返回请求中的字符编码方式
getContentLength():返回请求的Body的长度
getHeader(String name):获得HTTP协议定义的文件头信息
getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例
getInputStream():返回请求的输入流,用于获得请求中的数据
getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParameterValues(String name):获得有name指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString():获得查询字符串
getRequestURI():获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的名字
getSession([Boolean create]):返回和请求相关Session
getServerName():获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性
1、获取请求参数值
在一个请求中,可以通过使用"?"的方式来传递参数,然后通过request对象的getParameter()方法来获取参数的值
例如:
String id = request.getParameter("id");
实战一下:
在index.jsp中加入下面代码:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <a href="show.jsp?id=001">获取请求参数的值</a> </body> </html>
show.jsp中的代码:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> id的参数值为: <%=request.getParameter("id")%><br> name的参数值为:<%=request.getParameter("name")%> </body> </html>
运行结果:
id的参数值为: 001
name的参数值为:null
乱码问题:
如果将上面的001改为中文,会出现乱码。
实战一下:
index.jsp
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="java.net.URLEncoder" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <a href="show.jsp?name=<%=URLEncoder.encode("工学1号馆") %>&sex=<%=URLEncoder.encode("男") %>">解决中文乱码</a> </body> </html>
show.jsp
<body> name参数的值为: <%=new String(request.getParameter("name").getBytes("iso-8859-1"),"gbk")%> sex参数的值为:<%=request.getParameter("sex")%> </body>
可以看到,name值正常显示,sex值出现乱码
2、获取Form表单的信息
对于文本元素、单选按钮、下拉列表框都可以使用getParamer()方法获取其具体值
对于复选框以及多选列表框被选定的内容就要使用getParameterValue()方法来获取,给方法返回一个字符串数组,通过循环遍历这个数组就可以得到用户选定的具体内容
实战一下:
index.jsp
该页面创建一个form表单
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%> <%@page import="java.net.URLEncoder" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>'index.jsp'</title> </head> <body> <form action="show.jsp" method="post"> <ul style="list-style: none; line-height: 30px"> <li> 输入用户姓名: <input type="text" name="name" /> <br /> </li> <li> 选择性别: <input name="sex" type="radio" value="男" /> 男 <input name="sex" type="radio" value="女" /> 女 </li> <li> 选择密码提示问题: <select name="question"> <option value="母亲生日"> 母亲生日 </option> <option value="宠物名称"> 宠物名称 </option> <option value="电脑配置"> 电脑配置 </option> </select> </li> <li> 请输入问题答案: <input type="text" name="key" /> </li> <li> 请选择个人爱好: <div style="width: 400px"> <input name="like" type="checkbox" value="唱歌跳舞" /> 唱歌跳舞 <input name="like" type="checkbox" value="上网冲浪" /> 上网冲浪 <input name="like" type="checkbox" value="户外登山" /> 户外登山 <br /> <input name="like" type="checkbox" value="体育运动" /> 体育运动 <input name="like" type="checkbox" value="读书看报" /> 读书看报 <input name="like" type="checkbox" value="欣赏电影" /> 欣赏电影 </div> </li> <li> <input type="submit" value="提交" /> </li> </ul> </form> </body> </html>
show.jsp页面
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>'show.jsp'</title> </head> <body> <ul style="list-style:none; line-height:30px"> <li>输入用户姓名:<%=new String(request.getParameter("name").getBytes("ISO8859_1"),"GBK") %></li> <li>选择性别:<%=new String(request.getParameter("sex").getBytes("ISO8859_1"),"GBK") %></li> <li>选择密码提示问题:<%=new String(request.getParameter("question").getBytes("ISO8859_1"),"GBK") %></li> <li> 请输入问题答案:<%=new String(request.getParameter("key").getBytes("ISO8859_1"),"GBK") %> </li> <li> 请选择个人爱好: <% String[] like =request.getParameterValues("like"); for(int i =0;i<like.length;i++){ %> <%= new String(like[i].getBytes("ISO8859_1"),"GBK")+" " %> <% } %> </li> </ul> </body> </html>
3、获取请求客户端信息
<html> <head> <title>'index.jsp'</title> </head> <body> <div style="width: 600px"> <ul style="line-height:24px"> <li>客户使用的协议:<%=request.getProtocol() %> <li>客户端发送请求的方法:<%=request.getMethod() %> <li>客户端请求路径:<%=request.getContextPath() %> <li>客户机IP地址:<%=request.getRemoteAddr() %> <li>客户机名称:<%=request.getRemoteHost() %> <li>客户机请求端口号:<%=request.getRemotePort() %> <li>接爱客户信息的页面:<%=request.getServletPath() %> <li>获取报头中User-Agent值:<%=request.getHeader("user-agent") %> <li>获取报头中accept值:<%=request.getHeader("accept") %> <li>获取报头中Host值:<%=request.getHeader("host") %> <li>获取报头中accept-encoding值:<%=request.getHeader("accept-encoding") %> <li>获取URI:<%= request.getRequestURI() %> <li>获取URL:<%=request.getRequestURL() %> </ul> </div> </body> </html>
运行结果如下:
- 客户使用的协议:HTTP/1.1
- 客户端发送请求的方法:GET
- 客户端请求路径:/3.01
- 客户机IP地址:0:0:0:0:0:0:0:1
- 客户机名称:0:0:0:0:0:0:0:1
- 客户机请求端口号:4777
- 接爱客户信息的页面:/index.jsp
- 获取报头中User-Agent值:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
- 获取报头中accept值:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
- 获取报头中Host值:localhost:8080
- 获取报头中accept-encoding值:gzip, deflate, sdch
- 获取URI:/3.01/index.jsp
- 获取URL:http://localhost:8080/3.01/index.jsp
4、cookie管理
cookie的getCookies()方法可以获取到所有的cookie对象集合
然后通过getName和getValue方法分别获取名称和值
index.jsp
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>'index.jsp'</title> </head> <body> <% String welcome = "第一次访问"; String[] info = new String[] { "", "", "" }; Cookie[] cook = request.getCookies(); if (cook != null) { for (int i = 0; i < cook.length; i++) { if (cook[i].getName().equals("mrCookInfo")) { info = cook[i].getValue().split("#"); welcome = ", 欢迎回来! "; } } } %> <%=info[0] + welcome%> <form action="show.jsp" method="post"></form> <ul> <li>姓 名: <input name="name" type="text" value="<%=info[0]%>"> <li>出生日期: <input name="birthday" type="text" value="<%=info[1]%>"> <li>邮箱地址: <input name="mail" type="text" value="<%=info[2]%>"> <li><input type="submit" value="提交"> </ul> </body> </html>
show.jsp
<body> <% String name = request.getParameter("name"); String birthday = request.getParameter("birthday"); String mail = request.getParameter("mail"); Cookie cook = new Cookie("mrCookInfo", name + "#" + birthday + "#" + mail); cook.setMaxAge(60 * 60 * 24 * 365);//设置cookie的有效期 response.addCookie(cook); %> 表单提交成功 <ul> <li>姓名: <%=name%> <li>出生日期: <%=birthday%> <li>电子邮箱: <%=mail%> <li><a href="index.jsp">返回</a> </ul> </body>