1.通过request获得请求行
获得客户端的请求方式:String getMethod()
获得请求的资源:
String getRequestURI()
StringBuffer getRequestURL()
String getContextPath() ---web应用的名称
String getQueryString() ---- get提交url地址后的参数字符串
注意:request获得客户机(客户端)的一些信息
request.getRemoteAddr() --- 获得访问的客户端IP地址
1 //获得请求方式 2 String Method=request.getMethod(); 3 System.out.println("方式"+Method); 4 //获得请求资源相关内容 5 String requestURI=request.getRequestURI(); 6 System.out.println("uri:"+requestURI); 7 StringBuffer requestURL =request.getRequestURL(); 8 System.out.println("url:"+requestURL); 9 //获得WEB应用名称 10 String contextPath=request.getContextPath(); 11 System.out.println("WEB应用名称"+contextPath); 12 //地址后的参数字符串 13 String queryString=request.getQueryString(); 14 System.out.println(queryString); 15 //获得访问者的IP地址 16 String remoteAddr=request.getRemoteAddr(); 17 System.out.println("ip:"+remoteAddr);
2.通过request获得请求头
1)long getDateHeader(String name)
2)String getHeader(String name)
3)Enumeration getHeaderNames()
4)Enumeration getHeaders(String name)
5)int getIntHeader(String name)
1 //获得指定的头
2 String header=request.getHeader("User-Agent");
3 System.out.println(header);
4 //2.获得所有头的信息
5 Enumeration<String> headerNames=request.getHeaderNames();
6 while(headerNames.hasMoreElements()) { //判断是否还有更多
7 String headerName=headerNames.nextElement();
8 String headerValue=request.getHeader(headerName);//通过名获取值
9 System.out.println(headerName+" "+headerValue);
注意:referer头的作用:执行此次访问的来源做防盗链
防止其他网站盗用自家网站信息
//简单的一个获取referer头的网页
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Insert title here</title> 6 </head> 7 <body> 8 <a href="/WEB4/referer">访问HeaderServlet资源</a> 14 </body> 15 </html>
String header =request.getHeader("referer");
//判断访问的地址是否为该地址
if(header!=null && header.startsWith("http://localhost"))
{
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("啦啦啦啦啦啦啦啦");
}else {
System.out.println("fsf");
}
3.通过request获得请求体
1)String getParameter(String name);
2)String[] getParameterValues(String name);
3)Enumeration getParameterNames();
4)Map<String,String[]> getParameterMap();
注意:get请求方式的请求参数 上述的方法一样可以获得;
解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");
解决get提交的方式的乱码:parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");
<form action="/WEB4/content" method="post"> <input type="text" name="username"><br> <input type="password" name="passworld"><br> <input type="checkbox" name="hobby" value="zq">足球 <input type="checkbox" name="hobby" value="lq">篮球 <input type="checkbox" name="hobby" value="pq">乒乓球<br> <input type="submit" value="提交"> </form>
1 //获得单个表单值
2 String username=request.getParameter("username");
3 System.out.println(username);
4 String password =request.getParameter("passworld");
5 System.out.println(password);
6 System.out.println("-------------------");
7 //2.获得多个表单的值
8 String[] hobbys = request.getParameterValues("hobby");
9 for(String hobby:hobbys) {
10 System.out.println(hobby);
11 }
12 System.out.println("-------------------");
13 //3.获得所有请求参数名称
14 Enumeration<String> parameterNames = request.getParameterNames();
15 while(parameterNames.hasMoreElements()) {
16 System.out.println(parameterNames.nextElement());
17 }
18 System.out.println("-------------------");
19 //4.获得所有的参数,参数封装到Map<String,String[]>
20 Map<String, String[]> parameterMap = request.getParameterMap();
21 for(Map.Entry<String, String[]> entry:parameterMap.entrySet()) {
22 System.out.println(entry.getKey());
23 for(String str:entry.getValue()) {
24 System.out.println(str);
25 }
26 System.out.println("---------------");
27 }
4.request的域对象和请求转发
(1)request是一个域对象
request对象也是一个存储数据的区域对象,所以也具有如下方法:
1)setAttribute(String name, Object o)
2)getAttribute(String name)
3)removeAttribute(String name)
注意:request域的作用范围:一次请求中
(2)request完成请求转发
获得请求转发器----path是转发的地址
RequestDispatcher getRequestDispatcher(String path)
通过转发器对象转发
requestDispathcer.forward(ServletRequest request, ServletResponse response)
客户端请求forwar1,forward1又发送请求到forward2;
//向request域当中存取数据
request.setAttribute("name", "tom");
//forward1将请求转发给forward2(获得转发器)
RequestDispatcher dispatcher = request.getRequestDispatcher("/forward2");//服务器端地址
//执行转发方法
dispatcher.forward(request, response);
//从request域中取数据
Object attribute = request.getAttribute("name");
response.getWriter().write("hello haohao..."+attribute);
注意:转发与重定向的区别?
1)重定向两次请求,转发一次请求
2)重定向地址栏的地址变化,转发地址不变
3)重新定向可以访问外部网站 转发只能访问内部资源
4)转发的性能要优于重定向