JSP 中request与response的用法详解
JSP中request与response的用法详解
概要:
在学习这两个对象之前,我们应该已经有了http协议的基本了解了,如果不清楚http协议的可以看我的关于http协议的介绍。因为其实request和response的使用大部分都是对http协议的操作。
request对象的介绍
我们先从request对象进行介绍:
我们知道http协议定义了请求服务器的格式:
请求行
请求头
空格
请求体(get请求没有请求体)
好了,这里我们就不详细介绍了,我们只看几个应用就可以了,没什么难度:
应用1获取请求头
/** *获取HTTP请求头 *StringgetHeader(Stringname),适用于单值头 *intgetIntHeader(Stringname),适用于单值int类型的请求头 *longgetDateHeader(Stringname),适用于单值毫秒类型的请求头 *EnumerationgetHeaders(Stringname),适用于多值请求头 * * */ publicclassCServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ Stringip=request.getRemoteAddr();//获取IP地址 Stringmethod=request.getMethod();//获取请求方式 System.out.println(ip); System.out.println(method); getLiuLanQi(request); protectMethod(request,response); } //防盗链 publicvoidprotectMethod(HttpServletRequestrequest, HttpServletResponseresponse){ Stringurl=request.getHeader("referer"); System.out.println(url); if(url!=null&&url.equalsIgnoreCase("http://localhost:8080/day10/MyHtml.html")){ System.out.println("hi"); } else{ response.setStatus(302); response.setHeader("Location","/day10/MyHtml.html"); System.out.println("重定向"); } } //判断浏览器的类型 publicvoidgetLiuLanQi(HttpServletRequestrequest){ Stringuser=request.getHeader("User-Agent"); if(user!=null){ StringuserNoC=user.toLowerCase(); if(userNoC.contains("chrome")){ System.out.println("浏览器类型:谷歌"); } elseif(userNoC.contains("firefox/")){ System.out.println("浏览器类型:火狐"); } else{ System.out.println("浏览器类型:IE"); } } else{ System.out.println("null"); } } }
应用2获取URL路径
/** *获取请求URL http://localhost:8080/day10_2/AServlet?username=xxx&password=yyy >StringgetScheme():获取协议,http >StringgetServerName():获取服务器名,localhost >StringgetServerPort():获取服务器端口,8080 >*****StringgetContextPath():获取项目名,/day10_2 >StringgetServletPath():获取Servlet路径,/AServlet >StringgetQueryString():获取参数部分,即问号后面的部分。username=xxx&password=yyy >StringgetRequestURI():获取请求URI,等于项目名+Servlet路径。/day10_2/AServlet >StringgetRequestURL():获取请求URL,等于不包含参数的整个请求路径。http://localhost:8080/day10_2/AServlet * * */ publicclassDServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ System.out.println(request.getScheme()); System.out.println(request.getServerName()); System.out.println(request.getServerPort()); System.out.println(request.getContextPath()); System.out.println(request.getServletPath()); System.out.println(request.getQueryString()); System.out.println(request.getRequestURI()); System.out.println(request.getRequestURL()); } }
应用3获取请求参数
/** * *请求参数:有一个参数一个值的,还有一个参数多个值! >*****StringgetParameter(Stringname):获取指定名称的请求参数值,适用于单值请求参数 >String[]getParameterValues(Stringname):获取指定名称的请求参数值,适用于多值请求参数 >EnumerationgetParameterNames():获取所有请求参数名称 >*****Map getParameterMap():获取所有请求参数,其中key为参数名,value为参数值。 * */ publicclassEServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ doPost(request,response); } publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ request.setCharacterEncoding("utf-8");//调用他来解决乱码问题的,不会的可以看我写的解决乱码的那一篇 Stringname=request.getParameter("name"); Stringpassword=request.getParameter("password"); String[]aihao=request.getParameterValues("aihao"); response.setHeader("content-type","text/html;charset=utf-8"); PrintWriterpw=response.getWriter(); pw.println("name:"+name+"
"); pw.println("password:"+password+"
"); pw.print("aihao"); for(inti=0;idenglu.html 姓名:
密码:
爱好:吃饭 睡觉 打豆豆 应用4设置request对象属性
用来实现同一个应用程序servlet之间值得传递,我们还用到了转发
/** * **request域 Servlet中三大域对象:request、session、application,都有如下三个方法: >voidsetAttribute(Stringname,Objectvalue) >ObjectgetAttribute(Stringname) >voidremoveAttribute(Stringname); >同一请求范围内使用request.setAttribute()、request.getAttribute()来传值!前一个Servlet调用setAttribute()保存值,后一个Servlet调用getAttribute()获取值。 * */ publicclassFServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ request.setAttribute("name","weijinhao"); request.setAttribute("password","123"); RequestDispatcherrd=request.getRequestDispatcher("/GServlet"); rd.forward(request,response); } }publicclassGServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ Stringname=(String)request.getAttribute("name"); Stringpassword=(String)request.getAttribute("password"); response.setHeader("content-type","text/html;charset=utf-8"); PrintWriterpw=response.getWriter(); pw.println("name:"+name+"
"); pw.println("password:"+password+"
"); pw.close(); } }好了,request的用法大致就是这摸多了。
让我们来看看response对象吧。
response对象的使用
http协议定义了响应浏览器的格式:
响应行
响应头
空格
响应体response对象的大致应用是用在设置响应码,设置响应头,及设置响应正文。
应用1设置响应正文
/** *response的正文 *1,字符流 *2,字节流 */ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ //Stringn="hellojavaweb"; //byte[]b=n.getBytes(); //字节流的使用 /*ServletOutputStreamoutputStream=response.getOutputStream(); outputStream.write(b); outputStream.close();*/ //字符流的使用 /*PrintWriterp=response.getWriter(); p.write(n); p.close();*/ //commoms工具包的使用 FileInputStreamfileInputStream=newFileInputStream("C:/Users/74087/Desktop/6226354_994604.jpg"); byte[]b=IOUtils.toByteArray(fileInputStream); ServletOutputStreamoutputStream=response.getOutputStream(); outputStream.write(b); outputStream.close(); } }应用2设置响应码和响应头
/** *response的响应码 *1,sendError(intsc)//发送错误代码 *2,sendError(intsc,java.lang.Stringmsg)//发送错误代码及描述 *3,setStatus(intsc)//发送成功响应代码 *response的响应头 *1,setDateHeader(java.lang.Stringname,longdate) *2,setHeader(java.lang.Stringname,java.lang.Stringvalue) *3,setIntHeader(java.lang.Stringname,intvalue) *下面的和上面的作用一样但是是为了进行多值的添加 *addDateHeader(java.lang.Stringname,longdate) *addHeader(java.lang.Stringname,java.lang.Stringvalue) *addIntHeader(java.lang.Stringname,intvalue) */ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ //sendNum(response); //sendRe(response); //refresh(response); //noCache(response); } //禁用浏览器缓存 publicvoidnoCache(HttpServletResponseresponse){ response.setHeader("Cache-Control","no-cache"); response.setHeader("pragma","0"); response.setHeader("expires","no-cache"); } //自动跳转 publicvoidrefresh(HttpServletResponseresponse){ response.setHeader("refresh","5;url=http://www.baidu.com"); } //重定向的使用 publicvoidsendRe(HttpServletResponseresponse){ response.setStatus(302); response.setHeader("Location","http://www.baidu.com"); } publicvoidsendNum(HttpServletResponseresponse)throwsIOException{ response.setStatus(200); response.sendError(404); response.sendError(404,"seracceptyourrequestbutidon'twanttoyouseemywebpage"); } }如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!