get、post区别
1、post有请求体
2、get请求意味着获取消息,不改变服务器上的东西
而post请求意味着发送需要处理的数据,去改变服务器上的一些东西
3、可以多次发起get请求,而不对服务器有影响,是等幂请求;
但post不同,要避免表单的重复提交,是非等幂请求
4、post请求需要表单,在<form> 标签中使用method属性指定http 方法为post,使用action 属性指定表单提交的地址;而get除了这种方法之外,还可以直接使用超链接的方式。
使用参数
1、当输入的参数为1个值时,使用request.getParameter
例如:
String name = request.getParameter("username");
2、多选框,输入多个值,使用 getParameterValues
String[] hobbies = request.getParameterValues("hobby");
PrintWriter out = response.getWriter();
for(String s:hobbies){
out.println(s.toString());
}
3、还可以使用getParameterNames方法
Enumeration<String> paras = request.getParameterNames();
PrintWriter out = response.getWriter();
while(paras.hasMoreElements()){
String paraname = paras.nextElement();
out.println(paraname+":"+request.getParameter(paraname));
}
4、获取所有请求的参数名称和值,放到一个map对象中
PrintWriter out = response.getWriter();
Map<String, String[]> mapParas = request.getParameterMap();
for(Map.Entry<String, String[]> entry :mapParas.entrySet()){
out.println(entry.getKey()+":"+entry.getValue()[0]);
}
提示map遍历:
Map<String, String[]> mapParas = new HashMap<String, String[]>();
mapParas.put("xx",new String[]{"18","a"});
mapParas.put("yy",new String[]{"19","b"});
for(Map.Entry<String, String[]> entry :mapParas.entrySet()){
int len = entry.getValue().length;
System.out.print(entry.getKey()+":");
for(int i=0;i<len;i++)
System.out.print(entry.getValue()[i]+" ");
System.out.println();
}
请求头和响应头
请求头常用方法:
String browser = request.getHeader("User-Agent");
int size = request.getIntHeader("Content-Length");
int size2 = request.getContentLength();
Enumeration<String> eHeaders = request.getHeaderNames();
Enumeration<String> languages = request.getHeaders("Accept-Language");
int remotePort = request.getRemotePort();//客户端的端口号
int serverPort = request.getServerPort();//请求原来发送的那个服务器端口
int localPort = request.getLocalPort();//最终分配的端口
响应头常用方法
response.setHeader("ContentType", "text/html");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset = utf-8");
response.setDateHeader("Expires", 0);//阻止浏览器缓存
response.setIntHeader("Refresh", 5);//设置刷新,5秒后自动刷新
response.setContentLength(1500);//设置请求体长度
doGet方法体内
response.setCharacterEncoding("utf-8");
response.setHeader("Content-type", "text/html charset = utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>"
+"其他html"+
"</body></html>");
out.flush();
out.close();
注意:
一般在调用输出流对象之前(getWriter()、getOutputStream()等)之前要先调用setContentType()方法
完