JAVAEE之Servlect——2

一、HttpServletRequest类

1、作用:

每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的信息。

2、常用方法:
getRequestURI()获取请求的资源路径
getRequestURL()获取请求的统一资源定位符(绝对路径)
getRemoteHost()获取客户端的 ip 地址
getHeader()获取请求头
getParameter()获取请求的参数
getParameterValues()获取请求的参数(多个值的时候使用)
getMethod()获取请求的方式GET 或POST
setAttribute(key, value)设置域数据
getAttribute(key)获取域数据
getRequestDispatcher()获取请求转发对象
@WebServlet("/RequestAPIServlet")
public class RequestAPIServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求资源路径
        String requestURI = req.getRequestURI();
        System.out.println("requestURI = " + requestURI);
        //获取请求资源路径---绝对路径
        StringBuffer requestURL = req.getRequestURL();
        System.out.println("requestURL = " + requestURL);
        //获取客服端的IP地址
        String remoteHost = req.getRemoteHost();
        System.out.println("remoteHost = " + remoteHost);
        //获取请求头
        String accept = req.getHeader("Accept");
        String cookie = req.getHeader("Cookie");
        System.out.println("accept = " + accept);
        System.out.println("cookie = " + cookie);
        //获取请求参数,获取客服端发送的数据,他是实现最多的一个方法,没有之一
        //使用post请求的时候会产生乱码
        req.setCharacterEncoding("utf-8");//这段代码是先转化在接收,不能写在下面这两句代码的下面
        String myname = req.getParameter("myname");
        String mypass = req.getParameter("mypass");
        System.out.println("mypass = " + mypass);
        System.out.println("myname = " + myname);
        //获取请求参数,获取客服端发送的数据,获取多个数据
//        String hobby = req.getParameter("hobby");
        String[] hobbies = req.getParameterValues("hobby");
       /* for (String a:
             hobbies) {
            System.out.println("hobby = " + a);
        }*/
        Arrays.stream(hobbies).forEach(System.out::println);
    }
}

二、请求转发

1、定义:

        服务器收到请求后,从一次资源跳转到另一个资源的操作

2、特点:

(1)、浏览器地址没有变化

(2)、他们是一次请求

(3)、他们共享Request域中的数据

(4)、可以转发到WEB-INF目录下

(5)、不可以访问工程以外的资源

@WebServlet("/servlet1")
public class servlet1 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        // 获取请求的参数(办事的材料)查看
        String username = req.getParameter("username");
        System.out.println("在 Servlet1(柜台 1)中查看参数(材料):" + username);

        // 给材料 盖一个章,并传递到Servlet2(柜台 2)去查看
        req.setAttribute("key1","柜台 1 的章");

        // 问路:Servlet2(柜台 2)怎么走
        /**
         * 请求转发必须要以斜杠打头,/ 斜杠表示地址为:http://ip:port/工程名/ , 映射到IDEA 代码的web 目录
         <br/>
         *
         */
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");
        //这是不能跳转到百度的
        //	RequestDispatcher requestDispatcher = req.getRequestDispatcher("http://www.baidu.com");

        /**
         * forward(req,resp)
         */

        // 走向Sevlet2(柜台 2)
        requestDispatcher.forward(req,resp);
//        重定向跳转(他会改变地址栏的数据)
        //这个地方的斜杠不能加,会使得客户端一样解析
//        resp.sendRedirect("servlet2");
    }
}
@WebServlet("/servlet2")
public class servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取请求的参数(办事的材料)查看
        String username = req.getParameter("username");
        System.out.println("在 Servlet2(柜台 2)中查看参数(材料):" + username);

        // 查看 柜台1 是否有盖章
        Object key1 = req.getAttribute("key1");
        System.out.println("柜台 1 是否有章:" + key1);

        // 处理自己的业务
        System.out.println("Servlet2 处理自己的业务 ");
    }
}

三、重定向跳转

1、定义:

通过各种方法将各种网络请求重新定个方向转到其它位置

2、特点

(1)、重定向是两次请求、两次响应
(2)重定向前后,浏览器的地址栏地址会发生变化。
(3)重定向前后的request对象不是同一个
(4)重定向前后的两个资源可以是来自不同的web应用,甚至可以是来自不同的服务器。

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值