Servlet--Request1

Request

HttpServletRequest

  • 组成部分
    • 请求行 方法 URL 协议版本
    • 请求头 Host:虚拟主机名称/域名
    • 空行
    • 主题内容 请求参数

客户端API

在这里插入图片描述
localhost虚拟主机/day09-reqres虚拟路径,也是web应用的名字/RequestDemo1资源名称

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/RequestDemo1")
public class RequestDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        StringBuffer requestURL = request.getRequestURL();//返回客户端发出的请求中的URL
        System.out.println("url"+requestURL);
        String requestURI = request.getRequestURI();//返回请求行中资源名称,统一资源标识符
        System.out.println("uri"+requestURI);
        String qs = request.getQueryString();//返回请求行参数部分 ?uername=root&password=123456 这就是参数 
        System.out.println("qs"+qs);
        String ip = request.getRemoteAddr();//返回请求的客户机的IP地址
        System.out.println("ip"+ip);
        String method = request.getMethod();//返回客户机请求方式
        System.out.println("method"+method);
        String contextPath = request.getContextPath();
        System.out.println("path"+contextPath);//返回虚拟路径名称
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);

    }
}

在这里插入图片描述

请求头API

  • getHeader
  • getHeaders
  • getHeaderNames 获取全部请求头的名称
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

@WebServlet("/RequestDemo2")
public class RequestDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求头中包含的值
        String host = request.getHeader("Host");
        System.out.println("host:"+host);
        Enumeration<String> hosts = request.getHeaders("Host");
       while (hosts.hasMoreElements()) {
           //迭代器
           //同一个Servlet 支持热部署,新创建Servlet 要重启服务
           System.out.println("hosts:"+hosts.nextElement());

           Enumeration<String> header = request.getHeaderNames();
           while (header.hasMoreElements()){
               System.out.println("headerName: "+header.nextElement());
           }
       }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);

    }
}

在这里插入图片描述
在这里插入图片描述

  • getIntHeader
  • getDateHeader

请求参数相关API

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

在这里插入图片描述
在这里插入图片描述

form表单例子

  • 要复制到web目录下
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
	</head>
	<body>
		<h1>GET提交</h1>
	    <!---/web应用目录/资源名-->
		<form action="/day09-reqres/RequestDemo3" method="GET">
			用户名: <input type="text" name="username" />
			昵称: <input type="text" name="nickname" />
			<input type="submit" value="提交" />
		</form>
		<h1>POST提交</h1>
		<form action="/day09-reqres/RequestDemo3" method="POST">
			用户名: <input type="text" name="username" />
			昵称: <input type="text" name="nickname" />
			爱好: <input type="checkbox" name="like" value="lanqiu" />篮球
				<input type="checkbox" name="like" value="zuqiu" />足球
				<input type="checkbox" name="like" value="taiqiu" />台球
			<input type="submit" value="提交" />
		</form>
	</body>
</html>

乱码问题

在这里插入图片描述
在这里插入图片描述
原因:编码,解码字符集不统一。

方法1设置服务器解码字符集
  • 浏览器发送数据,是编码数据的位置;浏览器使用何种字符集打开页面,就会使用何种字符集发送数据,utf-8。 服务器接收数据,是解码数据的位置;tomcat8.5 及其以上 utf-8,7.0是iso8859-1,这个字符集没中文。所以,可以通知服务器接收数据时用utf-8解码。
//只在post生效(请求实体内容中),中文以get方式提交,仍然是乱码
//post提交方式下,请求参数都会涵盖在请求实体内容中
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
System.out.println("username: "+username);

在这里插入图片描述

方法2 解码乱码 Get方式

在这里插入图片描述
字符C(浏览器:输入)→二进制数据B(浏览器:用utf-8编码)→乱码D(服务器:用iso解码)→二进制数据B(服务器:用iso编码)→字符C(服务器:用utf-8解码)

String username = request.getParameter("username");
byte[] bytes = username.getBytes("iso8859-1");//编码
username = new String(bytes, "utf-8");//解码
System.out.println("username"+username);

在这里插入图片描述
在这里插入图片描述

  • getParameterValues
    获取多值参数
String[] likes = request.getParameterValues("like");
System.out.println(Arrays.toString(likes));
//数组打印,不需要遍历

在这里插入图片描述
在这里插入图片描述

  • getParameterMap
  Map<String, String[]> parameterMap = request.getParameterMap();
  System.out.println(parameterMap);
  • getParameterName
   Enumeration<String> parameterNames = request.getParameterNames();
    while (parameterNames.hasMoreElements()){
           String name = parameterNames.nextElement();//获取请求参数名称
           String value = request.getParameter(name);//根据参数名获取值,获取多值时只能获取第一个值
           //可以改用parameterValues
            System.out.println(name+"----"+Arrays.toString(value));
       }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值