HttpServletRequest对象的常用方法

获取请求常用方法

getParameter(String name)

获取客户端提交的数据,参数name就是客户端在form表单中书写name属性的值,如果不一致,则取不到对应的值

getParameterName() 

获取客户端提交的 数据中所有的key值(form表单中提交的所有的name属性的值)

getParameterValues(String name)

获取form表单中用户提交的某个name属性对应的多个value属性的值

request属于域对象,所以可以使用域对象方法

域对象其实就是一个类似于map的容器,可以向容器中存入指定的值,在需要的时候,可以通过key去获取对应的值来使用

getParameterMap() //获取所有参数的map集合

  根据Java规范:request.getParameterMap()返回的是一个Map类型的值,该返回值记录着前端(如jsp页面)所提交请求中的请求参数和请求参数值的映射关系。这个返回值有个特别之处——只能读。不像普通的Map类型数据一样可以修改。这是因为服务器为了实现一定的安全规范,所作的限制。比如WebLogic,Tomcat,Resin,JBoss等服务器均实现了此规范。

   如果实在有必要在取得此值以后做修改的话,要新建一个map对象,将返回值复制到此新map对象中进行修改,用新的map对象代替使用之前的返回值。

----------------------------------------------------------分割线-----------------------------------------------------------

储存数据部分

setAttribute(String name,Object  o)

        向一个request域中存放一个映射关系,name留着取值时使用的

getAttribute(String name)

       通过映射关系的key,获取对应的值。

removeAttribute(String name) 

       通过映射关系的key,移除这一关系

----------------------------------------------------------分割线-----------------------------------------------------------

乱码处理pos和set

set的乱码解决

package com.ithdy.web;

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.nio.charset.StandardCharsets;


/**
 * 请求中的中文乱码问题解决方案
 */
@WebServlet("/req3")
public class ServletDemo9 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /**
         * 解决方案:
         * post: 设置输入流的编码
         * req.setCharacterEncoding("UTF-8");
         */
        //post:底层方法为 getReader()
        //req.setCharacterEncoding("UTF-8");
        String username = req.getParameter("username");
        System.out.println("解决乱码前" + username);


        //get获取参数底层方法为 getQueryString()
        //乱码原因,tomcat进行url解码,默认的字符集时ISO-8889-1
        //先对uername进行编码,转换为字节数组
//        byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);
//        //字符数组解码
//       username = new String(bytes, StandardCharsets.UTF_8);

        //简化版本
        username = new String(username.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);

        System.out.println("解决乱码后" + username);


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

post的乱码解决

setCharacterEncoding(String env)    //post:底层方法为 getReader()
                                    //req.setCharacterEncoding("UTF-8");

设置客户端提交数据解码时使用的编码表,只对post请求有效

getRequestDispatcher(String path) 

       获取转发器对象,调用forward()方法用于转发请求

getMethod()     

   获取客户端提交数据的方式 get 或post 方式
 

getContextPath()

拿到的是你的web项目的根路径

getRealPathURL() //类型为StringBuffer 输出返回结果需要toString()

返回的是完整的url,包括Http协议,端口号,servlet名字和映射路径,但它不包含请求参数

getRequestURI()

得到的是request URL的部分值,并且web容器没有decode/解码过的

 ----------------------------------------------------------分割线-----------------------------------------------------------

 URLDemo

package com.ithdy.web;


import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

public class URLDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String username = "张三";
        /**
         * 1-2为tomcat8版本以下的编码
         */
        //1.URL编码
        String encode = URLEncoder.encode(username, "utf-8");
        System.out.println(encode);
        //2.URL解码
        String decode = URLDecoder.decode(encode, "ISO-8859-1");
        System.out.println(decode);

        //3.转换为字节数据,编码
        byte[] bytes = decode.getBytes("ISO-8859-1");
//        for (byte b: bytes) {
//            System.out.print(b +" ");
//        }
        System.out.println();
        //4.把字节数组转换为字符串,解码
        String s = new String(bytes, "utf-8");
        System.out.println(s);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值