request代表请求,所以我们可以通过该对象分别获得Http请求的请求行,请求头和请求体。
1.通过request获得请求行
获得客户端的请求方式:String getMethod()
获得请求的资源:String getRequestURI(所有的地址);StringBuffer getRequestURL();String getContextPath(web应用的名字);String getQueryString(get提交的url地址后的参数字符串);
获得请求方式
String method=request.getMethod();
System.out.println("method"+method);
获得请求的资源地址
String requestURI=request.getRequestURI();
StringBuffer requestURL=request.getRequestURL();
System.out.println("requstURI"+requestURI);
System.out.println("requestURL"+requestURL);
获得web应用的名称
String contextPath=request.getContextPath();
System.out.println("web应用"+contextPath);
地址后的参数的字符串
String queryString=request.getQueryString();
System.out.println(queryString);
注意:request获得客户机(客户端)的一些信息,request.getRemoteAddr()获得客户端ip地址
获得客户机的信息---获得访问这的ip地址
String remoteAddr=request.getRemoteAddr();
请求体中的内容是通过post提交的请求参数,格式是:
username=zhangsan&password=123&hobby=football;
以上面参数为例,通过以下方法获得请求参数
String getParameter(String name);
String[] getParameterValues(String name);
Enumeration getParameterNames();
Map getParameterMap();
注意:get请求方式的请求参数 上述的方法一样可以可以获得
4.request的其他功能
(1)request是一个域对象
request对象也是一个存储数据的区域对象,setAttribute(String name,Object o),getAttribute(String name),removeAttribute(String name);
(2)request完成请求转发
获得请求转发器:RequestDispatcher getRequestDispatcher(String path)
通过转发器对象转发forward(ServletRequst request,ServletResponse response);
向request中存储对象
request.setAttribute("name","tom");
servlet1将请求转发给servlet2
RequestDispatcher dispatcher=request.getRequestDispatcher("/servlet2");
执行转发的方法
dispatcher.forward(request, response);
5.servletContext域与Request域的生命周期比较?
ServletContext:
创建:服务器启动
销毁:服务器关闭
域的作用范围:整个web应用
Request:
创建:访问时创建
销毁:响应结束
域的作用范围:一次请求中
6.转发与重定向的区别?
1)重定向两次请求,转发一次请求
2)重定向地址栏改变,转发地址不变
3)重定向可以访问外部网站,转发只能访问内部资源
4)转发的性能要优于重定向
7.客户端地址与服务器端地址的写法?
客户端地址
是客户端访问服务器的地址,服务器外部地址,特点:写上web应用的名称
直接输入地址:
重定向地址:
服务器端地址
服务器内部资源的跳转的地址,特点:不需要写web应用的名称
转发:
7.表单提交编码问题解决
post:
request.setCharacterEncoding("utf-8");
get:
String username=request.getParameter("username");
username=new String(username.getBytes("iso8859-1"),"utf-8");
1.通过request获得请求行
获得客户端的请求方式:String getMethod()
获得请求的资源:String getRequestURI(所有的地址);StringBuffer getRequestURL();String getContextPath(web应用的名字);String getQueryString(get提交的url地址后的参数字符串);
获得请求方式
String method=request.getMethod();
System.out.println("method"+method);
获得请求的资源地址
String requestURI=request.getRequestURI();
StringBuffer requestURL=request.getRequestURL();
System.out.println("requstURI"+requestURI);
System.out.println("requestURL"+requestURL);
获得web应用的名称
String contextPath=request.getContextPath();
System.out.println("web应用"+contextPath);
地址后的参数的字符串
String queryString=request.getQueryString();
System.out.println(queryString);
注意:request获得客户机(客户端)的一些信息,request.getRemoteAddr()获得客户端ip地址
获得客户机的信息---获得访问这的ip地址
String remoteAddr=request.getRemoteAddr();
System.out.println(remoteAddr);
2.通过request获得请求头
long getDateHeader(String name);
String getHeader(String name);
Enumeration getHeaderNamers();
Enumeration getHeaders(String name);
int getIntHeader(String name);
referer头的作用:执行该此访问的来源,做防盗链
<body>
<a href="/WEB/referer">访问header资源</a>
<form action="/WEB/headerServlet" method="post">
<input type="text" name="username"><br/>
<input type="password" name="password"><br/>
<input type="submit" value="提交"><br/>
</form>
</body>
news.html
<body>
<a href="/WEB/referer">奥运会金牌100块</a>
</body>
RefererServelt.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//对该新闻的来源进行判断
String header=request.getHeader("referer");
if(header!=null&&header.startsWith("http://localhost")){//指定域名,从该域名访问的可以看新闻
//是从我自己的网站跳转过去的 可以看新闻
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("中国确实已经拿到100块金牌");
}else{
response.getWriter().write("你是盗版者,可耻");
}
}
3.通过request获得请求体
请求体中的内容是通过post提交的请求参数,格式是:
username=zhangsan&password=123&hobby=football;
以上面参数为例,通过以下方法获得请求参数
String getParameter(String name);
String[] getParameterValues(String name);
Enumeration getParameterNames();
Map getParameterMap();
注意:get请求方式的请求参数 上述的方法一样可以可以获得
<form action="/WEB/content" method="post">
<input type="text" name="username"><br/>
<input type="password" name="password"><br/>
<input type="checkbox" name="hobby" value="zq">足球
<input type="checkbox" name="hobby" value="pq">排球
<input type="checkbox" name="hobby" value="ppq">乒乓球
<input type="submit" value="提交"><br/>
</form>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
//获得单个表单值
String username=request.getParameter("username");
System.out.println(username);
String password=request.getParameter("password");
System.out.println(password);
//获得多个表单值
String[] hobbys=request.getParameterValues("hobby");
for(String hobby:hobbys){
System.out.println(hobby);
}
//获得所有的请求参数的名称
Enumeration<String> parameterNames=request.getParameterNames();
while(parameterNames.hasMoreElements()){
System.out.println(parameterNames.nextElement());
}
System.out.println("---------------");
//获得所有的参数封装到map<String,String[]>
Map<String,String[]> parameterMap=request.getParameterMap();
for(Map.Entry<String,String[]>entry:parameterMap.entrySet()){
System.out.println(entry.getKey());
for(String str:entry.getValue()){
System.out.println(str);
}
System.out.println("--------------");
}
}
4.request的其他功能
(1)request是一个域对象
request对象也是一个存储数据的区域对象,setAttribute(String name,Object o),getAttribute(String name),removeAttribute(String name);
(2)request完成请求转发
获得请求转发器:RequestDispatcher getRequestDispatcher(String path)
通过转发器对象转发forward(ServletRequst request,ServletResponse response);
向request中存储对象
request.setAttribute("name","tom");
servlet1将请求转发给servlet2
RequestDispatcher dispatcher=request.getRequestDispatcher("/servlet2");
执行转发的方法
dispatcher.forward(request, response);
5.servletContext域与Request域的生命周期比较?
ServletContext:
创建:服务器启动
销毁:服务器关闭
域的作用范围:整个web应用
Request:
创建:访问时创建
销毁:响应结束
域的作用范围:一次请求中
6.转发与重定向的区别?
1)重定向两次请求,转发一次请求
2)重定向地址栏改变,转发地址不变
3)重定向可以访问外部网站,转发只能访问内部资源
4)转发的性能要优于重定向
7.客户端地址与服务器端地址的写法?
客户端地址
是客户端访问服务器的地址,服务器外部地址,特点:写上web应用的名称
直接输入地址:
重定向地址:
服务器端地址
服务器内部资源的跳转的地址,特点:不需要写web应用的名称
转发:
7.表单提交编码问题解决
post:
request.setCharacterEncoding("utf-8");
get:
String username=request.getParameter("username");
username=new String(username.getBytes("iso8859-1"),"utf-8");