JavaWeb_Servlet_简介

Servlet动态扩展服务器功能,以提供在 Web 上进行请求和响应服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet,并让 Servlet 建立起服务器返回给客户机的响应。

1.Servlet的生命周期
周期;始于装入服务器的内存,结束于停止或重新装入Servlet!

        (1).初始化
        Servlet对象一旦创建就会驻留在内存中,为后续的其它请求提供服务,直到web容器退出,servlet实例对象才会销毁!
                 1).配置web应用的web.xml文件,设置服务器启动的时候加载
                         <servlet>
                                  <servlet-name>name</servlet-name>
                                  <servlet-class>com.baidu.Name</servlet-class>
                                  <load-on-startup>2</load-on-startup> <!-- 数字为等级 数值小等级高-->
                         </servlet>
                 2).首次向Servlet发出请求时
                 3).重新装入 Servlet
                         服务器创建一个 Servlet 实例并且调用 Servlet 的 init() 方法.
        (2).请求处理
                 服务器创建一个request和response对象,服务器并调用 Servlet 的 service(request, response) 方法,从request中读取信息,在response中写入信息只有service方法完成时,才会向浏览器回送数据!浏览器的每一次请求,都会产生新的request和response对象!
        (3).消亡
                 当服务器关闭或重新装入 Servlet 的新实例时,服务器会调用 destroy() 方法.

2.ServletConfig
        当在执行init方法时,会将web.xml的Servlet相应的<init-param>标签读取,其配置信息应属于当前Servlet

        <servlet>

               <init-param>
                      <param-name>name</param-name>
                      <param-value>zhang</param-value>
                 </init-param>

        </servlet>

       
         ServletConfig config = this.getServletConfig();
         String str = config.getInitParameter(name);


3.ServletContext
        ServletContext是一个容器,为当前web应用的信息,其所作用的域为当前web应用。服务器开启就存在,服务器关闭才释放,所有用户公用一个(session一个用户一个,request一个用户多个,page用户当前页)
         1).作用域
                 容器中每个web应用都有一个ServletContext接口的实例对象,一个web应用将在每个服务器中都有一个ServletContext实例对象;
         2).初始化
                 web.xml的web应用下添加初始化信息
                 <context-param>
                           <param-name>name</param-name>
                           <param-value>zhang</param-value>
                 </context-param>

                再通过ServletContext的方法获得信息
                  getInitParameter()
                  getInitParameterNames()
         3).配置上下文信息的相关操作
                  setAttribute()
                  getAttribute()
                  getAttributeNames()
                  removeAttribute()
                 上下文属性对于创建它们的服务器来说是本地的。
         4).资源的相关操作
                  getResource()
                  getResourceAsStream()
                 关于资源读取相关操作及注意问题看下面代码
         5).临时工作目录

 

4.Servlet的使用细节:
        (1).当一个web应用news被复制成copyNews,如果此时的web应用copyNews发布到服务器上,还为news,如果想成功添加上服务器,以copyNews命名,应该修改web属性myeclpise-web
        (2).一个完整的servlet应用配置web.xml应该设置两部分信息
                 <servlet>
                         <servlet-name>name</servlet-name>
                         <servlet-class>com.baidu.Name</servlet-class>
                 </servlet>
                 <servlet-mapping>
                         <servlet-name>name</servlet-name>
                         <url-pattern>/name</url-pattern>
                 </servlet-mapping>
        (3).服务器每个请求都实际访问的为Servlet,当访问/news/index.html时,由于不存在该Servlet资源,则服务器会找到一个Servlet名称为default的Servlet,该Servlet会读取存在的资源信息并写入response中!
                 <servlet>
                         <servlet-name>default</servlet-name>
                         <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
                 </servlet>
        (4).线程安全问题
                 当多个浏览器访问同一个Servlet时,服务器会为每个浏览器的访问分配一个线程并调用service方法!假如,这些线程访问公共资源,就存在线程安全问题!
                 1).继承SingleThreadModel
                         该接口并没有定义任何的方法,是一个标记接口!但是当一个Servlet继承该方法后,当该Servlet多次被访问后,将会产生大量的对象很多垃圾,不建议使用!
                 2).使用synchronized代码块

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值