servlet学习

来源:互联网 发布:网络趣事排行 编辑:程序博客网 时间:2024/05/29 15:07
Servlet入门
  1)Servlet是SUN公司基于Java技术的一个开发动态资源支持的规范,以接口的形式出现,最终的实现类与服务器有关
  2)Servlet是一种特殊的Java类,运行时服务端/容器中,接收每一个客户端的请求并响应,尊循HTTP协议

  3)Servlet手工开发过程,参见<<手工创建Servlet的全过程.txt>>

1)类 实现 Servlet接口 + 在web.xml中配置
<servlet>
    <servlet-name>Demo11[servlet名字,可以任意]</servlet-name>
    <servlet-class>cn.itcast.web.servlet.Demo11[servlet全路径]</servlet-class>
  </servlet>
        <servlet-mapping>
   <servlet-name>Demo11[servlet名字,必须和上述一致]</servlet-name>
   <url-pattern>/qq[以/开头,提供外界用户访问的路径]</url-pattern>
        </servlet-mapping>
  2) 类 扩展 GenericServlet + 在web.xml中配置
     如果需要输出中文,需要在Servlet中如下设置:
//服务端通知浏览器以指定的编码方式来显示中文
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("欢迎学习JavaServlet程序");

3) 类 扩展 HttpServlet + 在web.xml中配置
     HttpServlet已经覆写service()方法,程序员无需再次覆写,只需覆写doXxxx()方法


servlet运行过程;

5 Servlet工作原理和生命周期
  1)当浏览器第一次访问Servlet时,服务器会根据浏览器访问的路径,例如/Demo2,在web.xml文件中找到该Servlet的全路径,
     进行反射。
  2)调用init()为Servlet作初始化工作
  3)调用doXxxxx()为浏览器响应
  4)如果浏览器再次访问相同的Servlet,直实现从服务端维护的Servlet实例集合中取得对应的实现,为浏览器响应
  5)同一个Servlet实例,在服务端只有一个
  6)服务器在决定销毁Servlet实例之前,调用destory()方法,每个Servlet实例只会调用一次,在重新部署情况下 (会调用destroy方法)

Servlet运行过程:

5 Servlet工作原理和生命周期


  1)当浏览器第一次访问Servlet时,服务器会根据浏览器访问的路径,例如/Demo2,在web.xml文件中找到该Servlet的全路径,

     进行反射。

通过浏览器地址http://localhost:8080/day1/Demo2

根据/Demo2,查找web.xml文件,查到1,得到2,走到3,得到4,得到类的全路径名,再根据Java的反射机制,就可以创建servlet对象,也就是Demo2的实例(在服务端只有一个实例),Demo2继承了HttpServlet

<servlet-mapping>

   2<servlet-name>Demo2</servlet-name>

    1<url-pattern>/Demo2</url-pattern>

  </servlet-mapping>

<servlet>

    3<servlet-name>Demo2</servlet-name>

   4<servlet-class>cn.itcast.web.Demo2</servlet-class>

  </servlet>

 

  2)调用init()Servlet作初始化工作

  3)调用doXxxxx()为浏览器响应

  4)如果浏览器再次访问相同的Servlet,直实现从服务端维护的Servlet实例集合中取得对应的实现,为浏览器响应

  5)同一个Servlet实例,在服务端只有一个

  6)服务器在决定销毁Servlet实例之前,调用destory()方法,每个Servlet实例只会调用一次,在重新部署情况下

 

 

 

 Servlet细节

  1)浏览器访问的url-pattern只是一个符合格式的任意字符串,以/开头

  2)一个Servleturl-pattern可以是1个或多个,有二种形式;

a*.xx

        b/xx/*

        注意:/*不能一起直接使用

  3)/**.do的映射关系,*.do最后

  4)程序员编写的Servlet其实是由tomcat容器中的Servlet引擎来处理的,引擎会产生对应的HttpServletRequestHttpServletResponse对应传入到ServletdoXxxx()方法中

  5)通过在web.xml文件中配置代码,让Servlet在部署时就创建

    <servlet>

      <servlet-name>Demo21</servlet-name>

      <servlet-class>cn.itcast.web.servlet.Demo21</servlet-class>

      <load-on-startup>1</load-on-startup>

  </servlet>

  数字小的先加载,数据大的后加载,最小为0,如果为负数和没有设置一样,需要在浏览器第一次访问时创建

  6)url-pattern/servlet是一个缺省的servlet,用于处理当前web应用下,访问路径错误的请求

    任何web服务端都有一个缺省的servlet来处理

servlet线程安全问题:

  7)每个线程会共享同一个Servlet的实例变量,所以要对敏感数据加锁

    产生线程安全条件如下:

a)单例

   &&

b)实例变量

   &&

        c)实例变量进行修改操作

    通过加锁的方式,对敏感数据块进行代码同步(正道)

    

    如果你实现SingleThreadModel来解决线程安全有二个不足之处:

aSingleThreadModel接口的值与web服务器最多接收的线程数有关,可能会出现大值变小值的情况

bSingleThreadModel接口如果发现某个线程正在占用该Servlet实例,会自动创建一个新的Servlet实例为浏览器服务,

   这就违背了Servlet单例的原则

   

 

7 ServletConfig对象

  1)想让当前Servlet读取一些在web.xml文件配置的初始化参数,可以使用ServletConfig对象,它是Servlet运行时的配置对象

  2)init(ServletConfig)方法由Web容器调用,调用时,会传入与容器相关的ServletConfig接口的实现


原创粉丝点击