java request 请求头_HttpServletRequest、通过request获得请求头、请求体等、解决中文乱码等问题...

1、HttpServletRequest概述:

我们在创建Servlet时,会重写service()方法、doGet()\、doPost()方法,这些方法都有两个参数request(请求)和response(响应),service中的request是ServletRequset,而

doGet()和doPost()方法中的是:HttpServletRequest,HttpServletRequest是ServletRequest的子接口。

2、request的运行流程:

a90a704f0bf71aee1cdecd840ad3316b.png

3、通过request获得请求行

(1)获得客户端的请求方式:

String method=request。getMethod()

(2)获得请求资源:

String URI=request。getRequestURI();

String  URL=request.getRequestURL();

(3)获得WEB应用的名称

String   webname=request.getContextPath();

(4)get提交url地址后的参数字符串

String queryString=request.getQueryString();

(5)获得访问的客户端IP地址

String ip=request.getRemoteAddr();

4.通过request获得请求头

(1)获取请求头

String agent=request.getHeader("User-Agent");

(2)

获取所有请求头名称

Enumeration headerNames=request.getHeaderNames();

while(headerNames.hasMoreElements()){

//获取每个请求头名称

String headerName=headerNames.nextElement();

//跟距请求头获取请求值

String value=request.getHeader(headerName);

System.out.println(headerName);

System.out.println(value);

referer头的作用:执行该此访问的的来源

做防盗链跳转

packageservlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class ReferServlet extendsHttpServlet {//防盗链

public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//获取请求头中的referer

String referer=request.getHeader("referer");//不是以"http://localhosr:8080"开头的不能访问

if(referer!=null&&referer.startsWith("http://localhosr:8080")){//认为可以正常访问//结觉中文乱码

response.setContentType("text/html;charset=utf-8");

response.getWriter().write("啊啊啊啊啊啊啊啊");

}else{

response.setContentType("text/html;charset=utf-8");

response.getWriter().write("不不不不不不不不不不不不不不不不不不不不不不不不");

}

}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

doGet(request, response);

}

}

5.通过request获得请求体解决中文乱码等问题

获取表单元素的值:String username=request.getParameter("username");

获取表单所有元素的值:Map map=request.getParameterMap();

packageservlet;importjava.io.IOException;importjava.util.Map;importjava.util.Set;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class BodyServlet extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//post方式解决中文乱码

request.setCharacterEncoding("utf-8");//获取表单元素的值、//get方式结觉中文乱码问题

String username=request.getParameter("username");//username=new String//(username.getBytes("iso8859-1"),"utf-8");

String password=request.getParameter("password");

System.out.println(username+"..."+password);//获取表单所有元素的值

Map map=request.getParameterMap();

Set set=map.keySet();for(String s:set){

String key=s;

String[] value=map.get(s);//遍历数组

for(String s1:value){

System.out.println(s+":"+s1);

}

}

}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

doGet(request, response);

}

}

6、request是一个域对象

request对象也是一个存储数据的区域对象,所以也具有如下方法:

setAttribute(xxxx, xxxxxxxxxxx)

注意:request域的作用范围:一次请求中

7、request完成请求转发

获得请求转发器----path是转发的地址

通过转发器对象转发

requestDispathcer.forward(ServletRequest request, ServletResponse response)

转发:

packageservlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class Servlet01 extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//向request中内放值

request.setAttribute("name","小红帽");//请求转发

request.getRequestDispatcher("/Servlet02").forward(request, response);

response.getWriter().write("servlet01");

}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

doGet(request, response);

}

}

packageservlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public classServlet02 extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

String name=(String) request.getAttribute("name");//解决中文乱码

response.setContentType("text/html;charset=utf-8");

response.getWriter().write("servlet02"+name);

}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

doGet(request, response);

}

}

631eef2f4bed11e3b6409c27d7eae3cf.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值