您的位置:首页 > 其它

学习Servlet的感受

2009-09-19 08:54 190 查看
在北大青鸟一年多了,现在servlet已经学习完了,我现在谈谈我学习Servlet的一些感受。说实在的Servlet就是JSP的基础。有很多地方都类似与JSP,但是他属于MVC的控制器,当我们接受到客户端发来的请求时,通过相应的Servlet来控制相应的对与错,从而实现页面的跳转。下面我给大家介绍一下几点能很好的运用Servlet。
1.先给大家讲讲Servlet的生命周期。Servlet的生命周期是由部署Servlet的容器来控制的。Servlet就像插件一样,是被web服务器调用的,你只管把你的代码在Servlet中写好。servlet引擎自动会来调用。当客户端发送一个请求时,Servlet容器会查找内存中是否存在Servlet实例,如果不存在,就创建一个Servlet实例。如果存在Servlet实例,就直接从内存中取出实例来响应请求。
1) Servlet容器加载好Servlet后,进行初始化,初始化Servlet时,可以设置连接参数,建立JDBC连接,或者对其他资源的引用。这个阶段,调用init()方法init(ServletConfig config)方法,注意,这里执行的是带参数的init方法,因为这个init方法里的代码里对ServletConfig这对象进行了初始化,而通过ServletConfig对象的getServletContext()方法又可以得到ServletContext对象。那么,也就是只要建立好一个servlet实例后,关于这个servlet的配置信息ServletConfig类对象和servlet所处的上下文环境(一个web应用程序)ServletContext对象都可以得到了,得到这些对象后,你想怎么操作就怎么操作了。
2)初始化以后,就处于响应请求的就绪状态。当客户端有一个请求时,Servlet容器将Servlet Request (请求对象代表) 和Servlet Response (响应对象代表)对象都转发给Servlet,并且以参数的形式传给service()方法,在service()方法内对客户端的请求进行判断,如果是GET方法提交,则调用doGet()方法处理请求。如果是POST方法提交,则调用doPost()方法处理请求。
3)最后在调用service方法后,当servlet不再有用时,要销毁这个对象了,销毁也是由Servlet容器完成的,那么调用Servlet接口里的destroy()进行资源的释放和清扫。其实对servlet的运行过程,一句话:servelt引擎只根据servlet接口定义的方法来进行调用init()---->service()――――>destroy()。当然根据多态的特性,它会调用你创建servlet的类的对象里的相应的方法的。
2、servlet引擎再调用一个相应的servlet对象的service()方法时,会同时创建两个对象,一个是HttpServletResponse,一个是HttpServletRequest。前者先创建一个内容是空的输出信息,后者把请求的信息包装起来对象。我们可以从HttpServletRequest取出我们想要的信息,之后可以向HttpServletResponse输出我们想输出的内容。这里就要提到过滤器了。过滤器的作用也就是说在把这个两个对象传给一个servlet的service()方法之前,先对对象进行处理。比如,我们可以根据request对象,进行阻止不要让它请求到想请求的资源,而进行重定向。对输出内容呢?我们传给servlet的response对象是个更换过response对象,也就是说让servlet在输出的时候不是直接输出到客户端,我是输出到我们更换过的response对象里,比如让它输出到一个CharArrayWiter字符数组里。再从这个字符数组里取出servlet输出的内容,我们进行我们想要的更改后,再发送到
客户端。再了解了这些细节后你会发现写过滤器原来这么easy!你也许会问,怎么知道要访问那些servlet的时候会执行哪些过滤器呢?这个可以在web.xml里进行的配置的。
3、对于servlet与jsp或者数据库中的中文乱码问题:
其实抓住一点就ok:在这个程序处理过程中,最开始(起点)字符是采用什么编码集(当然它有一个对应的编码值),程序最后处理(终点)字符是采用什么编码集(当然它此时也有一个对应的编码值)。
这就是我给大家介绍我学习的Servlet的一些感受,希望大家能有所收获。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: