您的位置:首页 > 理论基础 > 计算机网络

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: