HttpServletRequest与HttpServletResponse概要
2015-11-23 19:54
453 查看
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-Agent String 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)); } } }
相关文章推荐
- [c#][Windows 10 | Windows 10 mobile | Windows Phone] HttpClient 实现form-data POST上传请求
- TCP/IP、Http、Socket的区别
- 认识http协议
- vm的网络设置
- 怎么利用HttpURLConnection向服务器发送键值对
- 构造特定五元组的HTTP报文,和trace route
- 协议森林09 爱的传声筒 (TCP连接)
- 分布式Java应用之网络通信(1)
- android中的http通信---(3)通过get、post方式传数据给服务器
- android中的http通讯(2)
- Python 一条命令 开启 Http 服务
- iOS9 项目因使用http请求导致失败怎么处理
- 学习日记--Android第三方异步网路加载库AsyncHttpClient内部实现
- coco2d-js 无法加载网络图片(Failed to execute 'texImage2D' on ‘WebGLRenderin
- android中的http通信(1)
- 计算机网络:运输层
- 强大的网络通信框架(不实现缓存)--第三方开源--AsyncHttpClient
- Http Invoker Service & Client
- socket和TCP/IP,http的区别
- HTTP请求过程