请求对象request

一、请求对象介绍.

请求:获取资源。在BS架构中,就是客户端浏览器向服务器端发出询问。

请求对象:就是在项目当中用于发送请求的对象。

二、请求对象Request常用方法-获取各种路径

返回值方法名说明
StringgetContextPath()获取虚拟目录名称
StringgetServletPath()获取Servlet映射路径
StringgetRemoteAddr()获取访问者ip地址
StringgetQueryString()获取请求的消息数据
StringgetRequestURL()获取统一资源标识符
StringBuffergetRequestURL()获取统一资源定位符

三、请求对象Request常用方法-获取请求头信息

返回值方法名

说明

StringgetHeader(String name)根据请求头名称获取一个值
Enumeration<String>getHeaders(String name)根据请求头名称获取多个值
Enumeration<String>getHeaderNames()获取请求头名称

四、请求对象Request常用方法-获取请求参数信息

返回值方法名说明
StringgetParameter(String name)根据名称获取数据
String[]

getParameterValues(String name)

根据名称获取所有数据
Enumeration<String>getParameterNames()获取所有名称
Map<String,String[]>getParameterMap()获取所有参数的键值对

五、获取请求参数并封装对象

1、手动封装方式

        实体类封装通过getParameter和getParmeterValues获取参数封装到对象中

2、反射封装方式

        通过getParameterMap()获取参数

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
//1.获取所有的数据
Map<String, String[]> map = req.getParameterMap();
//2.封装学生对象
Student stu = new Student();
//2.1遍历集合
for (String name: map.keySet()) {
    String[] value = map.get(name);
    try{
        //2.2获取Student对象的属性描述器
        PropertyDescriptor pd = new PropertyDescriptor(name,stu.getClass());
        //2.3获取对应的setXxx方法
        Method wm=pd.getWriteMethod();
        //2.4执行方法
        if(value.length>1){
            wm.invoke(stu,(Object)value)
        }else{
            wm.invoke(stu,value);
        }
    }catch(Exception e) {
        e.printStackTrace();
    }
}
    //3.输出对象
System.out.println(stu);

}

3、工具类封装方式

首先导入commons-beanutils和commons-logging的jar包

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
//1.获取所有的数据
Map<String, String[]> map = req.getParameterMap();
//2.封装学生对象
Student stu = new Student();
try{
     BeanUtils.populate(stu,map);
}catch(Exception e) {
     e.printStackTrace();
}

//3.输出对象
System.out.println(stu);

}

4、出错找不到BeanUtils工具类idea没有添加这个jar包,手动导入

 六、通过流对象获取请求信息,只支持post请求方式

返回值方法名说明
BufferedReadergetReader()获取字符输入流
ServletInputStreamgetinputStream()获取字节输入流

字节流

字符流

 

七、中文乱码问题

 Get方式

        没有乱码问题,在Tomcat 8版本后已经解决了!!

Post方式

        有乱码问题,通过getCharacterEncoding("UTF-8")解决

        req. setCharacterEncoding ("UTF-8");

八、请求域

请求域(request域) :可以在一次请求范围内进行共享数据。 

一般用于请求转发的多个资源中共享数据。

九、请求对象操作共享数据方法;

返回值方法名说明
voidsetAttribute(String name,Object value)向请求域对象中存储数据
ObjectgetAttribute(String name)通过名称获取请求域对象中的数据
voidremoveAttribute(String name)通过名称移除请求域对象中的数据

十、请求转发

请求转发:客户端的一次请求到达后,发现需要借助其他Servlet来实现功能。

特点:

        浏览器地址栏不变

        域对象中的数据不丢失

        负责转发的Servlet转发前后的响应正文会丢失

        由转发的目的地来响应客户端,

返回值方法名说明
RequestDispatchergetRequestDispatcher(String name)获取请求调度对象
voidforward(ServletRequest req,ServletResponse resp)实现转发 

 

 十一、请求包含

请求包含:可以合并其他Servlet中的功能一起响应给客户端,

返回值方法名说明
RequestDispatchergetRequestDispatcher(String name)获取请求调度对象
voidinclude(ServletRequest req,ServletResponse resp)实现包含

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值