HttpServletRequest与HttpServletResponse概要

来源:互联网 发布:excel数据统计图 编辑:程序博客网 时间:2024/05/18 00:19

Tips:以下代码均在IE中通过测试,由于只有IE支持response字符流方法print()向客户端写入html代码,其它浏览器均需用write()方法。

HttpServletResponse

1.状态码
http协议中的常见状态码:
200:表示成功
302:表示重定向
404:表示客户端错误(访问资源不存在)
500:表示服务器端错误
更多:http://developer.qiniu.com/docs/v6/api/reference/codes.html
相关方法:
  response.setStatus(int sc):设置成功状态码;
  response.setError(int sc):设置错误状态码
  response.sendError(int sc,String msg):设置错误状态码,显示错误信息。
2.响应头
详细:http://developer.qiniu.com/docs/v6/api/reference/codes.html
相关方法:
   response.setHeader(String name,String value):设置单值响应头
   response.addHeader(String name,String value):设置多值响应头
   response.setIntHeader(String name,int value):设置单值int响应头
   response.addIntHeader(String name,int value):设置多值int响应头
   response.setDateHeader(String name,long value):设置单值毫秒型响应头
   response.addDateHeader(String name,long value):设置多值毫秒型响应头
----------
重定向

----------

B->A

public class BServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setHeader("Location","/Response/AServlet" );response.setStatus(302);}}

***重定向sendRedirect(Sting url)方法

public class GServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.sendRedirect("/Response/AServlet");}}

----------
定时刷新

----------

public class CServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {PrintWriter writer = response.getWriter();writer.println("5秒跳转");response.setHeader("Refresh", "5;URL=/Response/AServlet");}}

----------
禁用缓存

----------

public class DServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setHeader("Cache-Control", "no-cache");response.setHeader("pragma", "no-cache");response.setDateHeader("expires", -1);response.getWriter().write("hhhhhh");}}

***meat标签可以代替响应头
3.响应体
    ServletOutputStream sout = response.getOutputStream();

    PritnWriter pout = response.gerWriter();

//字节流public class FServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String s="FServlet";byte[] bytes = s.getBytes();response.getOutputStream().write(bytes);    //图片response.setContentType("image/jpeg");String path="F:/a.jpg";FileInputStream in = new FileInputStream(path);byte[] bytes1=IOUtils.toByteArray(in);response.getOutputStream().write(bytes1);}}

============================================================

HttpServletRequest

1.获取常用信息
——request.getRemoteAddr():获取客户端IP
——request.getMethod():获取请求方式post或get
2.获取请求头
——String getHeader(String name):适用于单值请求头
——int getIntHeader(String name):适用于单值int请求头
——long getDateHeader(String name):适用于单值毫秒型请求头
——Enumeration<String> getHeaders(Sting name):适用于多值请求头
----------
获取IP、请求方式、User-Agent

----------

public class AServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获取客户端的IP地址String addr = request.getRemoteAddr();//获取请求方式String method=request.getMethod();//获取User-AgentString userAgent=request.getHeader("User-Agent");System.out.println("IP:"+addr);System.out.println("Method:"+method);System.out.println("User-Agent"+userAgent);}}

----------
利用Referer请求头防盗链

----------

public class BServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.getWriter().print(request.getScheme()+"://");response.getWriter().print(request.getServerName()+":");response.getWriter().print(request.getServerPort());response.getWriter().print(request.getContextPath());response.getWriter().print(request.getServletPath()+"?");response.getWriter().print(request.getQueryString()+"<br/>");response.getWriter().print(request.getRequestURI()+"<br/>");response.getWriter().print(request.getRequestURL());}}

3.获取请求URL
eg:http://localhost:8080/Request/AServlet?username=xxx&password=xxx
String getScheme():获取协议 http
String getServerName():获取服务器名 localhost
String getServerPort():获取服务器端口 8080
String getContextPath():获取项目名称 /Request
String getServletPath():获取Servlet路径 /AServlet
String getQueryString():获取部分参数 username=xxx&password=xxx
String getRequestURI():获取请求URI /Request/AServlet
String getRequestURL():获取请求URL http://localhost:8080/Request/AServlet?username=xxx&password=xxx
4.获取请求参数
在请求体中(post)
在URL之后(get)
String getParameter(String name):获取指定名称的请求参数值(单值)
String[] getParameter(String name):获取获取指定名称的请求参数值(多值)
Enumeration<String> getParameterNames():获取所有请求参数的名称
Map<String,String[]> getParameterMap():获取所有请求参数
----------

超链接参数、表单数据

----------

public class AServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.getWriter().print(request.getParameter("nicknames")+",");response.getWriter().print(request.getParameter("age")+"<br/>");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.getWriter().print(request.getParameter("<br/>"+"usenames")+"<br/>");response.getWriter().print(request.getParameter("password")+"<br/>");String[] hobby = request.getParameterValues("hobby");String s=Arrays.toString(hobby);response.getWriter().print(s);//获取所有参数Enumeration names = request.getParameterNames();while(names.hasMoreElements()){response.getWriter().print("<br/>"+names.nextElement());}//获取所有请求参数,封装到Map中Map<String,String[]>map=request.getParameterMap();for(String name:map.keySet()){String[] values = map.get(name);System.out.println(name+"="+Arrays.toString(values));}}}


0 0