HttpServletResponse对象(response)的常用方法
- setCharacterEncoding("utf-8") //设置响应的编码字符集
- setContentType("text/html;charset=utf-8") //设置响应内容的类型、编码字符集
- getWriter() //获取字符输出流,PrintWriter,不能输出二进制内容。适合输出文本响应,比如html文档。
- getOutputStream() //获取字节输出流,ServletOutputStream,既可以输出文本,又可以输出二进制数据。
-
setHeader("refresh","3") //定时刷新所请求的页面(当前页面)
-
setHeader("refresh","3;url=http://www.baidu.com") //定时跳转。3s后自动跳转到百度。秒数、url之间分号分隔,缺省url时默认为当前页面,即定时刷新当前页面。
- sendRedirct("/servlet2") //重定向。通知浏览器请求指定utl,浏览器会自动向该url发送请求。浏览器总的发送2次HTTP请求。
HttpServletRequest对象(request)的常用方法
- String getRemoteAddr() //获取客户端的ip地址
- String getLocalAddr() //获取服务器的IP地址
- String getServerName() //获取服务器的域名地址
- String getMethod() //获取请求方式,比如get、post
- String getQueryString() //获取请求字符串,即地址栏中?后面的全部内容(包括&,不包括?)。此方法只能获取get方式传递的参数,不能用于post。
- String getHeader(String name) //获取请求头中指定字段的值
- setCharactorEncoding("utf-8"); //设置请求参数的编码字符集
//获取请求参数(地址栏中?后面的部分、表单数据)
- String getParameter(String name) //获取指定参数的值(表单)。如果没有该参数,返回null;如果有该参数,但该参数没有值,返回空串;如果有多个该参数,则只返回第一个的值
- String[] getParameter(String name) //如果有多个该参数,以字符串数组的形式返回。常用于获取复选框的值。
- Enumeration getParameterNames() //返回一个包含所有参数名的Enumeration对象
- Map getParameterMap() //返回一个包含所有参数名、值的Map对象
//RequestDispatcher dispatcher意为调度、分配、调度员
- RequestDispatcher rd = request.getRequestDispathcer(String path) //获取RequestDispatcher对象
- rd.forward(request, response) //请求转发。当前Servlet不处理请求,由另一个url处理请求、并返回响应。服务器内部行为,客户端总的只发送1次HTTP请求。
- rd.include(request, response) //请求包含,将另一个url处理的结果包含进来(替换掉此句代码),与当前Servlet的处理结果一同组成响应返回给客户端。
//当使用RequestDispatcher进行请求转发、包含时,可以使用attribute传递一些其他数据
- request.setAttribute(String name, Object value) //设置、修改
- Object request.getAttribute(String name) //取出
- Enumeration getAttributeNames() //获取一个含有所有name的Enumeration对象,用于遍历attribute
- request.removeAttribute(String name) //删除、移出
attribute是在请求中附加一些额外的数据,attribute传递的并不是表单数据(parameter)。
attribute、parameter是2套单独的方法。
防盗链
1 //获取referer头部字段的值 2 String referer = request.getHeader("referer"); 3 //获取请求的网站地址 4 String sitePart="http://"+request.getServerName(); 5 6 //不是盗链 7 if(referer!=null && referer.startsWith(sitePart)){ 8 //转到请求页面 9 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/download.html"); 10 requestDispatcher.forward(request,response); 11 } 12 else{ 13 //......盗链 14 }
referer头字段指的是HTTP请求的来源。不是客户端的地址。
比如某网站 http://www.example.com/ 上有一个页面 http://www.example.com/index.html,这个页面上有一个<a>链接:http://www.example.com/articles/1.html,
某人点击了这个<a>链接,他的浏览器会发起一次HTTP请求,这次请求的referer头字段是http://www.example.com/index.html。被点击的这个<a>链接来自该页面,referer头字段就是来源页面的url。
可以使用referer头字段检测访客的来源(访客是从通过哪个页面|网站来的)。
访客要访问本网站上的资源(观看视频、下载资源等),他的浏览器发起了一个HTTP请求,如果访客点击的是本站页面上提供的资源链接,访客来源本站,通过;
如果访客点击的不是本站页面上提供的链接(点击的是其它网站页面上提供的链接),那就是盗链。