我是活雷锋

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

JavaWeb03_Servlet

Servlet规范的组成:

1.web应用程序
2.Servlet与HttpServlet
3.过滤器(servlet2.3版本后引入过滤器,所有http请求都可以经过过滤器)
4.安全
5.国际化

两个接口:
ServletConfig接口:定义如何操作Servlet配置
Servlet接口:定义操作Servlet生命周期或配置

Generic Servlet:实现了上面两个接口,就是一个Servlet。可以和容器进行通讯,但是天生不支持http,因而不能直接交互

HttpServlet:继承了Generic Servlet,仍然是一个Servlet。专业处理http协议

小结:
Servlet API 是一套专门用于开发Servlet的Java类和接口,Web容器和Servlet通过API进行通信,一个Servlet程序就是运行在web服务器上的Java类,但是这个特殊的Java类必须实现ServletConfig和Servlet接口,Servlet接口定义了Servlet程序和web容器的通信协议

Javax.servlet.Generic Servlet类:实现了Servlet的基本功能和特征,是一个普通的Servlet
javax.servlet.HttpServlet类:是Generic Servlet的子类,提供了一些特定的方法,想要实现一个Servlet只需要继承Generic Servlet或者HttpServlet即可

Servlet生命周期

1.通过读取配置文件,找到Servlet-class,取出路径通过反射机制,产生一个servlet实例,默认情况下,容器启动时不会加载servlet,第一次访问的时候才会创建servlet实例,对于init()初始化方法,只有第一次执行,以后都不会再执行,直接进入Service()方法
2.加载servlet实例后,调用init()初始化方法进行初始化
3.所有请求,容器都默认调用Service()方法进行处理,每次请求都会执行一次Service()方法
4.生命周期销毁阶段,代表servlet被容器丢弃,调用destroy()方法来完成一些后续处理工作

Servlet和Http的关系

首先:
web上的内容是http进行传输的,servlet只是一段普通的java代码,对http一无所知,为了解决这个问题,设计一个类专门用于和http之间进行通信,这个类就是javax.servlet.HttpServlet
其次:
用户请求过来,容器会自动将请求交给service()方法:如果重写了service()方法就用该重写后的service()方法处理请求,如果只重写了doGet或doPost方法则他俩来处理,doGet和doPost是service()的代理(注意,如果重写了service、doGet和doPost三个方法,则仍然由service来处理)

ServletConfig对象

ServletConfig对象是容器里面的servlet根据业务进行创建的,每个servlet都有一个自己的ServletConfig对象
当前这个对象容器产生,将配置的信息封装到这个对象里,当容器调用init()方法时,将这个对象作为参数传递给init()方法

<init-param>标签:配置初始化信息

示例:

public void init(ServletConfig config) throws ServletException {
    System.out.println(config.getServletName());

    ServletContext context = config.getServletContext();
    String charset = context.getInitParameter("charset");
    System.out.println(charset);

    String mysqlUrl = config.getInitParameter("mysqlchar");
    System.out.println(mysqlUrl);

    Enumeration<String> en = config.getInitParameterNames();
    while(en.hasMoreElements()){
        String res = config.getInitParameter(en.nextElement());
        System.out.println(res);
    }
}  

<load-on-startup>标签:控制servlet产生的时间

正数:容器启动时加载servlet实例; 
负数:容器启动时不加载Servlet,第一次访问时才加载; 
对于正数来说,值越小,优先级越高

xml中访问路径的匹配

<servlet-mapping>
    <servlet-name>servlet1</servlet-name>
    /testservlet路径自己取,一般为了防止重名,会采用类名作为路径名称
    <url-pattern>/testservlet</url-pattern>     精确匹配
    <url-pattern>*.do</url-pattern>     扩展名匹配(前面没有"/")
    <url-pattern>/*</url-pattern>       路径匹配:匹配所有的请求
    <url-pattern>/</url-pattern>        默认servlet 也是匹配所有请求
        规则:谁更精确就匹配谁:精确匹配>路径匹配>扩展名匹配>默认servlet 
</servlet-mapping> -->  
posted on 2017-03-12 22:28  我是活雷锋  阅读(92)  评论(0编辑  收藏  举报