JavaEE学习03--Servlet

Servlet简介

Servletserverapplet的简写,原意为服务器端程序。

Servlet用来处理动态资源,其根本任务是,处理请求,生成响应。

Servlet的基本使用

1.   Servlet的创建

方法1.实现servlet接口即可.

       方法2.继承javax.servlet.GenericServlet

       方法3.继承javax.servlet.http.HttpServlet

2.   Servlet的生命周期方法

生命周期方法指的是调用之后必须要执行的方法。对于servlet来讲,3个生命周期方法。

1> 出生       init方法.在构造方法调用之后 调用.

2> 使命        service方法 ,当请求发来时,处理请求使用.

3> 销毁       destory方法, 当服务器关闭时,会销毁servlet,在销毁之前调用该方法释放资源.

             

3.      Servlet中的其他方法Servlet一共有5个方法)

       getServletInfo             获得servlet的信息(版本,作者,版权..),没用.

       getServletConfig          返回servletConfig对象

 

ServletConfig接口

       功能:封装了servletweb.xml中的配置.

       包含的方法:

              1>getServletName 获得配置文件中<servlet-name> 元素的内容

              2>getInitParameter 根据<init-param>中的 <param-name> 获得 </param-value>

                     <init-param>

                            <param-name>name</param-name>

                            <param-value>tom</param-value>

                     </init-param>

              3>getInitParameterNames返回所有<param-name> .

              4>getServletContext返回ServletContext对象

ServletContext对象详解

1.   servletContext 封装了web.xml 中的配置

                     <context-param>

                            <param-name>name</param-name>

                            <param-value>jerry</param-value>

                     </context-param>

                     <context-param>

                            <param-name>password</param-name>

                            <param-value>1234</param-value>

                     </context-param>

             

                     getInitParameterNames();         获得所有键

                     getInitParameter(key);              根据键获得对应的值

2.   servlet技术中3大域对象之一(application,session,request)

ServletContext对应着application(应用).利用了一个项目中只有一个ServletContext实例的特点.servletContext中放置了一个map用作数据通信.

                     这个Map就是所谓域.

                            关于域的操作,4.

                                   放入键值对 setAttribute(key,value)

                                   通过键取值 getAttribute(key)

                                   通过键删除 removeAttribute(key)

                                   遍历所有键 getAttributeNames()

3.   获得项目中资源(有拓展)

       所有servletContext中关于路径的获得,相对路径都是相对的 WebRoot(项目根)

       getRealPath                       通过相对路径获得绝对路径

       getResourceAsStream        根据相对路径获得指定资源流

             

     Servlet技术中对象的范围

       servlet==> 项目启动期间一个servlet只有一个servlet实例

       request==> 项目启动期间,request对象的数量,要看当前有多少个请求正在处理.

       response==> 项目启动期间,reponse对象的数量,要看当前有多少个请求正在处理.

       servletConfig==> 一个servlet实例对应一个servletConfig对象

       servletContext==> 整个项目中,永远只有一个servletContext实例存在.

实现了Servlet接口的类

1.   GenericServlet

实现了ServletConfig接口,方便调用(在init方法中做的优化)

 

    @Override

    public void init(ServletConfig config) throws ServletException {

        this.config = config;

        this.init();

}

 

    public void init() throws ServletException {

        // NOOP by default

    }

GenericServlet有两个init方法,使用时调用空参的init方法,含参的init方法做了优化

 

 

2.   HTTPServlet

1.HTTPServlet是在GenericServelt的基础上做的进一步的优化。是一个抽象方法。

2.因为我们web项目基于HTTP协议,所以Service方法中传过来的request,response对象都是 基于HTTP协议的.

       也就是HttpServletReueqstHttpServletResponse. 它帮我们进行了强转.

3.根据不同的请求采取不同的方法进行处理。有专门处理GETPOST请求的方法。

    Servlet线程安全问题

因为在servlet运行期间只有一个servlet实例存在.可能会同时处理多个请求.那么我们在servlet中声明成员变量来存储用户数据是有线程安全问题的.

解决方法:1.实现SigleThreadModel  (不推荐了!)

2.使用局部变量保存用户数据.(推荐使用!)

    Servlet随着项目的启动而创建

使用<load-on-startup>配置来实现.

例如:

<servlet>

       <servlet-name>AServlet</servlet-name>

       <servlet-class>cn.itcast.servlet.hello.AServlet</servlet-class>

       <load-on-startup>3</load-on-startup>

</servlet>

填写一个整数,整数越小优先级越高.如果优先级一样,启动顺序按照配置顺序.

    关于Servlet路径配置问题详解

<url-pattern> 

       路径匹配:

       XML中配置                 访问时能够使用的路径

       /AServlet                 http://localhost:8080/Day07-servlet/AServlet

       /ABC/AServlet           http://localhost:8080/Day07-servlet/ABC/AServlet

       /ABC/ABC/*                 http://localhost:8080/Day07-servlet/ABC/ABC/oasdojasdjioasd

       /*                                http://localhost:8080/Day07-servlet/asdiojoiajsidojoasd

       /                                /*          

                    

       后缀名匹配:

              *.do==> struts

              *.action==> struts2

              *.html==> 自定义匹配。在访问时带后缀名访问(很少用)

       注意:1.关于路径,配置的路径匹配范围越大优先级越低.

               2.两种匹配模式不能混用. 例如错误的例子: /*.do

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值