HttpServletRequest的应用
HttpServletRequest是专用于HTTP协议的ServletRequest子接口,它用于封装HTTP请求消息
HTTP请求消息的请求行包括请求方式、资源路径和HTTP协议版本:
GET /it315/servlet/RequestURI?param1=a¶m2=b HTTP/1.1
1、getMethod方法返回HTTP请求消息中的请求方式。// GET
2、getRequestURI方法返回请求行中的资源名部分。// /it315/controller/one.jsp
3、getQueryString 方法返回请求行中的参数部分。// param1=abc
4、getProtocol方法返回请求行中的协议名和版本。// HTTP/1.1
5、getContextPath方法返回请求资源所属于的WEB应用程序的路径。// /it315
6、getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。// /one.jsp
7、getPathTranslated方法返回URL中的额外路径信息所对应的资源的真实路径。
// C://tomcat-5.5.4/webapps/it315/one.jsp
8、getServletPath方法返回Servlet的名称或Servlet所映射的路径。// /controller
获取网络连接信息
1、getRemoteAddr方法返回发出请求的客户机的IP地址,其格式为“192.168.0.3”这种形式的字符文本。 (*)
2、getRemoteHost方法返回发出请求的客户机的完整主机名,即“pc1.it315.org”这种格式。
3、getRemotePort方法返回发出请求的客户机所使用的网络接口的端口号。
4、getLocalAddr方法返回WEB服务器上接收当前请求的网络接口的IP地址。
5、getLocalName方法返回WEB服务器上接收当前请求的网络接口的IP地址所对应的主机名。
6、getLocalPort方法返回WEB服务器上接收当前请求的网络接口的端口号。
7、getServerName方法返回当前请求所指向的主机名。
8、getServerPort方法返回当前请求所连接的服务器端口号。
9、getScheme方法返回请求的协议名,例如http、https或ftp。
10、getRequestURL方法返回客户端发出请求时的完整URL。
获取请求头信息
1、getHeader方法
2、getHeaders方法
3、getHeaderNames方法
4、getIntHeader方法
5、getDateHeader方法
6、getContentType方法
7、getContentLength方法
8、getCharacterEncoding方法
获取所有请求头的编程实例
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements())
{
String headerName = (String)headerNames.nextElement();
out.print(headerName + " : " + request.getHeader(headerName) + "<br>");
/*如果要考虑同一个请求头名可能出现多次,
那么应该用下面的代码段代替上面一行程序代码*/
//一个消息头字段对应的多次出现的值
Enumeration values=request.getHeaders(headerName);//返回的是枚举类型的对象
While(values.hasMoreElements()){
values.nextElement();
}
System.out.println(headerName+”: ”+request.getHeader(headerName));
利用Referer请求头阻止“盗链”
提交请求到提供下载的servlet
String referrer = request.getHeader("referer");
String sitePart = "http://" + request.getServerName();
if(referrer!=null && referrer.startsWith(sitePart))
{
//处理正当的下载请求,这里只进行示意
out.println("dealing download ...");
}
else
{
//非法下载请求跳转到本站的下载说明页
RequestDispatcher rd = request.getRequestDispatcher("/down.html");
rd.forward(request,response);
}
利用Referer请求头隐藏JavaScript源码
String referrer = request.getHeader("referer");
String sitePart = "http://" + request.getServerName();
if(referrer!=null && referrer.startsWith(sitePart))
{
//向客户端输出javascript的document.write(...)语句
out.println(
"document.write('假设这是很多重要的Javascript代码的执行结果');");
}
获取请求参数
1、 getParameter方法
2、 getParameterValues方法
3、 getParameterNames方法
4、 getParameterMap方法
获取请求参数的编程实例
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()){
String paramName = (String)paramNames.nextElement();
out.print(paramName + " : " + request.getParameter(paramName) + "<br>");
/*如果要考虑同一个请求头名可能出现多次,那么应该用下面的代码段代替上面一行程序代码*/
/*String [] paramValues = request.getParameterValues(paramName);
//良好的编程习惯,在使用对象和数组之前先判断其是否为null
if(paramValues != null){
for(int i=0;i<paramValues.length;i++){
out.print(paramName + " : " + (String)paramValues[i] + "<br>");
}
}*/
}