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));
}
}
}