Servlet详解

Servlet

  • Servlet介绍: Servlet 用来开发动态的web资源的技术
  • Servlet给予Request-Response,和Http一致
  • Sun公司给出了Servlet接口

Servlet快速入门

  • 创建 Dynamic Web Project
  • 普通类继承于HttpServlet
  • 在web.xml文件中配置虚拟访问路径

    • 先配置一个servlet下的servlet-name,servlet-class

       
          MyFirstServlet
          com.jack.servlet.MyFirstServlet
      
      

      servlet-name配置的是任意名称
      servlet-class配置的是对应的servlet类,也就是我们所编写的应用程序类

    • 然后配置一个servlet-mapping下的servlet-name,url-pattern

      
           MyFirstServlet
          /hello
      
      

      这里servlet-name与上面的配置对应servlet标签中的servlet-name对应,url-pattern对应到浏览器栏的访问地址

  • 最后覆盖HttpServlet的doGet和doPost

Servlet的执行过程

  • 首先提交路径在web.xml中对应的路径
  • 然后通过Servlet-name找到对应的Servlet-class也就是找到我们编写的程序
  • 提交的方式中有get和post两种,在对应的Servlet类中找到doGet和doPost方法

Servlet编译和运行

  • 通常我们使用的Java SE时,自动导入的jre下的lib下的rt.jar
  • 现在学习Java EE时,自动导入的Java EE 7 Library中存在Java ee.jar提供Servlet支持
  • 开发时运行在Eclipse 中或MyEclipse中有javaee.jar,而Servlet运行在tomcat的环境中,在tomcat/lib/servlet-api.jar

servlet运行原理的剖析

自己编写的servlet中没有main,通过xml配置来获取类名,然后回调其中的doGet和doPost方法

Servlet的声明周期

  • Servlet接口类–>实现类GenericServlet–>子类 HttpServlet接口–>自定义的类
    * 简化了servlet的开发
    * Servlet接口提出,为了解决给予请求-响应模型数据处理
    GenericServlet 实现接口Servlet接口,与协议无关
    HttpServlet与Http协议相关的方法
    这样即使后面出现了其他的协议,也可以不用改动上层
  • 生命周期
    • init();//初始化
    • service(ServletRequest request,ServletResponse response);//服务
    • destory();//销毁
  • tomcat服务启动时,没有创建servlet对象
  • 第一次访问,tomcat构造servlet对象,调用init,执行servlet
  • 第二次以后访问tomcat不会创建对象,只会执行对应的service方法
  • destory方法是服务器正常关闭时调用

配置Servlet

启动配置

  • Servlet随着tomcat服务器启动时,进行初始化–《load-on-startup》
  • 《load-on-startup》参数可以是一个数字0-9代表的是服务器加载的优先级别 0 most high
  • 典型应用:在tomcat启动时,想要通过servlet加载一些配置文件,配置随着服务器启动(Struct1)

Servlet配置

  • 一个Servlet配置可以对应多个访问路径(可以配置多个url-pattern)
  • web.xml中url的三种分配方式
    • 完全路径匹配(以/开始) /hello , /init
    • 目录匹配(以/开始) /,/abc/
    • 扩展名匹配 (不能以/开头) *.do

Servlet作用

  • 动态生成页面

掌握servlet程序的编写

  • servlet中三个方法
    • init();
    • service();
    • destory();
  • init(ServletConfig sc);
    • 可以通过ServletConfig来获取Servlet的一些初始化参数
    • 可以通过getServletConfig来获取对应的servlet中的ServletConfig对象获取初始化的参数init-param

ServletContext

  • 每一个工程都会创建单独的ServletContext对象,这个对象代表当前工程
  • 全局配置以及全局处理,全局数据共享
  • 只能通过ServletConfig来获取ServletContext对象

ServletContext的功能

  • 获取web应用初始化参数context-param标签
  • ServletContext对象实现数据共享
    • 案例: 统计站点访问次数
    • ServletContext中可以通过设置setAttribute以及对应的getAttribute两种方法来设置网站的初始化访问次数和获取网站的访问次数
  • 实现Servlet转发
    • 案例: 统计字母出现的次数
    • //每个servlet都得写,或者说加载对应的次数
  • 通过ServletContext对象读取资源文件
    • Servlet中获取资源,然而网站资源不一定在WebRoot下,我们一般都需要通过特殊的方法才能加载到对应的资源路径,不然访问不到对应的资源
    • Servlet中有两种获取资源的方法,我们可以通过ServletContext和虚拟路径去获取文件的真实路径,这样我们就可以实现对资源的读取了
    • 另外一种方式,我们可以通过类的加载器去获取对应的资源,然后在获取对应的路径名,这个路径是绝对路径
    • 在整个目录下我们需要通过对资源的访问,资源往往存在其他的目录下,所以我们需要通过获取绝对路径的方式才能获取到该资源

转发和重定向

  • 转发产生一次请求,一次响应;重定向产生两次请求,两次响应
  • 转发对客户端来说是不可见的,重定向客户端可以察觉到
  • 转发时,请求发送至服务器后,服务器中对应的Servlet程序对其进行处理,然后进行转发,最后处理该请求的可能就是另外的程序了,转发可以无数次重叠
  • 重定向,请求发送至服务器后,服务器给定响应,响应头中包括302的状态码和Location的头信息,客户端通过Location头信息来进行下次请求,服务器对该次请求当然也得有响应
  • 所以转发和重定向中请求和响应的次数不一致

遗漏点

java 编译带三方jar包的类 javac -classpath 路径 类
java 编译带package的类 javac -d . 类

疑问

java 中多个文件的编译,是否可以向C语言中编写make命令一样,写成一个文件,然后执行该文件变可以编译整个文件

你可能感兴趣的:(JavaWeb)