【Web入门系列】初探HttpServletRequest

学习HttpServletRequest之前,先来要搞清楚http请求中GET请求和POST请求的区别。

GET请求与POST请求区别

1、GET请求方式,请求参数会跟在URI后面;POST请求方式,请求参数不会跟在URI后面,而是放在在实体内容里。

2、GET请求方式,提交参数数据有大小限制,不超过1KB;POST请求参数没有大小限制。

3、GET请求方式,不适合提交敏感数据;POST请求方式可以用来提交敏感数据。

默认GET提交方式,只有POST请求方式才有实体内容

HttpServletRequest获取请求行、请求头、实体

获取请求方式:request.getMethod()

获取请求资源:request.getRequetURI()   / request.getRequetURL()   

获取请求http协议版本:request.getProtocol()   

根据请求头获取请求值:request.getHeader("名称")  

获取所有的请求头名称:request.getHeaderNames()    

获取实体内容:request.getInputStream() 

public class RequestDemo extends HttpServlet {


/**
* 注意:tomcat服务器首先会调用servlet的service方法,然后在service方法中再根据请求方式来分别调用对应的doXX方法
* (例如,如果是GET请求方式,在service方法中调用doGet方法)
* 因为最常的请求方式是GET 和POST,所以编写servlet程序,只需要覆盖doGet和doPost即可.
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
System.out.println("service方法被调用");
System.out.println(request.getMethod());
}

/**
* tomcat服务器接收到浏览器发送的请求数据,然后封装到HttpServletRequest对象
* tomcat服务器调用doGet方法,把request对象传入到servlet中
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

t1(request);

t2(request);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request,response);

/**
* 3.3 请求的实体内容
*/
//得到实体内容
InputStream in = request.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
while( (len=in.read(buf))!=-1 ){
String str = new String(buf,0,len);
System.out.println(str);
}
}

private void t1(HttpServletRequest request) {
/**
* 3.1 请求行 格式:(GET /day09/hello HTTP/1.1)
*/
System.out.println("请求方式:"+request.getMethod());
System.out.println("URI:"+request.getRequestURI());
System.out.println("URL:"+request.getRequestURL());
System.out.println("http协议版本:"+request.getProtocol());
}

private void t2(HttpServletRequest request) {
/**
* 3.2 请求头
*/
//根据头名称的到头的内容
String host = request.getHeader("Host");
System.out.println(host);
//得到所有的请求头名称列表
Enumeration<String> enums = request.getHeaderNames();
//判断是否有下一个元素
while(enums.hasMoreElements()){
//取出下一个元素
String headerName = enums.nextElement();
String headerValue = request.getHeader(headerName);
System.out.println(headerName+":"+headerValue);
}
}

}

HttpServletRequest获取请求参数

获取GET方式参数:request.getQueryString();

获取POST方式参数:request.getInputStream();

上面两种方法我们可以分别获取到GET和POST方式提交的请求参数,但是这样不是很统一,而且获取到的参数还需要进一步地解析。

request.getParameterValues(String name)是获得如checkbox类(名字相同,但值有多个)的数据。接收数组变量,如checkobx类型 

request.getParameter(String name)是获得相应名的数据,如果有重复的名,则返回第一个的值.。接收一般变量,如 text类型

request.getParameterNames() 获取所有参数名称列表:   

public class RequestParamServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

/**
* 设置参数查询的编码
* 该方法只能对请求实体内容的数据编码起作用。POST提交的数据在实体内容中,所以该方法对POST方法有效!
* GET方法的参数放在URI后面,所以对GET方式无效。
*/
request.setCharacterEncoding("utf-8");

/*System.out.println("GET方式");
//接收GET方式提交的参数
String value = request.getQueryString();
System.out.println(value);*/

/**
* 统一方便地获取请求参数的方法
*/
//根据参数名得到参数值
String name = request.getParameter("name");
/**
* 手动重新解码(iso-8859-1 字符串-> utf-8 字符串)
*/
if("GET".equals(request.getMethod())){
name = new String(name.getBytes("iso-8859-1"),"utf-8");
}
System.out.println("name:"+name);

String password = request.getParameter("password");
System.out.println("password:"+password);

System.out.println("=============================");
Enumeration<String> enums = request.getParameterNames();
while( enums.hasMoreElements() ){
String paramName = enums.nextElement();
String paramValue = request.getParameter(paramName);
System.out.println(paramName+":"+paramValue);
}

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

/*System.out.println("POST方式");
InputStream in = request.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
while((len=in.read(buf))!=-1 ){
System.out.println(new String(buf,0,len));
}*/

doGet(request,response);

}

}

 

转载于:https://www.cnblogs.com/ysdrzp/p/9862312.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值