热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

6.HttpServletRequest对象

1.获取请求行消息的方法当访问Servlet时,会在请求消息的请求行中,包含请求方法、请求资源名,请求路径等信息,为了获取

1.获取请求行消息的方法

当访问Servlet时,会在请求消息的请求行中,包含请求方法、请求资源名,请求路径等信息,为了获取这些信息,在HttpServletRequest接口中,定义了一系列用于获取请求行信息的方法,如下表所示
在这里插入图片描述
在这里插入图片描述

response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();out.println("getRequestURL : " + request.getRequestURL() + "
");out.println("getScheme : " + request.getScheme() + "
");out.println("getServerName : " + request.getServerName() + "
");out.println("getServerPort : " + request.getServerPort() + "
");out.println("getContextPath : " + request.getContextPath() + "
");out.println("getServletPath : " + request.getServletPath() + "
");out.println("getRequestURI : " + request.getRequestURI()+ "
");out.println("getQueryString : " + request.getQueryString()+ "
"); out.println("getRemoteAddr : " + request.getRemoteAddr() + "
");out.println("getRemoteHost : " + request.getRemoteHost() + "
");out.println("getRemotePort : " + request.getRemotePort() + "
");out.println("getLocalAddr : " + request.getLocalAddr() + "
");out.println("getLocalName : " + request.getLocalName() + "
");out.println("getLocalPort : " + request.getLocalPort() + "
");

getRequestURL : http://localhost:8080/s6
运行结果:
getScheme : http

getServerName : localhost

getServerPort : 8080

getContextPath :

getServletPath : /s6

getRequestURI : /s6

getQueryString : null

getRemoteAddr : 0:0:0:0:0:0:0:1

getRemoteHost : 0:0:0:0:0:0:0:1

getRemotePort : 22504

getLocalAddr : 0:0:0:0:0:0:0:1

getLocalName : 0:0:0:0:0:0:0:1

getLocalPort : 8080

注意:getLocalPort 与getServerPort 的区别
如果tomcat服务器端口是80,对外端口是通过防火墙设置后映射出来的,为8050,
用getLocalhost获取到的是80端口,
用getServerPort获取到的是8050端口。

2.获取请求消息头

请求消息头用于向服务器传递附加信息,为了获取这些信息, HttpServletRequest接口定义了一系列用于获取请求消息头的方法
代码:

response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();Enumeration headerNames =request.getHeaderNames();// 获取请求消息中所有头字段// 使用循环遍历所有请求头,并通过getHeader()方法获取一个指定名称的头字段while(headerNames.hasMoreElements()) {String headerName = (String)headerNames.nextElement();out.print(headerName + " : " + request.getHeader(headerName)+ "
");}

结果:

host : localhost:8080
user-agent : Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101Firefox/40.0
accept : text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
accept-language : zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
accept-encoding : gzip, deflate
connection : keep-alive

3.防盗链

原理:在下载服务器上,来判断一下上一步提交的网址(来源)是不是我要求的,如果是我要求的,那么可以下载,如果不是,不让下载。
sitePath:http://127.0.0.1
Path:http://127.0.0.1:8080/JavaTeachR/index.jsp
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

Download.html

download

对链接进行处理

response.setContentType("text/html;charset=utf-8");
PrintWriter out =response.getWriter();
String referer =request.getHeader("referer");// 获取referer头的值
String sitePart = "http://"+ request.getServerName();// 获取访问地址
// 判断referer头是否为空,这个头的首地址是否以sitePart开始的
if (referer != null&& referer.startsWith(sitePart)) {// 处理正在下载的请求out.println("dealingdownload ...");
} else {
// out.print("您没有权限下载,3秒后跳转到主页进行下载");
response.setHeader("Refresh","3;URL=http://localhost:8080/Download.html");
// 非法下载请求跳转到download.html页面RequestDispatcher rd= request.getRequestDispatcher("/download.html");rd.forward(request,response);}

4.获取请求参数

form.html

用户名:
密码:
爱好唱歌跳舞足球

servlet01

response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("username");
String password = request.getParameter("password");
out.println("用户名:" + name);
out.println("密 码:" + password);
String[] hobbys=request.getParameterValues("hobby");
out.print("爱好:");
for (int i = 0; i }

结果出现乱码
原因:浏览器在传递请求参数时,请求编码默认采用的是ISO8859-1 ,但在解码时采用的是utf-8编码,所以乱码。
解决:给请求对象设置编码:request.setCharacterEncoding(“utf-8”)


推荐阅读
author-avatar
芙蓉花
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有