JavaWeb的HttpServletRequest类(Request对象)

HttpServletRequest的作用:

每次只要有请求进入Tomcate服务器,Tomcate服务器就会创建一个Request对象,并将请求的Http协议的信息封装到Request对象中,,然后在将对象传递给doget()和doPost()方法的参数中,从而我们可以通过HttpServletRequest对象获取所有的请求信息。

HttpServletRequest类常用的方法:

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


    System.out.println(req.getRequestURI());  //获取请求的资源名     /项目名/请求的servlet资源    /01web_war_exploded/hello1
    System.out.println(req.getRequestURL());  //获取全部的请求路径但是不会包含请求参数 http://localhost:8080/01web_war_exploded/hello1 ,
    // 使用真实的IP不使用locahost访问也会产生真实的客户端ip(就是通过网络来访问)
    System.out.println(req.getRemoteHost()); //用来获取客户端的IP地址
    System.out.println(req.getHeader("Host")); //用来获取指定请求头的数据
    System.out.println(req.getParameter("username")); //用来获取指定的请求参数
    System.out.println(req.getParameterValues("username")); //获取指定的请求参数【需要是请求参数在多个值的情况下使用】
    System.out.println(req.getMethod());//获取请求的方式
    //System.out.println(req.getRequestDispatcher());//获取请求转发的对象
Map parameterMap = req.getParameterMap();//一次性获取全部的请求参数 并封装到map中
    req.setAttribute("username",1230); //设置Request域对象中的值
    Object username = req.getAttribute("username");//获取Request域对象中的值
    System.out.println(username);

}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("访问post成功");

请求转发:

请求转发是指,客户端收到请求后,从一个资源跳转到另一个资源的的操作叫做转发。请求转发的过程中浏览器中的地址栏的地址是不会改变的。

 注:请求参数不是必须的。

 代码:

req.getRequestDispatcher("请求路径: 基于当前web工程").forward(req,resp);

  请求转发的特点:

  • 浏览器地址栏的地址没有变化。
  • 不管跳转几个servlet或者是资源 他们都是一次请求。
  • 请求过程中所经过所有的servlet他们共享request域中的数据。
  • 可以转发到WEB-INF目录下的资源。
  • 但是不可以访问工程之外的资源。

request域:

   Request对象是一个域对象,可以在在其作用域之内,共享数据,

   Request域对象的作用范围是一次请求中。所以在一次请求中所有的servlet或者资源可以共享request域中的资源。

示例代码:

servlet1:


public class Servlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("我是servlet1请求转发开始的地方");
        req.setAttribute("username","小明"); //向request域中存入对象
        req.getRequestDispatcher("/servlet").forward(req,resp); //请求转发
    }
}

servlet2:

public class Servlet2  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("我是servlet2,请求被转发的地方");
        Object username = req.getAttribute("username");//按照kay的从域中取出数据。
    }
}

对于servlet接收post请求出现中文乱码的问题:

产生原因是:客户端和服务器之间使用的编码集不一样。

解决:

 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        req.setCharacterEncoding("utf-8");//设置请求集是utf-s
        String username = req.getParameter("username");
        System.out.println(username);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值