JAVA基础之HttpServletRequest请求
HttpServletRequest请求是获取请求行、请求头和请求体;可以通过这个方法设置防盗链,获取地址。牢记解决乱码的方式。
怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。详见https://www.cnblogs.com/wenanbang/p/4142415.html
其实也可以单纯的认为是若是带数据的话就请求转发了,若改地址的话就重定向了。
一、HttpServletRequest:
概述和运行流程详见HttpServletResponse!
二、获取HTTP请求:
三、获取请求行:
1、获得客户端的请求方式:
getMethod()获得String类型;
2、获得请求的资源:
getContextPath()获得String类型的web应用的名称(项目名)
getQueryString()获得get提交url地址后的参数字符串;
getRequestURI()获取URI地址String类型
getRequestURL()获取URL地址StringBuffer类型
request.getRemoteAddr()获得访问的客户端IP地址
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//获取请求方式
Stringmethod=request.getMethod();
System.out.println("请求方式为:"+method);
//获取请求URI
StringURI=request.getRequestURI();
System.out.println("URI为"+URI);
//获取请求URL
StringBufferURL=request.getRequestURL();
System.out.println("URL为:"+URL);
//URI为/WEB/LineServlet
//URL为:http://localhost:8080/WEB/LineServlet
//获取WEB项目名称
Stringname=request.getContextPath();
System.out.println("WEB项目名称为:"+name);
//获取get请求后url后的字符串
Stringquery=request.getQueryString();
System.out.println("get请求的参数为:"+query);
//获取客户端的ip地址
Stringip=request.getRemoteAddr();
System.out.println("ip地址为:"+ip);
}
四、获取请求头:
getHeader(Stringname)
referer头的作用:获取该访问的来源,做防盗链
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//获取refere头
Stringrefere=request.getHeader("Referer");
Stringcontent=null;
if(refere.startsWith("http://localhost:8080")){
content="真的离婚了!";
}else{
content="你是小偷!";
}
//解决乱码
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(content);
}
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>Inserttitlehere</title>
</head>
<body>
<ahref="/WEB/RefereServlet">宋仲基和宋慧乔分手了</a>
</body>
</html>
五、获得请求体:
1、解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");
2、解决get提交的方式的乱码:
parameter=newString(parameter.getbytes("iso8859-1"),"utf-8");
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
//解决中文乱码问题(post请求)
//request.setCharacterEncoding("UTF-8");
//获取请求参数
//1.单个值的参数
Stringname=request.getParameter("username");
//get解决乱码:得先将获取到的信息用原来的编码表进行解码,然后再用后来的编码表进行编码
name=newString(name.getBytes("ISO-8859-1"),"UTF=8");
Stringsex=request.getParameter("sex");
System.out.println(name+"......"+sex);
//2.获取多个值的
String[]hobbys=request.getParameterValues("hobby");
//遍历
for(Strings:hobbys){
System.out.println(s);
}
//3.获取所有的请求参数MAP
Map<String,String[]>map=request.getParameterMap();
//遍历
Set<String>set=map.keySet();
for(Stringstr:set){
String[]value=map.get(str);
for(Stringv:value){
System.out.println(str+"..."+v);
}
}
六、request的其他功能:
1、request也是个域对象,也是具有以下功能:
setAttribute(Stringname,Objecto)
getAttribute(Stringname)
removeAttribute(Stringname)
2、request完成请求转发:
获得请求转发器----path是转发的地址
RequestDispatchergetRequestDispatcher(Stringpath)
通过转发器对象转发
七、ServletContext域与Request域的生命周期比较:
1、ServletContext:
创建:服务器启动
销毁:服务器关闭
域的作用范围:整个web应用
2、request:
创建:访问时创建request
销毁:响应结束request销毁
域的作用范围:一次请求中
如果您觉得本文的内容对您的学习有所帮助:
关键字:
html