关于防盗链
Referer
String ref=request.getHeader("Referer");
//判断请求头中的referer是否为空或者没东西或者不来自163网站,那么就是盗链行为,直接重定向到原网页
if(ref==null||"".equals(ref)||!ref.startsWith("http://www.163.com"));
response.sendRedirect(request.getContextPath()+"index.jsp");
获取客户机的信息
getRequestURL方法返回客户端发出请求完整URL
getRequestURI方法返回请求行中的资源名部分
getQueryString 方法返回请求行中的参数部分
getRemoteAddr方法返回发出请求的客户机的IP地址
getMethod得到客户机请求方式
getContextPath 获得当前web应用虚拟目录名称
遍历jsp页面的所以请求参数
Enumeration<String> enumeration=request.getParameterNames();
while(enumeration.hasMoreElements)
{
String name=enumeration.nextElement();
String values=request.getParameter(name);
System.out.println(name+":"+value);
}
[中文乱码问题]
获取请求参数
//在JSP页面上模拟响应头,设置字符编码为UTF-8
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
乱码问题:
利用request获取的请求参数,是根据打开jsp页面的浏览器用的什么编码读取,那么
就用什么编码传输,模拟响应头的话相当于固定设置浏览器的读取编码格式
但是在服务器上,默认解析编码的是用的ISO8859-1,
这样就会导致解析中文字节出现乱码。
//通过设置服务器的解析编码方式为UTF-8,这样就可以避免乱码了
request.setCharacterEncoding("UTF-8");
(这只是适用在post请求,因为post请求的请求参数在实体内容当中;get请求不在实体内容当中,在URL后面)
对于get请求方式,出现乱码的话,只能手动解决。
假设前端获取的 usename是乱码 ,
username =new String (username.getBytes("iso8859-1"),"utf-8");
先把从服务器上错误解析的乱码username通过iso8859-1的方式重新解析回去;
在利用utf-8的编码格式去重新解析它。这样就可以达到手动解析,解决乱码了。
response.getWriter().write("中文XX");
这种情况输出会有乱码的话,就需要设置
①response.setContentType("text/html;charset=utf-8");
但是这种情况务必把①放在write内容前面!!!!!
以下这种使用OutputStreamwrite输出,设置放在前后都可以
response.getOutputStream().write("中文国歌".getBytes("utf-8"));
response.setContentType("text/html;charset=utf-8");
request的请求转发
this.getServletContext().getRequestDispatcher("/RequestTest2").forward(request, response);
request.getRequestDispatcher("/RequestTest2").forward(request, response);
request的请求包含
request.getRequestDispatcher("/RequestTest2").include(request, response);
请求转发的话,当前的servlet的输出信息是只能进入服务器的缓冲区,但是一旦执行转发时,就会清除掉实体内容,请求头信息不会清除,但是这样当前的servlet的信息就输出不了;而使用请求包含的话就可以顺带输出当前servlet的东西。