精华内容
下载资源
问答
  • Servlet 请求转发和重定向 请求转发 特点 降低servlet之间的代码冗余 一次请求转发内的servlet共享此次请求中的request和response对象 浏览器地址栏信息不变, 一共发出了一次请求 作用域 一次请求转发内的servlet....

    Servlet 请求转发和重定向

    请求转发

    特点

    1. 降低servlet之间的代码冗余
    2. 一次请求转发内的servlet共享此次请求中的request和response对象
    3. 浏览器地址栏信息不变, 一共发出了一次请求

    作用域

    一次请求转发内的servlet. request可以作为数据流传输的载体

    使用

    request.getRequestDispatcher("转发的路径").forward(reqest, response);
    

    实质

    其实就是再servlet中调用另一个servlet, 将request对象和response对象传递过去

    重定向

    作用

    保护第一次请求, 避免因为重复刷新动作导致频繁触发第一次请求.

    特点

    1. 两次请求
    2. 浏览器地址信息改变
    3. 避免表单重复提交

    使用

    可使用/项目目录/urlpattern路径,

    也可以直接使用 urlpattern路径

    response.sendRedirect("路径");
    
    resp.sendRedirect("/lg/RedirectServlet");
    // 等同于
    resp.sendRedirect("RedirectServlet");
    

    本质

    servlet向浏览器发送信息, 通知浏览器向另外一个servlet再次发送一个请求.

    展开全文
  • • 在请求转发的过程中多个资源公用一个请求响应 //servlet1转发请求到servlet2 public class ForwardServlet1 extends HttpServlet { @Override protected void doPost(HttpServletRequest request, ...

    标题一、请求转发

    • servlet1处理不了的请求转发给指定的servlet2
    • 请求转发,参数是转发的资源名,即转发地址
    • 在请求转发的过程中多个资源公用一个请求和响应

    //servlet1转发请求到servlet2
    public class ForwardServlet1 extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        }
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("请求到达资源1");
            response.setContentType("text/html;charset=utf-8");
            PrintWriter writer = response.getWriter();
    //        HttpSession httpSession = request.getSession();
    //        String username = (String) httpSession.getAttribute("username");
    //        writer.println("<h1>用户名:"+username+"</h1>");
            writer.println("<h1>资源1的内容</h1><br><br>");
            //请求转发,参数是转发的资源名,即转发地址
            //在请求转发的过程中多个资源公用一个请求和响应
            request.getRequestDispatcher("forward2").forward(request,response);
            System.out.println("请求离开资源1");
        }
    }
    public class ForwardServlet2 extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        }
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("请求到达资源2");
            response.setContentType("text/html; charset=utf-8");
            PrintWriter writer = response.getWriter();
            writer.println("<h1>资源2的内容</h1>");
            System.out.println("请求离开资源2");
        }
    }
    
     <servlet>
            <servlet-name>ForwardServlet1</servlet-name>
            <servlet-class>com.tdu.servlet.ForwardServlet1</servlet-class>
        </servlet>
        <servlet>
            <servlet-name>ForwardServlet2</servlet-name>
            <servlet-class>com.tdu.servlet.ForwardServlet2</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>ForwardServlet1</servlet-name>
            <url-pattern>/forward1</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>ForwardServlet2</servlet-name>
            <url-pattern>/forward2</url-pattern>
        </servlet-mapping>
    

    标题二、重定向

    • 把给servlet1的请求发给servlet2

    public class RedirectServlet1 extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("请求到达资源1");
            response.setContentType("text/html; charset=utf-8");
            //重定向之前,余下代码会继续执行,
            response.sendRedirect("redirect2");
            System.out.println("请求离开资源1");
        }
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }
    public class RedirectServlet2 extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        }
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("请求到达资源2");
            response.setContentType("text/html;charset=utf-8");
            PrintWriter writer = response.getWriter();
            writer.println("<h1>请求到达资源2</h1>");
            System.out.println("请求离开资源2");
        }
    }
    
     <servlet>
            <servlet-name>RedirectServlet1</servlet-name>
            <servlet-class>com.tdu.servlet.RedirectServlet1</servlet-class>
        </servlet>
        <servlet>
            <servlet-name>RedirectServlet2</servlet-name>
            <servlet-class>com.tdu.servlet.RedirectServlet2</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>RedirectServlet1</servlet-name>
            <url-pattern>/redirect1</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>RedirectServlet2</servlet-name>
            <url-pattern>/redirect2</url-pattern>
        </servlet-mapping>
    
    展开全文
  • Servlet请求转发 实现原理: 1、客户端只发送一次请求 2、... Servlet请求转发和重定向区别 请求次数 地址栏信息 是否共享数据 跳转限制 发生行为 请求转发 1 不变 是 本站资源 服务端 重定向 2 变化 否 任意url 客户端

    Servlet请求转发

    在这里插入图片描述
    实现原理:
    1、客户端只发送一次请求
    2、浏览器的地址栏地址没有变化
    3、请求过程中只有一个request和response
    4、几个servlet共享一个request和response
    5、对客户端透明,客户端不需要知道服务端都做了哪些操作

    注意:请求servlet的时候,写相对路径,同时后续不需要逻辑代码的处理

    实现代码:

    request.getRequestDispatcher("").forward(request,response);
    

    在jsp中也可以实现servlet的请求转发功能
    <jsp:forward page="forward.jsp"></jsp:forward>
    page填写的是jsp页面的相对路径

    注意:在标签中间不可以添加任何字符.除了<jsp:param name="" value="">

    在转发的页面中想要获取到属性值通过request.getParameter(String key)



    Servlet重定向

    与servlet请求转发是一样,都是实现跳转到某个页面,假设一个登录的案例,验证密码正确后,使用请求转发跳转到新的页面,在登录成功的页面不断刷新,它还是会不断向服务器发送请求,所以引入了重定向的概念,重定向则是跳转到该页面,避免表单重复提交


    在这里插入图片描述
    原理:
    1、浏览器发送两次请求
    2、浏览器的地址发生变化
    3、请求过程产生两个request对象和两个response对象
    4、两个servlet不能共享同一个request和response对象

    实现代码:

    response.sendRedirect();
    


    Servlet请求转发和重定向区别

    请求次数 地址栏信息 是否共享数据 跳转限制 发生行为
    请求转发 1 不变 本站资源 服务端
    重定向 2 变化 任意url 客户端
    展开全文
  • 重定向 写法 旧写法 response.setStatus(302); response.setHeader("Location", "login_success.html"); //login_success.html 是我们新的页面 新型写法 response.sendRedirect(&...

    重定向 写法

    旧写法

    	response.setStatus(302);
    			response.setHeader("Location", "login_success.html");  
    			//login_success.html 是我们新的页面			
    

    新型写法

    response.sendRedirect("login_success.html");//返回的是全路径
    

    服务器给了我们一段location 地址 ,浏览器得到后再次重新访问服务端新给的页面

    请求转发

    request.requestgetRequestDispatcher("login_success.html").forward(request, response);
    
    

    服务器帮我们跳转到了另外一个界面(都是由服务端做的)

    二者的不同

    重定向 请求转发
    转化后的地址显示不同 显示最后的那个资源的路径地址 显示的是servlet请求的地址
    请求次数不同 请求最少两次,服务器在第一次请求后返回的是302 以及一个地址,浏览器根据这个地址,执行第二次访问 请求只有一次,服务器帮客户端执行后续工作
    -效率- -效率较低 ,跳转了两次- -效率较高,跳转了一次-
    能否任意跳转 可以任意跳转,不是自己的工程也可以跳 自能跳转到自己的项目下的资源
    -其他- -后续的请求,没法使用上一次的request存储的数据,或者 没法使用上一次的request对象,因为这是两次不同的请求- -可以使用上一次的request对象-
    展开全文
  • 现在从以下几个方面来探究一下比较常用的 请求转发 重定向 有什么区别!!! 1. 跳转方式 2. 能否跳转外网 3. 能否访问安全目录中页面 4. 能否获取setAttribute中的值 首先配置好相关资源 新建一个web项目,在...
  • 请求转发, 顾名思义, 是同一个请求的转发和跳转. 将一个sevelt的请求对象, 传递给另一个servlet进行处理. 特点: 只有一次请求 浏览器中url地址不变 只在服务器之间进行跳转 使用 // 将本次请求, 跳转到别名叫page...
  • 请求转发(forward): 前端请求一个url servlet捕获之后在服务器端执行相应的操作后 setAttribute()将相应的数据保存,使用request.getRequestDispictor("/index.jsp").forward(request,response)转发之后前端可以...
  • 重定向和转发有一个重要的不同:当使用转发时,服务器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,607
精华内容 642
关键字:

servlet请求转发和重定向