Servlet技术的特点及使用

一、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");

来自为知笔记(Wiz)

时间: 2024-08-02 00:57:11

Servlet技术的特点及使用的相关文章

CGI与Servlet技术对比

CGI:Common Gateway Interface,通用网关接口. CGI处理步骤 首先,客户端(即Web浏览器)根据某资源的URL向Web服务器提出请求:Web服务器的守护进程(HTTP Daemon)将此请求的参数通过标准输入和环境变量传递给指定的CGI程序,并启动此应用程序进行处理,如要存取数据库服务器上数据库的数据,则向数据库服务器发出处理请求,数据库服务器将执行结果返回给CGI程序,CGI程序把处理结果通过标准输出返回给HTTP Daemon进程,再由HTTP Daemon进程返

漫谈Servlet技术

1.要谈到Servlet技术,不得不先谈谈动态网页的概念. 编写过网页的人都知道,浏览器能够根据HTML静态标记语言来显示各式各样的网页.但是如果我们需要在网页上完成一些业务逻辑:比如登陆验证.或者说网页显示的内容在服务器的数据库中.如果是这样,除了负责显示的HTML标记之外,必须还要有完成这些业务功能的代码存在.这种网页我们就叫做动态网页. 对于静态网页而言,服务器上存在的是一个个纯HTML文件.当客户端浏览器发出HTTP请求时,服务器可以根据请求的URL找到对应的HTML文件,并将HTML代

Java Web之Servlet技术

1.Servlet基础 针对Servlet技术开发,Sun公司提供了一些列接口和类,其中最重要的是javax.servlet.Servlet接口,两个重要的包是javax.servlet和javax.servlet.http,Servlet就是一种实现了Servlet接口的类,它由Web容器(Tomcat/Jetty等)负责调用并创建,用于接收和响应用户请求.Servlet接口中定义了5个抽象方法: 方法 功能 void init(ServletConfig config) 负责Servlet初

【Java】Java Servlet 技术简介

Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么,它们是如何工作的,如何使用它们来创建您能够想像到的任意复杂度的 Web 应用程序,以及作为一名专业编程人员,您如何才能最有效地使用 servlet. 5 评论: Roy W. Miller ([email protected]), 独立的软件开发辅导员.程序员和作者, RoleModel Software 2004 年 12 月 2

Java Servlet技术

当Web刚开始被用来传送服务时,服务提供者就已经意识到了动态内容的需要.Applet是为了实现这个目标的一种最早的尝试,它主要关注使用客户端平台来交付动态用户体验.与此同时,开发人员也在研究如何使用服务器平台实现这个目标.开始的时候,公共网关接口(Common Gateway Interface ,CGI)脚本是生成动态内容的主要技术.虽然使用得非常广泛,但CGI脚本技术有很多的缺陷,这包括平台相关性和缺乏可扩展性.为了避免这些局限性,Java Servlet技术应运而生.它能够以一种可移植的方

javaSE学习笔记—Servlet技术(11)

如果大家要开发一个动态的网站,那么就必须要学习一种动态的网页开发技术.那么在SUN提供的JavaEE中主要包含两种开发动态网页的技术:Servlet和JSP技术. Servlet技术简介 Servlet技术是SUN提供的一种开发动态网页的核心组件之一.可以方便的开发动态网页.主要用得语言是java,开发者只需要实现相应的接口或者继承相应的类,那么你的java文件就是一个动态的网页.当然好需要一些额外的配置即可. 一个Servlet其实就是一个运行在web server上得一个java程序. Se

servlet技术学习随笔

进入这里学习的第二天!开始着手想看servlet,前面看到javabean jsp 跟这个servlet的MVC框架!真心觉得很重要,技术这种东西学会了就很懂!学不会再怎么解释都不明白.看了一整上午!没怎么搞明白!才想起来以前学习c#的土办法!各种去百度!起查……终于算是有点懂得了! (1).  PrintWriter out = response.getWriter();当一个Servlet响应的时候将响应信息通过out对象输出到网页上,当响应结束时它自动被关闭.PrintWriter用处是将

Java Servlet 技术简介

Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么,它们是如何工作的,如何使用它们来创建您能够想像到的任意复杂度的 Web 应用程序,以及作为一名专业编程人员,您如何才能最有效地使用 servlet. 4 评论: Roy W. Miller ([email protected]), 独立的软件开发辅导员.程序员和作者, RoleModel Soft

Servlet技术-请求转发,重定向和包含的关系

Web组件之间的关系包含3种,请求转发,URL重定向和包含 1.请求转发 请求转发允许把请求转发给同一应用程序的其他web组件,这种技术通常用于Web应用控制层的Servlet流程控制器,可检查HTTP请求的数据,并将请求转发到合适的目标组件,目标组件执行具体的请求处理操作并生成响应结果. 实例: 如果当前的Servlet组件要把请求转发给一个jsp组件,如hello.jsp,可在Servlet中的service方法中执行一下代码: RequestDispatcher rd=request.ge

Web---演示servlet技术(servlet生命周期),解决中文乱码问题

本节讲解决中文乱码问题的4种方法. 还有更好的方法,也就是用过滤器,这里就不演示了,博主目前也不会~呼?(^?^*)~过段时间才会学. servlet生命周期演示: index.jsp: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Tra