1 访问Request对象
1.1 访问请求参数
(1)在index.jsp中添加一个链接到deal.jsp页面的超链接
<a href="deal.jsp?id=1&user=">处理页</a>
(2)在deal.jsp页面中获取请求参数id、user和pwd的值并输出
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="utf-8"%> <% String id=request.getParameter("id"); //获取id参数的值 String user=request.getParameter("user");//获取user参数的值 String pwd=request.getParameter("pwd");//获取pwd参数值 %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>处理页</title> </head> <body> id参数的值为:<%=id %><br> user参数的值为:<%=user %><br> pwd参数的值为:<%=pwd %> </body> </html>
输出结果:
id参数的值为:1
user参数的值为:
pwd参数的值为:null
结论:request的getParameter
()方法传递参数时,若参数不存在,返回null,若参数存在但未赋值,返回值为""。
典型应用:
message=request.getParameter("id")!=null?request.getParameter("id"):"";
1.2 在作用域中管理属性
采用request对象的request.setAttribute(String name,Object object)方法和request.getAttribute(String name)方法来实现。
(1)index.jsp页面:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <% try{//捕获异常信息 int money=100; int number=0; request.setAttribute("result",money/number);//保存执行结果 }catch(Exception e){ request.setAttribute("result","很抱歉,页面产生错误!");//保存错误提示信息 } %> <jsp:forward page="deal.jsp"/> </body> </html>
(2)deal.jsp页面
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>结果页</title> </head> <body> <%String message=request.getAttribute("result").toString(); %> <%=message %> </body> </html>
输出结果:
很抱歉,页面产生错误!
1.3 获取cookie
通过cookie的 GetCookies()方法即可获取到所有的cookied对象的集合;通过cookie对象的getName()方法可以获取到指定名称的cookie;通过getValue()方法即可获得cookie对象的值。将一个cookie对象发送到客户端,使用request对象的addCookie()方法。
备注:若显示“Cookie无法解析为类型”错误,只需要在构建路径”--“配置构建路径”。点击“库”选项卡,单击右边的添加外部jar,将%Tomcat_Home%/lib/servlet-aip.jar,要将其导入到项目的构建路径中
(1)index.jsp页面
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="java.net.URLDecoder" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>通过cookie保存并读取用户登录信息</title> </head> <body> <% Cookie[] cookies = request.getCookies();//从request中获得Cookie对象的集合 String user = ""; //登录用户 String date = ""; //注册的时间 if (cookies != null) { for (int i = 0; i < cookies.length; i++) { //遍历cookie对象的集合 if (cookies[i].getName().equals("mrCookie")) {//如果cookie对象的名称为mrCookie user = URLDecoder.decode(cookies[i].getValue().split("#")[0],"UTF-8");//获取用户名 date = cookies[i].getValue().split("#")[1];//获取注册时间 } } } if ("".equals(user) && "".equals(date)) {//如果没有注册 %> 游客您好,欢迎您初次光临! <form action="deal.jsp" method="post"> 请输入姓名:<input name="user" type="text" value=""> <input type="submit" value="确定"> </form> <% } else {//已经注册 %> 欢迎[<b><%=user %></b>]再次光临<br> 您注册的时间是:<%=date %> <% } %> </body> </html>
(2)deal.jsp页面
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="java.net.URLEncoder" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>写入cookie</title> <script type="text/javascript">window.location.href="index.jsp";</script> </head> <body> <% request.setCharacterEncoding("utf-8"); //设置请求编码 response.setCharacterEncoding("utf-8"); //设置相应编码 String user=URLEncoder.encode(request.getParameter("user"),"utf-8"); //获取用户名 Cookie cookie = new Cookie("mrCookie", user+"#"+new java.util.Date().toLocaleString()); cookie.setMaxAge(60*60*24*30); //设置cookie有效期30天 response.addCookie(cookie); //保存cookie %> </body> </html>
备注:
URLEncoder.encode(string)方法
static String |
encode(String s) 已过时。结果字符串可能因平台默认编码不同而不同。因此,改用 encode(String,String) 方法指定编码。 |
static String |
encode(String s, String enc) 使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式。 |
1.4 获取客户端信息
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用request对象的相关方法获取客户端信息</title> </head> <body> <br>客户提交信息的方式:<%=request.getMethod()%> <br>使用的协议:<%=request.getProtocol()%> <br>获取发出请求字符串的客户端地址:<%=request.getRequestURI()%> <br>获取发出请求字符串的客户端地址:<%=request.getRequestURL()%> <br>获取提交数据的客户端IP地址:<%=request.getRemoteAddr()%> <br>获取服务器端口号:<%=request.getServerPort()%> <br>获取服务器的名称:<%=request.getServerName()%> <br>获取客户端的主机名:<%=request.getRemoteHost()%> <br>获取客户端所请求的脚本文件的文件路径:<%=request.getServletPath()%> <br>获得Http协议定义的文件头信息Host的值:<%=request.getHeader("host")%> <br>获得Http协议定义的文件头信息User-Agent的值:<%=request.getHeader("user-agent")%> <br>获得Http协议定义的文件头信息accept-language的值:<%=request.getHeader("accept-language")%> <br>获得请求文件的绝对路径:<%=request.getRealPath("index.jsp")%> </body> </html>
输出结果:
客户提交信息的方式:GET
使用的协议:HTTP/1.1
获取发出请求字符串的客户端地址:/6.05/
获取发出请求字符串的客户端地址:http://xjuthink:8080/6.05/
获取提交数据的客户端IP地址:fe80:0:0:0:b878:6ec5:c777:706d
获取服务器端口号:8080
获取服务器的名称:xjuthink
获取客户端的主机名:fe80:0:0:0:b878:6ec5:c777:706d
获取客户端所请求的脚本文件的文件路径:/index.jsp
获得Http协议定义的文件头信息Host的值:xjuthink:8080
获得Http协议定义的文件头信息User-Agent的值:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
获得Http协议定义的文件头信息accept-language的值:zh-CN
获得请求文件的绝对路径:D:\MyEclipse 10\.metadata\.me_tcat\webapps\6.05\index.jsp
1.5 解决中文乱码
(1)获取请求参数时乱码
index.jsp页面:
<a href="show.jsp?name=张三&sex=男">解决中文乱码</a>
show.jsp页面:
name参数的值为:<%=new String(request.getParameter("name").getBytes("iso-8859-1"),"UTF-8") %><br> sex参数的值为:<%=new String(request.getParameter("sex").getBytes("iso-8859-1"),"UTF-8") %>
输出结果为:
name参数的值为:张三
sex参数的值为:男
(2)获取表单提交信息乱码
request.setCharacterEncoding("utf-8"); //设置请求编码