zoukankan      html  css  js  c++  java
  • Servet和JSP学习总结(转载)

    前天去面试,遇到一个搞技术的面试官。问了好多问题,好多没答上来,不是不会而是掌握的不够扎实,没有进行归纳和总结。最典型的是集合类的层次结构,Jsp内置对象之间的关系。这些问题不能说不会,而是不够扎实,没有站在一个系统的高度来看这些问题。虽然面试的不成功,但收获的还是挺大的。使我看到了自己学的还是很不够,很多东西要学习。面试主要是搞Web开发,使用三大框架:Struts,Spring,Hibernate。这半年都在搞安全了,搞的也是桌面应用程序,没有做Web开发,Java主要的优势还在于Web开发。面试回来后打算把三打框架好好看看。我相信我的学习能力,遗憾没有在面试官面前表现出来。下面是我照着张孝祥老师编写的《深入体会Javaweb开发内幕》写的。

    Servelt就是由两个包组成javax.servlet和javax.servelt.http
    前者装是基本的servet类,后者是与http有关的类。后者中大部分类都实现了前者的类。我们在写Servelt时很多都直接使用后者中的类。
    GenericServlet实现了Servlet和ServletConfig接口。
    HttpServlet继承了GenericServlet类
    我们在写Servlet时继承HttpServlet。

    ServletConfig对象可以获得Servlet的配置参数:如Web.xml中设置的初始化参数等通过Servlet.getServletConfig()获得ServletConfig对象。
    ServletConfig对象中包括对ServletContext的引用。

    ServletContext是Web应用程序中所有的Servelt共享,通过getServletContext()获得serveltContext对象。它的作用域是整个Web应用程序。所以它可以访问资源文件,可以使用相对路径。可以获得虚拟路径所映射的本地路径。

    HttpServletResponse是ServletResponse子接口,用于响应请求。代表用于Http协议的响应消息对象。可以产生响应状态行、构造响应消息头(设置字符集编码)、创建响应正文等。
       cookie的增加使用方法:HttpServletResponse.addCookie(Cookie)。
       Servelt中文输出问题可以用下面语句解决:
            response.setCharacterEncoding("GB2312");
            response.setContentType("text/html;GB2312");
            response.setLocale(new java.util.Locale("zh","CN"));
       让浏览器定时刷新网页或跳转至其他页面
            response.setHeader("Refresh","2");
            response.setHeader("Refresh","2;URL=http://www.it315.org");
       禁止缓存当前文档的内容可以用
            response.setDateHeader("Expires",0);
            response.setHeader("Cache-Control","no-cache");
            response.setHeader("Pragma","no-cache");
        创建响应正文:response.getOutputStream()和getWriter()
              分别得到ServletOutputStream和PrintWriter对象,可以看到一个是字节流,一个是字符流。
        请求重定向和请求转发:
             请求重定向用RequestDispatcher.forward(),请求转发用HttpServletResponse.sendRedirect()。                   RequestDispatcher通过ServletContext接口中的getRequestDispatcher方法获得。
        区别在于重定向是调用别的Servlet来处理,对用户是透明的,而sendRedirect() 是将请求转发给到别的页面。重定向只能在同一个Web应用程序内资源内转发请求,而sendRedirect()可以在任意页面间转发。
        区别RequestDispatcher.indlude()和RequestDispatcher.forward()。
           indlude被调用者不能改变响应消息的状态码和消息头。forward方法中调用者和被调用者之间共享相同的   request对象和response对象。
    RequestDispatcher.forward和HttpServletResponse.sendRedirect方法在调用它们之前都不能有缓冲区输出到客户端。缓冲区的内容会被清空。

    HttpServletRequest是ServletRequest的子接口,它代表请求消息。
        通过它的方法可以获得请求行的相关信息、网络连接信息、请求头信息、传递的参数等。
         请求行:对于如下请求:
             http://localhost:8080/it315/controller/one.jsp?param1=abc
             下面方法可以得到如下信息:
                 request.getMethod() :GET
                 request.getRequestURI() :/it315/controller/one.jsp
                 request.getQueryString():param1=abc
                 request.getProtocol():http/1.1
                 request.getContextPath:/it315
                 request.getPathInfo:/one.jsp
                 request.getPathTranslated:C:\tomcat-5.5.4\webapps\it315\one.jsp
                 request.getServletPath: /controller
          网络连接就是些IP地址,端口什么的,不看了。
          请求头信息:可以获得指定名称的头字段的值,日期,Content-Type头字段,请求消息的实体部分的字符集编码等。
          防盗链技术:
              防止被人直接超链接内容,判断请求头referer字段是否来自本站。
         获取请求参数:getParameter(String)
         获取请求消息实体内容:与response对应,有获取请求消息实体内容的方法。request.getInputStream()和getReader()方法。分别表示字节流和字符流
          利用请求域传递属性信息。方法是request.setAttribute()。然后将请求重定向forward到别的处理模块。

    会话和状态管理
    有两种方式Cookie和Session。Cookie保存在客户端,Session保存在服务端。形象的比喻是Cookie是商场发放的优惠卡,优惠卡上记录优惠政策。Session比喻为病历卡,医院为每个病人保留病历档案。病历卡上只填写了卡号。
    Cookie是一个类,它通过new Cookie(String name,String value)实例化。request.getCookies()返回所有的Cookie。response.addCookie(Cookie cookie)。HttpSession是接口。Request.getSession()的到Session对象。


    JSP
    Jsp内置对象与Servlet中的类对应关系
                 application----> ServletContext
                 config    -----> ServletConfig
                 session   ----->HttpSession
                 request   ----->HttpServletRequest
                 response ----->HttpServletResponse
                 page是Jsp被翻译成Servlet对象自身
                 out是JspWriter的实例,调用ServletResponse.getWriter()的到的PrintWriter将out对象的缓冲区内容写入到Servlet引擎提供的缓冲区中。
                 pageContext是javax.servlet.jsp.JspContext的子类,pageContext对象封装了当前JSP页面的运行信息,它提供了返回JSP页面的其他内置对象的方法。
                由servelt中的关系,可以得到内置对象之间的关系。通过config可以获得application,通过session可以获得application。通过request可以获得session。通过pageContext可以获得所有的内置对象。


  • 相关阅读:
    归并排序(非递归)
    centos7.2 安装jenkins2.274
    归并排序
    Jmeter5.4支持TPS测试
    centos下安装rocketmq4.6.1
    Java 8新特性:lambda表达式
    tomcat putty启动
    Linux启动tomcat带控制台
    每个Java开发者都应该知道的5个JDK工具
    强大易用的日期和时间库 线程安全 Joda Time
  • 原文地址:https://www.cnblogs.com/pricks/p/1601892.html
Copyright © 2011-2022 走看看