[JAVAEE笔记]04HttpServletRequest

HttpServletRequest

HttpServletRequest概述

客户端发送给服务器端的数据。

我们在创建Servlet时会覆盖service()⽅法,或doGet()/doPost(),这些⽅法都有两个参数,

代表请求的request和代表响应response。

HttpServletRequest是ServletRequest的⼦接⼝,功能和⽅法更加强⼤,

通过request获得请求⾏

  • 获得客户端的请求⽅式:String getMethod()
  • 获得请求的资源:
方法作用
String getRequestURI()获取请求URI
StringBuffer getRequestURL()获取请求URL
String getContextPath()获取虚拟⽬录,动态路径**
String getServletPath()获取Servlet路径
String getQueryString()获取get⽅式请求参数
String getRemoteAddr()获取客户机的IP地址
@WebServlet("/Demo01Servlet")
public class Demo01Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1.获得请求行信息
        String method = req.getMethod(); // 请求方式   大写
        String uri = req.getRequestURI();//获取请求URI
        String url = req.getRequestURL().toString();//获取请求URL
        String addr = req.getRemoteAddr();// 获得客户端IP地址
    }

通过request获得请求头

方法作用
long getDateHeader(String name)
String getHeader(String name)
int getIntHeader(String name)
Enumeration getHeaderNames()获取所有的请求头名称

常用请求头:

  • Cookie:与会话有关的技术,用于存放浏览器缓存的cookie信息.
  • User-Agent:浏览器通知服务器,客户端浏览器与操作系统相关的信息.
    作⽤:可以在服务器端获取该头的信息,解决浏览器的兼容性问题
  • Referer:告诉服务器,我(当前请求)从哪⾥来?
    作用:防盗链接,可以判定跳转页面,进行拦截
@WebServlet("/Demo2")
public class Demo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String referer = req.getHeader("referer");//处理盗链问题
        if (referer==null||referer.contains("day03_war_exploded")){//判断请求中是否包含选定的网址
            resp.getWriter().write("success");
        }else{
            System.out.println("false");
        }
    }
}

通过request获得请求参数

方法method()格式/作用
String getQueryString()get⽅式username=zhangsan&password=123
BufferedReader getReader()post方式获取字符输⼊流,只能操作字符数据
ServletInputStream getInputStream()post方式获取字节输⼊流,可以操作所有类型数据
请求参数在URL上?(Get方式)
@WebServlet("/Demo04Servlet")
public class Demo04Servlet extends HttpServlet {
    // 获得请求参数
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // get请求参数在URI上  ?后面的参数
        String queryString = req.getQueryString();
        System.out.println(queryString);// 格式:username=lucy&password=111
    }
}
请求参数在请求体中?(Post方式)
@WebServlet("/Demo04Servlet")
public class Demo04Servlet extends HttpServlet {
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	    // post请求参数在请求体里 -> 输入流
	    ServletInputStream is = req.getInputStream();
	    byte[] bytes = is.readAllBytes();// 读取所有字节
	    String s = new String(bytes);
	    System.out.println(s);// name=lisi&age=18
	}
}

request的其他功能

设置字符集
原始方式实现字符集转换

在这里插入图片描述

解码思路

public class Demo05Servlet extends HttpServlet {
    // 获得请求参数
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		    //String username = req.getParameter("username");
		    //System.out.println(username);
		    //byte[] bytes = username.getBytes("ISO8859-1");
		    //username = new String(bytes, "UTF-8");
		    username = new String(username.getBytes("ISO8859-1"), "UTF-8");
		    System.out.println(username);
	}
}
使用设置字符集方法改变字符集
@WebServlet("/Demo05Servlet")
public class Demo05Servlet extends HttpServlet {
    // 获得请求参数
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		 // 设置请求字符集 - 只针对于Post请求方式有效
		  req.setCharacterEncoding("UTF-8");
		  String password = req.getParameter("password");
		  System.out.println(password);
	}
}
请求转发与重定向的关系
请求转发
  • 步骤:
  1. 通过request对象获取请求转发器对象:getRequestDispatcher(String path)
  2. 使⽤RequestDispatcher对象来进⾏转发:forward(ServletRequest request,ServletResponse response)
  • 特点:
  1. 浏览器地址栏路径不发⽣变化
  2. 只能转发到当前服务器内部资源中
  3. 转发是⼀次请求
重定向
  • 特点:
  1. 地址栏发⽣变化
  2. 重定向可以访问其他站点(服务器)的资源
  3. 重定向是两次请求。不能使⽤request对象来共享数据
共享数据

request域:代表⼀次请求的范围,⼀般⽤于请求转发的多个资源中共享数据

方法作用
void setAttribute(String name,Object obj)存储数据
Object getAttitude(String name)通过键获取值
void removeAttribute(String name)通过键移除键值对
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值