请求和响应

发布时间 2023-09-29 12:16:56作者: 你的脑子能压几个栈

第1关:通过 response 对象刷新网页

  • 任务描述
    本关任务:编写一个网页定时刷新并跳转的功能。

  • 相关知识
    为了完成本关任务,你需要掌握 HttpServletResponse 对象的常用方法和应用。

  • 编程要求
    在右侧编辑器 Begin-End 之间补充代码,编写一个模拟用户登录成功2秒后跳转至百度首页的功能,在配置文件中将 Servlet 的访问路径设置为/ServletDemo1。

  • 测试说明
    平台会对你编写的代码进行测试

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /********** Begin **********/
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write("用户注册成功,2秒后跳转到百度首页");
        response.setHeader("Refresh", "2;url=http://www.baidu.com");
        /********** End **********/
    }

第2关:通过 request 对象传递数据

  • 任务描述
    本关任务:编写一个通过 HttpRequest 获取,设置和移除对象的程序。

  • 相关知识
    为了完成本关任务,你需要掌握 HttpRequest 对象的作用和常用方法。

  • 编程要求
    在右侧编辑器 Begin-End 之间补充代码,完成使用 HttpRequest 对象传递数据的功能,具体要求如下:

  1. 首先使用 HttpRequest 对象获取属性为username的对象并强转为字符串对象输出;
  2. 使用 HttpRequest 对象设置 username 的属性值为张三并将其输出;
  3. 使用 HttpRequest 移除username属性,再次输出;
  4. 将 Servlet 的访问路径设置为/ServletDemo2,另外特别注意不要删除通过关卡中的 Servlet 配置,否则会通不过关卡,后面关卡也一样,不再做提示。
  • 测试说明
    平台会对你编写的代码进行测试
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /********** Begin **********/
        response.setContentType("text/html;charset=utf-8");

        String username = (String) request.getAttribute("username");
        response.getWriter().write(username);

        request.setAttribute("username", "张三");
        username = (String) request.getAttribute("username");
        response.getWriter().write(username);

        request.removeAttribute("username");
        username = (String) request.getAttribute("username");
        response.getWriter().write(username);
        /********** End **********/
    }

第3关:请求转发

  • 任务描述
    本关任务:编写一个 Servlet 请求之间转发数据的程序。

  • 相关知识
    为了完成本关任务,你需要掌握 HttpServletRequest 请求转发的三种使用方式以及他们的区别。

  • 编程要求
    在右侧编辑器 Begin-End 之间补充代码,完成 ServletDemo3 向 ServletDemo4 转发(forward)数据的程序,具体要求如下:
    将 ServletDemo3 的访问路径设置为/ServletDemo3,并在类中添加userId属性,值为001;
    当访问/ServletDemo3时转发至/ServletDemo4;
    将 ServletDemo4 的访问路径设置为/ServletDemo4,并获取 ServletDemo3 中的userId进行输出;
    在 ServletDemo4 中模拟获取用户userId对应的信息,即用输出语句将信息输出至网页。信息包括用户名张三,用户年龄20;
    具体输出信息格式参考测试说明。
    编写在一个 servlet 查询到用户id,然后请求转发到另外一个 servlet,再通过该用户 id 来获取用户信息进行响应。

  • 测试说明
    平台会对你编写的代码进行测试

web.xml:

  <!-- ********** Begin ********** -->
  <servlet>
    <servlet-name>ServletDemo1</servlet-name>
    <servlet-class>com.educode.servlet.ServletDemo1</servlet-class>
   </servlet>

   <servlet-mapping>
      <servlet-name>ServletDemo3</servlet-name>
      <url-pattern>/ServletDemo3/url-pattern>
   </servlet-mapping>
   
   <servlet-mapping>
      <servlet-name>ServletDemo4</servlet-name>
      <url-pattern>/ServletDemo4</url-pattern>
   </servlet-mapping>
  <!-- ********** End ********** -->

ServletDemo3.java

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /********** Begin **********/
        String userId = "001";
        request.setAttribute("userId",userId);
        // 转发到ServletDemo4
        response.getRequestDispatcher("/ServletDemo4").forward(request, response);
        /********** End **********/
    }

ServletDemo4.java

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /********** Begin **********/
        //设置输出格式
		response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        
        String userId = (String)request.getAttribute("userId");
        
        out.println("查询编号为" + userId + "的用户信息如下:");
        out.println("用户名为:张三");
        out.println("用户年龄为:20");
        /********** End **********/
    }