2019河北省建设厅检测员报名网站,wordpress图片禁止保存下载,网站封面如何做的吸引人,wordpress商城开发费用文章目录 背景继承关系获取数据request获取请求行数据获取请求头数据获取请求体数据 示例#xff1a;防盗链其他功能获取请求参数通用方式请求转发共享数据获取ServletContext 背景
在 Java 中#xff0c;HTTP 模块的 request 对象和 response 对象分别表示客户端向服务器发… 文章目录 背景继承关系获取数据request获取请求行数据获取请求头数据获取请求体数据 示例防盗链其他功能获取请求参数通用方式请求转发共享数据获取ServletContext 背景
在 Java 中HTTP 模块的 request 对象和 response 对象分别表示客户端向服务器发送请求和服务器向客户端发送响应时使用的对象。
继承关系
ServletRequest -- 接口| 继承
HttpServletRequest -- 接口| 实现
org.apache.catalina.connector.RequestFacade 类(tomcat)获取数据request
request 对象包含有关客户端请求的信息例如请求方法、请求 URL、请求头、请求体等其中常用的属性和方法包括
获取请求行数据 获取请求方式 GET String getMethod() (*)获取虚拟目录/day14 String getContextPath() 获取Servlet路径: /demo1 String getServletPath() 获取get方式请求参数namezhangsan String getQueryString() (*)获取请求URI/day14/demo1 String getRequestURI(): /day14/demo1 StringBuffer getRequestURL():http://localhost/day14/demo1 URL:统一资源定位符 http://localhost/day14/demo1 URI统一资源标识符 : /day14/demo1 获取协议及版本HTTP/1.1 String getProtocol() 获取客户机的IP地址 String getRemoteAddr()
以下是一个简单的 Java Servlet 示例演示如何使用 request 对象处理 HTTP 请求和响应
package cn.xxx.web.request;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** 演示Request对象获取请求行数据*/WebServlet(/requestDemo1)
public class RequestDemo1 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/*1. 获取请求方式 GET* String getMethod()2. (*)获取虚拟目录/day14* String getContextPath()3. 获取Servlet路径: /requestDemo1* String getServletPath()4. 获取get方式请求参数namezhangsan* String getQueryString()5. (*)获取请求URI/day14/demo1* String getRequestURI(): /day14/requestDemo1* StringBuffer getRequestURL() :http://localhost/day14/requestDemo16. 获取协议及版本HTTP/1.1* String getProtocol()7. 获取客户机的IP地址* String getRemoteAddr()*///1. 获取请求方式 GETString method request.getMethod();System.out.println(method);//2.(*)获取虚拟目录/day14String contextPath request.getContextPath();System.out.println(contextPath);//3. 获取Servlet路径: /demo1String servletPath request.getServletPath();System.out.println(servletPath);//4. 获取get方式请求参数namezhangsanString queryString request.getQueryString();System.out.println(queryString);//5.(*)获取请求URI/day14/demo1String requestURI request.getRequestURI();StringBuffer requestURL request.getRequestURL();System.out.println(requestURI);System.out.println(requestURL);//6. 获取协议及版本HTTP/1.1String protocol request.getProtocol();System.out.println(protocol);//7. 获取客户机的IP地址String remoteAddr request.getRemoteAddr();System.out.println(remoteAddr);}
}
获取请求头数据
(*)String getHeader(String name):通过请求头的名称获取请求头的值EnumerationString getHeaderNames():获取所有的请求头名称
package cn.xxx.web.request;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;WebServlet(/requestDemo2)
public class RequestDemo2 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//演示获取请求头数据//1.获取所有请求头名称EnumerationString headerNames request.getHeaderNames();//2.遍历while(headerNames.hasMoreElements()){String name headerNames.nextElement();//根据名称获取请求头的值String value request.getHeader(name);System.out.println(name---value);}}
}
package cn.xxx.web.request;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;WebServlet(/requestDemo3)
public class RequestDemo3 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//演示获取请求头数据:user-agentString agent request.getHeader(user-agent);//判断agent的浏览器版本if(agent.contains(Chrome)){//谷歌System.out.println(谷歌来了...);}else if(agent.contains(Firefox)){//火狐System.out.println(火狐来了...);}}
}
获取请求体数据
只有POST请求方式才有请求体在请求体中封装了POST请求的请求参数。 获取流对象 * BufferedReader getReader()获取字符输入流只能操作字符数据 ServletInputStream getInputStream()获取字节输入流可以操作所有类型数据在文件上传知识点后讲解 再从流对象中拿数据
package cn.xxx.web.request;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;WebServlet(/requestDemo5)
public class RequestDemo5 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取请求消息体--请求参数//1.获取字符流BufferedReader br request.getReader();//2.读取数据String line null;while((line br.readLine()) ! null){System.out.println(line);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}
示例防盗链
package cn.xxx.web.request;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;WebServlet(/requestDemo4)
public class RequestDemo4 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//演示获取请求头数据:refererString referer request.getHeader(referer);System.out.println(referer);//http://localhost/day14/login.html//防盗链if(referer ! null ){if(referer.contains(/day14)){//正常访问// System.out.println(播放电影....);response.setContentType(text/html;charsetutf-8);response.getWriter().write(播放电影....);}else{//盗链//System.out.println(想看电影吗来优酷吧...);response.setContentType(text/html;charsetutf-8);response.getWriter().write(想看电影吗来优酷吧...);}}}
}
其他功能
获取请求参数通用方式
不论get还是post请求方式都可以使用下列方法来获取请求参数
String getParameter(String name):根据参数名称获取参数值 usernamezspassword123String[] getParameterValues(String name):根据参数名称获取参数值的数组 hobbyxxhobbygameEnumeration getParameterNames():获取所有请求的参数名称MapString,String[] getParameterMap():获取所有参数的map集合
package cn.xxx.web.request;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;WebServlet(/requestDemo6)
public class RequestDemo6 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//post 获取请求参数//根据参数名称获取参数值String username request.getParameter(username);/* System.out.println(post);System.out.println(username);*///根据参数名称获取参数值的数组String[] hobbies request.getParameterValues(hobby);/*for (String hobby : hobbies) {System.out.println(hobby);}*///获取所有请求的参数名称EnumerationString parameterNames request.getParameterNames();/*while(parameterNames.hasMoreElements()){String name parameterNames.nextElement();System.out.println(name);String value request.getParameter(name);System.out.println(value);System.out.println(----------------);}*/// 获取所有参数的map集合MapString, String[] parameterMap request.getParameterMap();//遍历SetString keyset parameterMap.keySet();for (String name : keyset) {//获取键获取值String[] values parameterMap.get(name);System.out.println(name);for (String value : values) {System.out.println(value);}System.out.println(-----------------);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//get 获取请求参数
/*//根据参数名称获取参数值String username request.getParameter(username);System.out.println(get);System.out.println(username);*/this.doPost(request,response);}
} 中文乱码问题 * get方式tomcat 8 已经将get方式乱码问题解决了 * post方式会乱码 解决在获取参数前设置request的编码request.setCharacterEncoding(“utf-8”); package cn.xxx.web.request;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;WebServlet(/requestDemo7)
public class RequestDemo7 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.设置流的编码request.setCharacterEncoding(utf-8);//获取请求参数usernameString username request.getParameter(username);System.out.println(username);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}
请求转发
一种在服务器内部的资源跳转方式 步骤 通过request对象获取请求转发器对象RequestDispatcher getRequestDispatcher(String path)使用RequestDispatcher对象来进行转发forward(ServletRequest request, ServletResponse response) 特点 浏览器地址栏路径不发生变化只能转发到当前服务器内部资源中。转发是一次请求
package cn.xxx.web.request;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;WebServlet(/requestDemo8)
public class RequestDemo8 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println(demo8888被访问了。。。);//转发到demo9资源
/*RequestDispatcher requestDispatcher request.getRequestDispatcher(/requestDemo9);requestDispatcher.forward(request,response);*///存储数据到request域中request.setAttribute(msg,hello);request.getRequestDispatcher(/requestDemo9).forward(request,response);//request.getRequestDispatcher(http://www.xxx.cn).forward(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}
共享数据
域对象一个有作用范围的对象可以在范围内共享数据request域代表一次请求的范围一般用于请求转发的多个资源中共享数据方法 void setAttribute(String name,Object obj):存储数据Object getAttitude(String name):通过键获取值void removeAttribute(String name):通过键移除键值对
package cn.xxx.web.request;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;WebServlet(/requestDemo9)
public class RequestDemo9 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取数据Object msg request.getAttribute(msg);System.out.println(msg);System.out.println(demo9999被访问了。。。);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}
获取ServletContext
ServletContext getServletContext()
package cn.xxx.web.request;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;WebServlet(/requestDemo10)
public class RequestDemo10 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ServletContext servletContext request.getServletContext();System.out.println(servletContext);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}