• #Servlet——Web之间跳转和信息共享、三大作用域对象


    为什么需要Servlet之间的交互?

    1.Web组件(Servlet/JSP)的交互:
        Web组件之间的跳转,数据共享.
            1.ListServlet:
                1.接收请求参数
                2.调用业务逻辑处理请求    List<Student> list=dao.list()
                3.直接通过输出流对象输出到list.jsp页面,负责输出所有的学生信息 req.getRequestDispatcher("/list.jsp").forward(req,resp)
                    把student传递jsp页面,跳转到jsp,负责输出student信息
            2.list.jsp
                1.获取到student对象
                2.将student信息展示
                3.把参数传递给DeleteServlet
            3.DeleteServlet
                1.获取请求参数
                2.调用业务逻辑处理请求
                3.跳转到ListServlet页面 resp.sendRedirect("/listServlet")(重新查询所有的学生信息,重新把信息转发到list.jsp)
            ![](https://img2020.cnblogs.com/blog/1668748/202004/1668748-20200426192229808-309800312.jpg)
    

    Web之间的跳转和信息共享

    1.Web组件之间的跳转方式
        *请求转发(forward) req.getRequestDispatcher("str").forward(res,resp)
        *重定向(redirect) resp.sendRedirect("str")
        *请求包含(include)
    
    2.请求转发
        *从Servlet1,请求转发到Servlet2. Servlet1完成一部分功能,再跳转到Servlet2继续完成剩下的功能.
            1.语法:
                req.getRequestDispatcher("str").forward(req,resp);
                参数: path,表示跳转的目标的路径(资源的名称)
                注意: 不要忘了forward
            2.特点:
                1.请求转发只发出一次请求
                2.地址栏不会发生变化
                3.响应效果由Servlet2决定
                4.请求转发不可以跨域共享资源,只能跳转到当前应用的资源
                5.共享同一个请求的资源
                6.请求转发可以访问WEB-INF下的资源
        ![](https://img2020.cnblogs.com/blog/1668748/202004/1668748-20200426194815175-1144608610.png)
    

    URL重定向

    1.语法:
        respond.sendRedirect(String url)
    2.特点:
        1.浏览器的地址栏发生改变
        2.重定可以跨区域访问,向发出两次请求
        3.重定向可以访问外部资源
        4.重定向不可以访问WEB-INF下的资源
        5.因为重定向是两次请求,所以不可以共享请求资源
        6.最终响应给浏览器的效果由Servlet2决定
        ![](https://img2020.cnblogs.com/blog/1668748/202004/1668748-20200426202708161-109977267.png)
    

    Servlet三大作用域对象

    1.目的: 共享数据
        1.request
        类型:HttpServletRequest
        每一个请求都是一个新的request,如果想共享同一请求的资源,只能使用请求转发
        2.session
        类型:HttpSession
        每一次会话都是一个新的Session对象,如果想在一次对话多次请求中共享数据,只能使用Session
        3.application
        类型: ServletContext
        应用对象,Tomcat启动到Tomcat结束表示一个应用,在一个应用中有且只有一个application对象,作用整个Web应用,可以实现多次会话之间的数据共享
    

    作用域对象如何共享数据:

    1.设置作用域中的共享数据.
        作用域对象.setAttribute(String name,Object value)
    2.获取作用域的共享数据
        作用域对象.getAttribute(String name)
    3.删除作用域的共享数据
        作用域.removeAttribute(String name)
    
    注意:在哪个作用域中设置值,就只能从该作用域中获取值
  • 相关阅读:
    target runtime apache v6.0 not defined解决
    java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;
    The valid characters are defined in RFC 7230 and RFC 3986问题
    invalid END header解决方法
    You have more than one version of ‘org.apache.commons.logging.Log’ visible, which is not allowed问题解决
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    在eclipse中import java web项目时遇到的一些问题并将该项目通过tomcat发布
    java byte转string 涉及到字节流中有中文
    spring+mybatis框架搭建时遇到Mapped Statements collection does not contain value for...的错误
    试试看读一下Zepto源码
  • 原文地址:https://www.cnblogs.com/linjing111/p/12783021.html
Copyright © 2020-2023  润新知