⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 11. servlet note.txt

📁 在达内培训java笔记
💻 TXT
📖 第 1 页 / 共 5 页
字号:
             例如:Tomcat,通过修改%TOMCAT%/conf/server.xml
             加入 URIEncoding="utf-8"
    (3)静态 html 页面的中文化问题
       <head>
            <meta http-equiv="content-type" content="text/html; charset=gbk">
       </head>

6.请求路径
  请求路径是把请求导向到一个 servlet 来响应服务。它是由几个重要的部分来组成的。
  通过 HttpRequest 对象,暴露了如下信息(对照应用的目录结构):
  1)上下文路径(Context Path) 
    该路径的前缀是和 ServletContext 相关的。
    如果 Context 就是 Web 服务器的 URL 命名空间的缺省的根上下文时,那么上下文路径将会是一个空的字符串。
    如果上下文并不是服务器的命名空间的根,则上下文路径就以“/”开始,但不能以“/”结束。
  2)Servlet 路径(Servlet Path) 
    该路径就是直接与激活该请求的相应映射,它也是以“/”开头。
    但要注意的是,如果指定的请求是与“/*”模式相匹配,则此时 Servlet 路径就是一个空字符串。
  3)路径信息(PathInfo) 
    请求路径中除了上下文路径和 Servlet 路径以外的部分。
    当没有额外的路径时路径信息就是空的(null),或者它会以“/”开始的字符串。
  在 HttpServletRequest 接口中定义如下的方法来访问请求路径的相应信息:
    getContextPath();
    getServletPath();
    getPathInfo();
    值得注意的是,请求 URI 和路径的各部分之间的 URL 编码的不同之外,下面的等式恒成立:
    requestURI = contextPath + servletPath + pathInfo








Day2
1.配置开发环境
  如何利用IDE开发(构建)一个web project
  部署web project到Tomcat
    ————结果是把WebRoot下的内容打成包,发布到webapps中
2.在集成环境开发过程中的注意事项
  如果修改了Java文件(修改了方法签名除外),无需重启,也无需重部署
  如果修改了html文件,无需重启,但需要重部署
  修改了web.xml,系统会自动重部署

3.Servlet的生命周期
  生命周期有哪几个过程(4个)?
  每个过程都对应有特殊的生命周期方法
    装载&实例化————构造方法
    初始化————————init()       只调用一次,并且在service()之前完成
    处理请求———————service()   处理客户的请求,每个请求都在单独的线程中完成,可多次调用
    销毁——————————destroy()   只调用一次,通常在停止WEB应用或者是Web应用重启时

  1)实例化(两种时机):
    A.配置了<load-on-startup>元素,启动应用时实例化
      其中,配置数值建议从1开始计数,值越小,载入的优先级越高。
      优先级提倡从1开始,1以下的数字,有些容器不理会。负数则被认为是“默认”。
    B.如果没有配置,则在第一次请求时才实例化
  2)初始化——init()/init(ServletConfig config) 
    实例化之后,容器马上调用init()方法来初始化。
    对 Servlet 将要使用的资源作初始化,如读入配置文件信息等(只执行一次)。
    在初始化过程中,容器会创建 ServletConfig 对象并把它作为 init 方法的参数传入。
    该配置对象允许 servlet 从访问 Web 应用的配置信息中读取出初始化参数的名-值对。
    Servlet 提供2个初始化方法:  init()  和  init(ServletConfig config) 。
  3)请求处理——service() 
    初始化后,容器会调用 servlet 的 service()方法,向客户端提供服务
    service()能够被多客户端多次调用(每个请求都要执行一次) 
  4)销毁——destroy() 
    在Web Container停止 Web App 或 WebApp 被停止/reload 时调用此方法。

4.ServletConfig & ServletContext
  1)ServletConfig
    servlet访问配置数据的一个对象,由容器创建,每个servlet独享
    仅对本 servlet 有效,一个 servlet 的 ServletConfig 对象不能被另一个 servlet 访问。
    主要用来读取 web.xml 中配置的Servlet初始信息,不能被其它 Servlet 共享。还可以用于访问 ServletContext。
  2)ServletContext
    ServletContext 是多个 Servlet 共享数据的对象。
    对同一个 Web 应用中的任何 servlet,在任何时间都有效。
    对应整个 Web Application 运行环境,可以用来读取 web.xml 中配置的应用初始信息,写日志,共享数据等
    ServletContext 被所有 Servlet 共享。可以理解为真正意义上的全局对象
  3)如何获取ServletConfig
    A.init(ServletConfig config){.....} 
      容器在Servlet初始化之前已经创建了ServletConfig
      但如果Override此方法,需要记得调用:super.init(config);//其实是调用GenericServlet的init(config) 
      //这里的config只是方法内部的变量。如果其它方法中需调用,还得:this.config=config;给成员变量的config赋值
    B.其他地方(包括在init()方法中),可以使用Servlet API本身的方法
      this.getServletConfig();  //任何方法中都可以调用,包括init(ServletConfig config)方法
    注:这也是为什么把这个知识点放在这里的原因
  4)如何获取ServletContext
    A.config.getServletContext();//前提是config在之前已获取
    B.Servlet API提供了  this.getServletContext();//没有config也可以用
  5)注意:不能在Servlet中使用this.getServletConfig或者this.getServletContext()来初始化成员变量
    因为创建成员变量优先于构造方法和init方法;而 config 和 context 只有调用了 init 方法之后才初始化
  6)利用ServletContext.log()来写日志
    如:this.log("String"+(new Date()));
  7)例子
    使用ServletContext来获取<context-param>参数
    使用SerlvetConfig来获取Servlet的<init-param>

5.产生动态内容的另一个方面:根据业务逻辑进行请求传递(页面跳转) 
  RequestDispatcher(请求分发器)
    ————forward(request, response)//跳转到其他资源
    ————include(request, response)//包含其他资源
  如何获取RequestDispatcher
    request.getRequestDispatcher(page)
    servletcontext.getRequestDispatcher(page);
    两者之间的区别?(后面会详细讲述)
6.网上书店(打折优惠) 
  SerlvetConfig来获取Servlet的<init-param>
  ServletContext来获取<context-param>参数
  RequestDispatcher进行页面包含








Day3——————访问资源,Servlet如何与数据库构建应用系统
1.两种访问DB的方法
  1)直接连接DB,通过JDBC API
  2)配置Tomcat的连接池
    server.xml配置<Resource>
    web.xml:应用引用资源
    init():通过JNDI API来获取DB Connection
  2种方法都需要在Servlet的init()方法中,把DB Connection注入到Servlet中2、用Tomcat的jndi服务获取数据源
    第一步:为 Tomcat 配置连接池:
        修改tomcat/conf/server.xml
        在<host>节点中加入 Resource 配置
        <Context path="/usermanager">            //Web应用的根 
        <Resource 
        name="jdbc/tarena"                       //JNDI名字,用于查找 
        type="javax.sql.DataSource"              //资源类型 
        username="root"
        password="11111111" 
        driverClassName="com.mysql.jdbc.Driver"  //JDBC驱动 
        maxIdle="10"                             //最大空闲连接数
        maxWait="5000"                           //等待时间,配置为-1就是无限等待,直到有空闲连接为止
        url="jdbc:mysql://localhost/tarena"      //连接的 URL 
        maxActive="10"/>
        </Context>
    第二步:在应用中配置资源引用 (此步骤可以省略)
        修改web.xml
        <resource-ref> 
        <res-ref-name>jdbc/tarena</res-ref-name>    //资源引用名 
        <res-type>javax.sql.DataSource</res-type>   //资源的类型 
        <res-auth>Container</res-auth>               //Application 
        <res-sharing-scope>Shareable</res-sharing-scope> //Unshareable 
        </resource-ref>
     第三步:在 Servlet 的 init 方法中通过 JNDI 接口来获取 DataSource
        Context ctx=new InitialContext(); 
        DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/tarena"); 
        Connection con=ds.getConnection();
3.如何构建一个Web应用系统(Servlet + JDBC + DB) 
  分层设计的思想:表示层(view) + Dao层
  Servlet层的设计:
    废弃“为每个请求提供一个Servlet”的做法,引入Action接口与参数控制
  Dao模式
  工厂模式:DaoFactory









day4 会话管理
     Cookie机制  Session机制
   HTTP协议与状态保持:Http是一个无状态协议

1. 实现状态保持的方案:
   1)修改Http协议,使得它支持状态保持(难做到) 
   2)Cookies:通过客户端来保持状态信息
     Cookie是服务器发给客户端的特殊信息
     cookie是以文本的方式保存在客户端,每次请求时都带上它
   3)Session:通过服务器端来保持状态信息
     Session是服务器和客户端之间的一系列的交互动作
     服务器为每个客户端开辟内存空间,从而保持状态信息
     由于需要客户端也要持有一个标识(id),因此,也要求服务器端和客户端传输该标识,
     标识(id)可以借助Cookie机制或者其他的途径来保存
2. COOKIE机制
   1)Cookie的基本特点
     Cookie保存在客户端
     只能保存字符串对象,不能保存对象类型
     需要客户端浏览器的支持:客户端可以不支持,浏览器用户可能会禁用Cookie
   2)采用Cookie需要解决的问题
     Cookie的创建
       通常是在服务器端创建的(当然也可以通过javascript来创建) 
       服务器通过在http的响应头加上特殊的指示,那么浏览器在读取这个指示后就会生成相应的cookie了
     Cookie存放的内容
       业务信息("key","value") 
       过期时间
       域和路径
     浏览器是如何通过Cookie和服务器通信?
       通过请求与响应,cookie在服务器和客户端之间传递
       每次请求和响应都把cookie信息加载到响应头中;依靠cookie的key传递。
3. COOKIE编程
   1)Cookie类
     Servlet API封装了一个类:javax.servlet.http.Cookie,封装了对Cookie的操作,包括:
     public Cookie(String name, String value)  //构造方法,用来创建一个Cookie
     HttpServletRequest.getCookies()           //从Http请求中可以获取Cookies
     HttpServletResponse.addCookie(Cookie)     //往Http响应添加Cookie
     public int getMaxAge()                    //获取Cookie的过期时间值
     public void setMaxAge(int expiry)         //设置Cookie的过期时间值
   2)Cookie的创建
     Cookie是一个名值对(key=value),而且不管是key还是value都是字符串
        如: Cookie visit = new Cookie("visit", "1");
   3)Cookie的类型——过期时间
     会话Cookie
        Cookie.setMaxAge(-1);//负整数
        保存在浏览器的内存中,也就是说关闭了浏览器,cookie就会丢失
     普通cookie
        Cookie.setMaxAge(60);//正整数,单位是秒
        表示浏览器在1分钟内不继续访问服务器,Cookie就会被过时失效并销毁(通常保存在文件中) 
     注意:
        cookie.setMaxAge(0);//等价于不支持Cookie;

4. SESSION机制
   每次客户端发送请求,服务断都检查是否含有sessionId。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -