码迷,mamicode.com
首页 > 其他好文 > 详细

Servlet技术的特点及使用

时间:2016-01-01 20:51:25      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

一、Servlet的简介

  1. Servlet的概述
    servlet是运行在服务端的java程序 servlet是一套规范(接口) 外界都可以访问到
  2. servlet的快速入门
    步骤:
    (1) 创建一个类 实现servlet
    (2)覆盖servlet接口中的全部方法(尤其是service方法)
    (3)需要进行虚拟路径的配置
    web.xml配置部分:
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    5. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    6. <display-name></display-name>
    7. <servlet>
    8. <!--servlet-name 这里的名字可以任意取,不过需要和 servlet-mapping中的servlet-name匹配
    9.         每一个Servlet标签中只能配置一组属性-->
    10. <servlet-name>Demo1</servlet-name>
    11. <!-- 这里需要填写正确的完整包名来指向java源文件 -->
    12. <servlet-class>com.heima.servlet.Demo1</servlet-class>
    13. </servlet>
    14. <servlet-mapping>
    15. <!-- 这里的name需要和servlet标签中的名字匹配 每一个Servlet-mapping 标签中只能配置一组-->
    16. <servlet-name>Demo1</servlet-name>
    17. <!-- 对外访问的路径 -->
    18. <url-pattern>/demo1</url-pattern>
    19. </servlet-mapping>
    20. <welcome-file-list>
    21. <!-- 这里代表的是欢迎页面,可以自己去寻找 -->
    22. <welcome-file>index.jsp</welcome-file>
    23. </welcome-file-list>
    24. </web-app>
    Demo1.java工程内容:
    1. package com.heima.servlet;
    2. import java.io.IOException;
    3. import java.io.PrintWriter;
    4. import javax.servlet.Servlet;
    5. import javax.servlet.ServletConfig;
    6. import javax.servlet.ServletException;
    7. import javax.servlet.ServletRequest;
    8. import javax.servlet.ServletResponse;
    9. public class Demo1 implements Servlet
    10. {
    11. @Override
    12. public void service(ServletRequest req, ServletResponse res)
    13. throws ServletException, IOException
    14. {
    15. // 主要业务处理的地方,每次访问都会执行
    16. PrintWriter writer = res.getWriter();
    17. writer.print("<h1>Hello World</h1>");
    18. writer.print("<h1>Hello World</h1>");
    19. System.out.println(getServletInfo());
    20. }
    21. @Override
    22. public void destroy()
    23. {
    24. // 服务器正常关闭的时候调用
    25. }
    26. @Override
    27. public void init(ServletConfig arg0) throws ServletException
    28. {
    29. // 在服务器servlet对象创建的时候执行
    30. }
    31. @Override
    32. public ServletConfig getServletConfig()
    33. {
    34. // 这个方法用于返回ServletConfig对象,内部封装的是Servlet配置信息
    35. return null;
    36. }
    37. @Override
    38. public String getServletInfo()
    39. {
    40. // 用来返回Servlet的一些信息
    41. return "";
    42. }
    43. }

    由于servlet页面回写的时候使用的PrintWrite流,写出中文由于编码问题会出现乱码,可以通过这个方法解决
    res.setContentType("text/html;charset=utf-8");


        
二、Servlet的生命周期

  1. java中的生命周期:对象什么时候创建 什么时候销毁 这个过程中必然要实行的方法
  2. servlet对象的生命周期:
    创建:默认第一次访问servlet时创建 创建之后对象驻留在内存中 等待为后面的访问服务,所以说,servlet对象只有一个。
    销毁:服务器关闭 web应用从服务器中移除

    与生命周期想过的方法说明
    1. public void service(ServletRequest req, ServletResponse res)
    2. throws ServletException, IOException
    3. {
    4. // 主要业务处理的地方每次访问都会执行
    5. }
    6. @Override
    7. public void destroy()
    8. {
    9. // 服务器正常关闭的时候调用
    10. }
    11. @Override
    12. public void init(ServletConfig arg0) throws ServletException
    13. {
    14. // 在服务器servlet对象创建的时候执行
    15. }

三、Servlet的相关配置文件

  1. 基本配置
    基本格式:
    配置servlet的实体:
    1. <servlet>
    2. <sevlet-name>随意书写</servlet-name>
    3. <servlet-class>servlet类的一个全包名</servlet-class>
    4. </servlet>
    配置servlet的对外访问的虚拟路径
    1. <servlet-mapping>
    2. <sevlet-name>和那么上面的name一致</servlet-name>
    3. <url-pattern>/虚拟路径</url-pattern>
    4. </servlet-mapping>
    例子:
    1. <servlet>
    2. <!--servlet-name 这里的名字可以任意取,不过需要和 servlet-mapping中的servlet-name匹配 -->
    3. <servlet-name>Demo1</servlet-name>
    4. <!-- 这里需要填写正确的完整包名来指向java源文件 -->
    5. <servlet-class>com.heima.servlet.Demo1</servlet-class>
    6. </servlet>
    7. <servlet-mapping>
    8. <!-- 这里的name需要和servlet标签中的名字匹配 -->
    9. <servlet-name>Demo1</servlet-name>
    10. <!-- 对外访问的路径 -->
    11. <url-pattern>/demo1</url-pattern>
    12. </servlet-mapping>
    虚拟路径的写法:
    完全匹配:  就是客户端的访问地址与配置完全一致才可以访问到
    1. <url-pattern>/demo1</url-pattern>

    目录匹配:以/开始以*结束     /aaa/bbb/*
    1. <url-pattern>/demo1/*</url-pattern>

    扩展名匹配:以*开始 以扩展名结束    *.abc ,如果直接写*.abc那么前面就不需要加/
    1. <url-pattern>/demo1/*.jpg </url-pattern>

    注意:目录匹配和扩展名匹配不能混用  /aaa/bbb/*.abc(错误的!!!)
  2. 服务器一启动就实例化servlet
    格式:写在Servlet标签内,<load-on-startup>数字</load-on-startup> 
              数字代表实例化的顺序 数字越小越早创建
    1. <servlet>
    2. <servlet-name>Demo2</servlet-name>
    3. <servlet-class>com.heima.servlet.Servlet</servlet-class>
    4. <load-on-startup>2</load-on-startup>
    5. </servlet>

  3. 缺省的servlet
    格式:缺省的servlet就是所有的servlet都不匹配 缺省的servlet去负责执行
              就是将url-pattern配置成/
    1. <servlet-mapping>
    2. <servlet-name>Demo2</servlet-name>
    3. <url-pattern>/</url-pattern>
    4. </servlet-mapping>
    注意:其实所有的web资源都是servlet负责返回的,建议在开发中不要自己写缺省servlet使用Tomcat自己的web.xml文件中的默认缺省
    技术分享
  4. 欢迎页面:相当于IIS里面的的默认打开页面
    1. <welcome-file-list>
    2. <!-- 这里代表的是欢迎页面,可以自己去寻找 -->
    3. <welcome-file>index.jsp</welcome-file>
    4. </welcome-file-list>
  5. tomcat默认的全局web.xml
    1. 缺省的servlet
      技术分享
      技术分享
    2. jsp处理的servlet
      技术分享
      技术分享
    3. session默认失效时间
      技术分享

    4. MIME类型(下载资源)
      技术分享
    5. 欢迎页面
      技术分享
      注意:tomcat的全局的web.xml对tomcat中所有的web应用都适用

四、Servlet的继承体系

  1. 使用IDE工具创建Servlet类和web.xml配置的对应关系
    技术分享
  2. 我们自己创建servlet的继承关系
    关系:自定义servlet----->HttpServlet------>GenericServlet------>Servlet
    1. service方法的演化过程
      servlet接口中service方法
      技术分享

      GenericServlet中的service方法
      技术分享
      HttpServlet中service方法
      技术分享
      这里service调用的是本类中的另外一个重载service方法。
      技术分享

      在service(HttpServletRequest,HttpServletResponse)方法中可以进行提交方式的判断。通过HttpServlet类中的常量来实现。
      HttpServlet类中的常量属性
      技术分享
      判断实现的方式:
      技术分享
      技术分享

    2. init(ServletConfig config)演变过程
      在servlet接口中的init方法
      技术分享
      在GenericServlet中的init方法
      技术分享
      这个有参方法用来接收Servlet的配置信息,进行赋值
      技术分享
      这个无参重载方法主要用于覆写,切不影响GenericServlet中的一些get方法
      问题:有参数的init和无参数的init的关系?
      首先他们是重载关系。
      有参发放主要用来赋值和调用无参方法。所以在子类中覆盖覆写无参方法不影响最有效果。

    3. destroy()的演变过程
      servlet接口中的destroy方法
      技术分享

      GenericServlet中的destroy方法
      技术分享

五、ServletConfig对象

  1. 概述:是Servlet的配置对象 内部封装的是servlet的配置信息 在web容器调用init方法时 将ServletConfig作为参数进行传递
  2. 怎样获取?
    通过getServletConfig()
    查看GenericServlet的源码发现。
    技术分享
    可以直接返回GenericServlet类中的config变量,该变量在此类中的有参inti方法中进行了赋值。可以直接调用的原因是应为inti的在服务器开启的时候就自动调用了此方法,所以可以正常服务,而不会去除null值。前提是子类不覆盖有参inti方法。
  3. ServletConfig的作用
    1. 获取servlet的名称
      1. ServletConfig sc=getServletConfig();
      2. System.out.println(sc.getServletName());
      技术分享
      取出的值就是这里的Servlet-name的值
    2. 获取初始化参数(多个参数的获取方式)
      设置参数方式:通过init-param来设置参数
      技术分享
      1. ServletConfig sc=getServletConfig();
      2. Enumeration <String> names = sc.getInitParameterNames();
      3. while(names.hasMoreElements())
      4. {
      5. String name=names.nextElement();
      6. System.out.println(name+" "+sc.getInitParameter(name));
      7. }
    3. 可以获取web应用的上下文对象 ServletContext
      技术分享

六、ServletContext对象

  1. 概述
    HttpServletservletContext是servlet上下文对象 实质代表web应用上下文对象 对象只有一个 而且所有的servlet共享一个ServletContext

    servletContext什么时候创建?
    服务器启动的时候 就会创建ServletContext对象 将这个对象放置在内存中中 供所有的setvlet访问(有点想静态变量)

    servletContext什么时候销毁?
    关闭服务器时销毁  web应用新哦那个服务器中移除
  2. 怎么获得ServletContext对象
    通过servletConfig对象获得
    1. ServletContext context = getServletConfig().getServletContext();

    通过getServletContext()直接获得
    在GenericServlet类中有此方法
    技术分享
  3. ServletContext的作用
    1. 获取初始化参数
      XML文件设置:
      技术分享
      实现代码:
      1. ServletContext context = getServletConfig().getServletContext();
      2. Enumeration <String> enums =context.getInitParameterNames();
      3. while(enums.hasMoreElements())
      4. {
      5. String name=enums.nextElement();
      6. System.out.println(name+" "+context.getInitParameter(name));
      7. }

    2.  可以获取web资源的绝对路径:context.getRealPath() 
      重点:getRealPath()相对的位置:相对web应用
      技术分享
      ReadFile方法:
      1. public void readFile(String path)
      2. {
      3. BufferedReader bufr;
      4. try
      5. {
      6. bufr = new BufferedReader(new FileReader(path));
      7. System.out.println(bufr.readLine());
      8. }
      9. catch (Exception e)
      10. {
      11. // TODO Auto-generated catch block
      12. e.printStackTrace();
      13. }
      14. }

    3.  可以作为域对象:域对象:代表存储数据的区域的对象
      1. context.setAttribute(键,值):设置对象的键和值
      2. context.getAttribute(键):通过键获取值
        1. ServletContext context =getServletContext();
        2. //设置属性键值
        3. context.setAttribute("name", "zhansan");
        4. //通过键获取值
        5. String attribute=(String) context.getAttribute("name");






Servlet技术的特点及使用

标签:

原文地址:http://www.cnblogs.com/didixyy/p/5bb0512ee7b05a9f423ccddf22bcb758.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!