美文网首页
浅谈Servlet

浅谈Servlet

作者: 头发旺盛的程序猿 | 来源:发表于2020-08-28 15:59 被阅读0次

    post与get之间的区别

    他们是Http协议的两种常见请求方式。

    1. 数据传递长度:get长度比较小,post没有限制
    2. 数据传递方式:get使用URL传递参数值,post直接将参数值放入request body
    3. 数据传递安全性:get不安全,post安全
    4. 发送的数据包数量:get发送1个TCP数据包,post发送2个TCP数据包
      首先发送一个request head(1个TCP数据包),服务器接收后返回100状态码,再发送request body(1个TCP数据包)
    5. 缓存:get访问浏览器会产生缓存,但是post没有

    重定向与请求转发的区别

    重定向(客户端):通知客户端浏览器,重新定向请求新的页面地址

    response.sendRedirect("index.jsp");
    

    请求转发(服务器):服务器直接转发请求,跳转并执行新页面

    RequestDispatcher requestDispatcher = request.getRequestDispatcher("index.jsp");
    requestDispatcher.forward(request, response);
    
    1. 重定向是客户端浏览器执行跳转;请求转发是服务器端直接跳转
    2. 重定向之后,客户端浏览器地址栏显示新的请求地址;
      请求转发之后,客户端浏览器地址栏显示旧的请求地址;
    3. 重定向代表一次新的请求;请求转发没有发起新请求

    谈谈你对JSP九个内置对象的理解

    ​ JSP的内置对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员显式声明即可使用。在JSP页面中,可以通过存取JSP内置对象实现与JSP页面和Servlet环境的相互访问。JSP中共包含9个内置对象,其中包含4个作用域对象和5个其它内置对象。

    4个作用域对象(都可以利用setAttribute(String key,Object value)/getAttribute(String key)来存储/取出键值对数据,作用域从小到大为:PageContext(jsp页面),ServletRequest(一次请求),HttpSession(一次会话),ServletContext(整个web应用))
    1. pageContext(page域)
      1)page域指当前的jsp页面,作用范围是整个JSP页面,是四大作用域中最小的一个。
      2)pageContex的生命周期是这个页面的运行时间,若你关掉这个页面,页面运行结束,pageContext就会消亡,数据也会失效。

      3)使用情况:只适合在一个页面中使用,在一个页面中定义变量,和保存在此页面中有用的数据。

    2. request(request域)

      1)request是指一次请求,即当用户访问web服务器的时候,web服务器会生成request和response对象,然后在service方法调用,完成用户的请求和对用户的响应。作用范围整个请求链。

      2)request的生命周期是请求的周期,若请求一直转发下去,其生命并不会结束。当整个请求结束,request生命结束。在request保存的数据也会失效。

      3)使用情况:用于一次请求在不同页面间的操作及参数传递,如表单的参数传递。

      4)常用方法

      request.getContextPath():获取项目运行时的应用的访问名称
      request.getMethod():获取当前请求的方式
      request.getRemoteAddr():获取客户端的IP地址
      request.getLocalAddr():获取服务器的IP地址
      request.getSession():获取当前Session会话对象
      request.getRealPath():获取当前应用在服务器端的真实路径
      request.getParameter():根据参数名称获取请求中的参数值
      request.getServletContext():获取application对象
      request.setCharacterEncoding("utf-8"):设置中文编码集,用于解决中文乱码
      request.getRequestDispatcher():请求转发(服务器):服务器直接转发请求,跳转并执行新页面
      
    3. session(session域)

      1)session是指一次会话,当用户首次访问服务器时,服务器会根据每一个浏览器的请求创建一个session对象,每个用户有每个的session对象,相当于身份证,保存在服务器中。借助cookie技术来传递id属性,就可以在每次访问中找到自己的session。作用范围是一次会话。

      2)session的生命周期是在服务器正常的情况下,在第一次调用request.getSession()方法时到销毁该session时结束。一次"会话"包含若干次"请求",会话结束有三折方式:客户端浏览器关闭;客户端超时(Tomcat默认为30分钟);服务器关闭。

      3)使用情况:主要是网站用户的信息,购物车。

      4)常用方法

      session.getId():获取当前会话对象的ID
      session.getCreationTime():获取Session的创建时间
      session.getLastAccessedTime();获取本次会话最后一次访问时间
      
    4. application(ServletContext)

      1)application即是servlet中的ServeltContext。application作用范围:整个Web应用。

      2)ServletContext可以存数据,只要设置一次,整个web应用都可以访问到数据。

      3)ServletContext生命周期在服务器启动时创建,在服务器关闭时销毁。

      4)使用情况:每个用户都可以访问的数据,或者多个客户端共享数据。例如购物网站的首页,商品页等。

      5)常用方法

    application.getRealPath(""):获取应用真实路径
    application.getContextPath():获取应用访问名称
    application.getSessionTimeout():获取Session超时时间
    
    5个其它内置对象
    1. ServletConfig类的Config对象:代码片段配置对象,标识Servlet的配置。

    2. JspWriter类的out对象:主要用于向客户端输出数据,out的基类是jspWriter。

    3. HttpSevletResponse类的Response对象:代表响应对象,主要用于向客户端发送数据。

      常用方法

    response.setContentType("text/html;charset=utf-8"):设置中文编码
    response.getWriter():获取输出流
    reponse.sendRedirect():重定向(客户端):通知客户端浏览器,重新定向请求新的页面地址
    
    1. Object类的Page对象,处理jsp页面,是一个Servlet的实例。
    2. Exception对象:处理jsp文件执行时发生的错误和异常,只有在错误页面里才使用,前提是在页面指令里要有isErrorPage=true。

    Servlet生命周期

    Servlet生命周期包含实例化、初始化、服务和销毁四个阶段。

    1. 实例化:当客户端发起第一次请求时,Servlet容器启动,调用自身默认的无参构造方法servlet()来创建Servlet实例。
        public LifeServlet() {
            System.out.println("1.LifeServlet实例被创建");
        }
    
    1. 初始化:在Servlet实例化之后,容器将调用Servlet的init()方法(重写父类)初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作。
        @Override
        public void init() throws ServletException {
            System.out.println("2.LifeServlet实例完成初始化!");
        }
    
    1. 服务:Servlet容器调用Servlet的service()方法,根据请求方式不同,调用不同的doXXX方法处理请求。
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("3.LifeServlet实例调用服务");
        }
    
    1. 销毁:当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法来销毁Servlet实例。
        public void destroy() {
            System.out.println("4.LifeServlet实例被销毁");
        }
    

    在整个Servlet的生命周期过程中,创建Servlet实例、调用实例的init()和destroy()方法都只进行一次,但服务可以多次执行。

    相关文章

      网友评论

          本文标题:浅谈Servlet

          本文链接:https://www.haomeiwen.com/subject/wovzjktx.html