`
ren2881971
  • 浏览: 108350 次
社区版块
存档分类
最新评论

开始完整的学习Servlet&Jsp

    博客分类:
  • j2ee
阅读更多
虽然目前来说利用Servlet&JSP来完成工作已经完全没有问题,但是还是要打好基础,不然今天一个框架明天一个框架的 身体不行了实在是跟不上节奏了~
先学两个包中的内容吧
javax.servlet
javax.servlet.http
-------------------------------------------------------------------------
Interface Filter

过滤器是一个对象,执行过滤任务可以在请求一个资源(一个servlet或静态内容),或者从一个资源的响应,或者两者。

过滤器执行过滤在doFilter方法。每个过滤器能够访问一个FilterConfig对象,它可以获得它的初始化参数,并引用它可以使用d的ServletContext,例如,负载所需的资源过滤任务。
在过滤器应用的场景如下:
身份验证过滤器

日志记录和审核过滤器

图像转换过滤器

数据压缩过滤器

加密过滤器

分过滤器

过滤器,触发资源访问事件

XSL / T过滤器

mime类型链过滤器ks。

------------------------------------------------------
Filter中方法:
init(FilterConfig)
destroy()
doFilter(ServletRequest request,ServletResponse response,FilterChain chain)

FilterChain中的方法:
FilterChain是Filter链条,这个链条中Filter的执行顺序是按照在web.xml中filter的配置顺序来排序的。

doFilter(ServletRequest request,ServletResponse response)



在Filter中doFilter()中调用 FileterChain.的doFilter()方法如果有在Filter链条中有下一个filter 则将当前filter中的request和response 转发给第二个filter。如果已经到达filter的终端的话。则中止传递,进行相应的过滤功能

在Filter中的init(FilterConfig)方法中通过FilterConfig参数 可以获得:
1.FilterName
2.FilterConfig的名/值
3.还可以通过FilterConfig获得上下文ServletContext.


FilterConfig中方法:

getFilterName()
getInitParameter()
getInitParameterNames()
getServletContext()


RequestDispatcher接口:

forward()
include()
两者之间的区别 我个人理解为 两者都是将ServletRequest和ServletResponse两者传递给一个新的servlet/jsp 但是不同的是 forward()是有 request和response两者的控制权,而include()虽然转发到了新的servlet/jsp 但是request和response两者的控制权还是由原先的servlet/jsp来控制

<!--以下内容是在网上找到的,帮助我理解下-->
forward是转发的另一个页面.
include是把另一个页面加载到当前页面.

include和forward的区别:

include 是去而复返,forward 是前不见古人,后不见来者。

include 是把别人包含进来,forward 是丢掉了自己。


Interface Servlet:
最最基本的Servlet接口,javax.servlet.GenericServlet和javax.servlet.http.HttpServlet都是继承Servlet接口。
包括 serlvet 的 init() destroy() service()
方法:
init()
destroy()
service()
getServletConfig()
getServletInfo()

ServletConfig方法:
getInitParameter()
getInitParameterNames()
getServletContext()
getServletName()
ps: ServletConifg与FilterConfig 相类似。

在看到这部分api的时候发现了一个问题。 为什么通过ServletConfig能获得ServletContext,但是通过ServletContext却不能获得ServletConifg对象。按照道理来说ServletContext是整个应用全局的上下文,而ServletConfig是针对具体Servlet的。ServletContext的作用范围比ServletConfig大。不能够获得不到啊。
自己想了下又通过谷姐查找资料 还真验证了自己想法。
就是ServletContext是先创建的 而ServletConfig是后创建的。很有可能在ServletContext的时候ServletConfig还没有被实例化。
因为在web.xml配置文件的Servlet中支持一个参数
loadOnStartup 如果参数大于零的话就会启动就加载Servlet。不过默认是0


Interface ServletContainerInitializer
这个接口以前从来没有接触过,自己不敢妄加猜测,只能在网上找了段相关的信息,
等到用到的时候再仔细研究下。
ServletContainerInitializer也是Servlet3.0新增的一个接口,容器在启动时使用JAR服务API(JARServiceAPI)来发现ServletContainerInitializer的实现类,并且容器将WEB-INF/lib目录下JAR包中的类都交给该类的onStartup()方法处理,我们通常需要在该实现类上使用@HandlesTypes注解来指定希望被处理的类,过滤掉不希望给onStartup()处理的类。
而且该接口是Servlet3.0新规范里面提供的接口,需要在tomcat7.0以上版本才能够得到支持

Interface ServletContext:
method:
setInitParameter()
getInitParameter()
getInitParameterNames()
setAttribute()
getAttribute()
removeAttribute()
getServletInfo()
getAttributeNames()

以前没有了解过的方法:
createListener
createFilter
addListener
addFilter

Interface ServletContextAttributeListener:
主要用于监听ServletContext属性改变的情况。监听的是整个应用的全局有 增加,取代和删除 这三种情况。
方法:
attributeAdded()
attributeRemoved()
attributeReplaced()
这三个方法 分别在属性进行相应操作的时候会执行方法内部的代码。
共有的参数是ServletContextAttributeEvent。可以用过这个event参数来获得发生改变属性的 属性名称,和属性名对应的值。
class ServletContextAttributeEvent:
getName()
getValue()


Interface ServletContextListener

用于监听ServletContext整个生命周期发生的改变
方法:
void contextInitialized(ServletContextEvent sce)
void contextDestroyed(ServletContextEvent sce)
一个是context的初始化一个是context的销毁(关闭应用时候context会销毁)
class ServletContextEvent
通过ServletContextEvent. getServletContext()  就可以获得ServletContext对象。
这样就可以对上下文就行操作了。! 赞。

经过我自己写的小例子测试发现,即使在ServletContextListener的init方法中给ServletContext增加属性的话也会触发ServletContextAttributeListener。去执行其中的
attributeAdded等三个方法。
可见ServletContextAttributeListener和ServletContextListener是同时被容器初始化的。并行的。即使在初始化servletcontext的时候 增加属性也可以被监听。

Interface ServletRequest:
下面的内容是我自己尝试将j2ee的api来翻译成的:
公共接口ServletRequest 定义了一对象能将客户端的请求信息提供给servlet。servlet容器创建了一个ServletRequest对象并且把它作为servlet的service的传递参数。
一个ServletRequest对象提供的数据包括: 参数的名值,属性和input stream。继承ServletRequest接口的类 能够提供一些附加的特殊数据(比如http的 数据就是由HttpServletRequest提供的)
下面一些方法是经常能用到的:
setAttribute(String name,Object obj)
getAttribute(String name)
removeAttribute(String name)
getParameter(String  name)
getParameterValues(String name)
getInputStream()
isSecure()判断是否是https
getServletContext()
getRequestDispatcher()
getDispatcherType() 能够获得dispatcher的类型。ASYNC ERROR FORWARD INCLUDE REQUEST

Interface ServletRequestListener:
void requestInitialized(ServletRequestEvent sre)
void requestDestroyed(ServletRequestEvent sre)

Class ServletRequestEvent:
getServletContext()
getServletRequest()

Interface ServletRequestAttributeListener:
void attributeAdded(ServletRequestAttributeEvent srae)
void attributeRemoved(ServletRequestAttributeEvent srae)
void attributeReplaced(ServletRequestAttributeEvent srae)

Class ServletRequestAttributeEvent:
getName()
getValue()


Interface ServletResponse:
response跟request这对难兄难弟。经常被人传来传去。。。。。苦逼命
ServletResponse主要返回的是OutputStream和getWriter() 回应客户端的请求。
api中的其他方法也主要是围绕这功能来提供的。
method:
getOutputStream()
getWriter()
setContentType()
getContentLength()
getContentType()
这些常用的。  自己还写了一个下servlet下载的代码例子地址: http://ren2881971.iteye.com/admin/blogs/1705163

Interface SessionCookieConfig
这是Servlet3.0新增加的接口
Interface SingelThreadModel
这是Servlet2.4以后就不再建议使用的。


还剩下两个异常类:
1.ServletException;
2.UnavailableException


到此为止javax.servlet 包中的内容都已经看完了。自己没事的时候也可以拿出来复习下。
明天开始着手学习javax.servlet.http中的内容 这个包里的内容平时工作中运用的比较多。

到此为止

分享到:
评论

相关推荐

    Servlet&JSP课后习题解答

    Servlet &JSP 学习笔记 第一版答案

    Servlet &JSP学习笔记NetBeans源代码

    Servlet &JSP学习笔记NetBeans源代码,课本中所有的源代码,NetBeans版本,服务器为Tomcat

    Servlet&JSP学习笔记源代码

    Servlet&JSP学习笔记 林信良著 课本所带所有源代码,Eclipse环境下,服务器为Tomcat

    head_first_servlet&jsp学习笔记

    head_first_servlet&jsp学习笔记

    Servlet&JSP学习笔记

    个人精心制作的Servlet&JSP学习笔记,其中的大部分来自 Servlet&JSP学习笔记第二版, 对其中的要点,代码都进行了格式化处理,条理清晰。每个例子都配有源码,经过实际开发环境检测。方便各位查阅和学习

    Servlet&JSP;学习笔记源代码

    Servlet&JSP;学习笔记 林信良著 课本所带所有源代码,Eclipse环境下,服务器为Tomcat

    Head First Servlet & JSP

    Head First Servlet & JSP 详细介绍 学习java ee jsp的入门数据

    Servlet&JSP源代码

    Servlet&JSP源代码,新手学习必看

    J2EE servlet&jsp 练习二答案

    J2EE servlet&jsp 练习二答案 学习使用Session和Cookie 开发一个简单的购物车; 开发一个简单的用户登录提示系统 设定Session生命周期; 开发一个下载文件的Java EE Web应用; 开发一个Session监听器

    JSP&amp;Servlet学习笔记.pdf

    JSP&Servlet学习笔记,适合初学jsp和servlet的人群,初学者学习可能有点困难

    Servlet & JSP 学习精要

    自己学习时候的经典总结 对jsp的各个方面 以及 常见错误总结。 非常之好!

    Servlet&JSP;教程

    这是一个比较完整的Servlet、JSP 教程。全文共十三章,主要包括:Servlet 和JSP 特点,安装和配置开发、运行环境,表单数据处理,HTTP 请求头、应答状态处理,访问CGI 变量,会话状态,JSP 脚本元素、指令、动作,...

    Servlet和JSP学习指南 英文版

    Servlet和JSP学习指南 英文版

    jsp&servlet电子书

    作者多年来教学实践经验的总结,汇集了教学过程中学生在学习jsp & servlet时遇到的概念、操作、应用或认证考试等...

    JSP & Servlet学习笔记

    本书是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习JSP & Servlet时遇到的概念、操作、应用或认证考试等问题及解决方案。, 本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都做...

    中文版JSP&SERVLET教程

    本教程很适合JSP深入学习.

    servlet和jsp学习指南

    《Servlet和JSP学习指南》是系统学习Servlet和JSP的必读之作。由全球知名的Java技术专家(《HowTomcat Works》作者)亲自执笔,不仅全面解读Servlet和JSP的最新技术,重点阐述JavaWeb开发的重要编程概念和设计模型,...

    JSP & Servlet学习笔记(第2版)

    本书是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习JSP & Servlet时遇到的概念、操作、应用或认证考试等问题及解决方案。 本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都做...

Global site tag (gtag.js) - Google Analytics