servlet

servlet 本质是一段java小程序。将servlet加入到servlet容器。

 

servlet容器:能够运行servlet的环境(tomcat)

web容器:能够运行web应用的环境(tomcat)

 

开发servlet

1.写一个sun公司定义的servlet接口

2.将写好的类配置到tomcat中,并配置web.xml

 

FirstServlet.java

 

package com.zy;
import java.io.*;
import javax.servlet.*;
public class FirstServlet extends GenericServlet
{  
    public void service(ServletRequest req, ServletResponse res) throws
        ServletException, java.io.IOException {
        res.getWriter().write("hello Servlet!");
    }

}

 

 

将FirstServlet.java放入web应用下WEB-INF下面的classes目录下

 

配置web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

    version="2.5">

       <servlet>

        <servlet-name>FirstServlet</servlet-name>

        <servlet-class>com.zy.FirstServlet</servlet-class>

    </servlet>

       <servlet-mapping>

        <servlet-name>FirstServlet</servlet-name>

        <url-pattern>/servlet/FirstServlet</url-pattern>  

配置访问的虚拟路径http://localhost/servlet/FirstServlet

    </servlet-mapping>

</web-app>

 

 

1.    Servlet的继承结构

       Servlet接口—定义了servlet应该具有的基本方法

              |

              |--GenericServlet—通用基本servlet实现,对于不常用的方法在这个实现类中进行了基本的实现,对于service()设计为抽象方法,需要子类去实现

                            |

                            |--httpServlet  在通用servlet的基础上基于http协议进行了进一步的强化,实现了GenericServlet中的Service方法,判断当前的请求方式,调用对应到doXXX方法,这样一来我们开发Servlet的过程中我们只需继承 HttpServlet,覆盖具体要处理的doXXX方法就行了。 不用覆盖父类的service方法

 

 

2.    一个<Servlet>可以对应多个<servlet-mapping>,从而一个servlet可以有多个路径来访问

 

3.    url-partten的路径可以使用*匹配符号进行配置,有两种方式:1. /开头 /*结尾  2. *.后缀这两种方式

       由于*的引入,有可能一个路劲被多个url partten匹配,优先级如下:

              哪个最像找哪个

              *. 后缀永远优先级最低

 

4.    <servlet>里面可以配置<load-on-startup>元素,可以用来指定启动顺序,那么web应用在启动时,就会装载并创建servlet的实例对象、以及调用servlet实例对象的init()方法

 

5.    缺省servlet :如果有一个servlet的url-partten被配置为 / ,这个servlet就变成了缺省servlet

其他servlet都不处理的请求,由缺省servlet来处理,对于静态资源的访问,就是缺省servlet执行的

404,500等页面的显示也是缺省servlet处理的,通常我们不会配置缺省servlet

 

  1. 线程安全问题

由于默认情况servlet在内存中只有一个对象,当多个浏览器并发访问servlet时可能产生线程安全问题

       解决方案:

              加锁—效率降低

              Synchonized(this) {

                     锁住的内容

     }

              SingleThreadModel – 不能真的防止线程安全问题

              最终解决方案: 在servlet中尽量少用类变量,配合锁使用

             

 

posted @ 2015-02-18 23:07  superPerfect  阅读(231)  评论(0编辑  收藏  举报