JSP&Servlet核心介绍

JSP&Servlet介绍

概述

主要介绍以下的技术:

第一章:Servlet

第二章:Listener   

第三章:Filter

第四章:JSP

第五章:定制标签

第六章:web.xml

 

第一章 Servlet

1.1 Servlet的线程

Servlet是一项服务器端技术,它接收来自HTTP的请求并返回HTTP响应。默认情况下servlet是多线程的,servlet引擎只创建了一个servlet实例,用多个线程执行servletservice方法。Servlet引擎向servlet提供了一些标准的服务,其中包括身份验证、并行执行、内存管理等。

线程安全的servlet应该保护共享资源不被同时访问。Synchronized是保护共享资源的代码的一个有效方法。

如果servlet代码不是线程安全的,那么修改servlet类实现SingleThreadModel接口,servlet引擎会认为该servlet是单线程的,并请求它一次只处理一个请求。

 

1.2 servlet

最常用的servlet类型是为满足HTTP请求而设计的HTTP Servlet,现大部分Web服务器只支持HTTP Servlet,如WebLogic ServerHttpServlet被扩展时,新类会继承一些方法实现包含init(ServletConfig c)service(HttpServletRequest request,HttpServletResponse response)destroy()。下面是HttpServlet的类继承结构:

 

HttpServlet继承了GenericServlet中的service方法,GenericServlet.service()方法根据HttpServletRequest判断HTTP请求的类型,根据类型调用更专业的方法。HTTP1.1协议中的标准方法为OPTIONSGETHEADPOSTPUTDELETETRACECONNECT,尽管实际上所有的Servlet只使用GETPOST方法,但HttpServlet类中的服务器方法可以处理doOptionsdoGetdoHeaddoPostdoPutdoDeletedoTrace等方法。

 

1.3 servlet生命周期 

Servlet的生命周期如下图:

 

1.4 servlet 特性

HTTP Servlet提供了一下的特性:

l         HttpServletRequestServlet引擎用HttpServletRequest对象将HTTP请求的细节传递给servlet;对象就包含了提交页面的请求细节信息,其中包括数据的可用性、协议类型、安全级别等,

l         HttpSession:对象对应于在服务器中处理用户每个会话信息的每个用户。

 

l         HttpServletResponse ServletHttpServletResponse对象将响应细节传递给Servlet引擎。

 

1.4.1 HttpServletRequest

HttpServletRequest继承了ServletRequest的包装类HttpServletRequestWrapper。如图:

下面介绍HttpServletRequest接口中的一些常用的方法:

l         BufferedReader getReader() BufferedReader一行一行地读取和分析请求体文本。

l         ServletInputStream getInputStream() ServletInputStream类读取二进制数据。

l         String getContentType() String获取内容的MIME类型。

l         Int getContentLength() int 获取请求体中的字节数。

l         Enumeration getParameterNames() 从请求分析出来的参数名作为Enumeration而不是String数组。

l         String getParameter (String name) String值对应于参数名,如参数中没有返回null

l         String[] getParameterValues(String name) 如果有多个同名的参数,要用这个方法,返回String数组保持参数原有的顺序,如果没有返回null

l         String getMethod() String 表示请求中使用的HTTP方法。

l         Cookie[] getCookies Cookiesweb服务器发给web浏览器的文本块,web浏览器在下次事务中返回,请求中的Cookies数据分析成Cookie对象,以数组形式提供。

l         String getHeader(String name) 反回与头名称相关联的String值,如果没有返回null

l         String getQueryString() 返回GET请求的URL中原先的查询String

l         HttpSession getSession() HttpSession获得会话。

 

1.4.2 HttpServletResponse

HttpServletResponse继承了ServletResponse的包装类HttpServletResponseWrapper。如图:

下面介绍HttpServletResponse接口中的一些常用的方法:

l         setContentType 浏览器用ContentType来确定如何显示响应体中的信息。

l         ServletOutputStream getOutputStream() 输出二进制数据

l         getWriter 该方法返回一个PrintWriter流,servlet可以使用标准的print()方法把响应编写到这个流中,servlet引擎将编写到该流中的响应放入HTTP响应体中,发送回客户端。

l         Void addCookie(Cookie c) 将各个cookie内容加到相应中,注意浏览器只从某个源接受20cookies

l         Void addHeader(String name,String value) void setHeader(String name,String value)这两个方法创建或修改响应头中的行

l         Void sendRedirect (String neurl) 这个方法将用户浏览器重新定向到新的URL,调用这个方法等于终止响应。

 

1.4.3 Session

会话是在本地对象中存储状态信息并创建对该对象的引用来实现的。Servlet引擎将该引用传递回浏览器,以便在以后的请求中返回该引用。当浏览器发出另一个请求时,新请求中包括该引用。Servlet引擎使用该引用该请求与适当的会话对象进行匹配,并将这个会话提供给web应用程序。Servlet将引用或会话ID传递给浏览器有两个机制,URL重写和CookieWeblogic既使用URL重定向又使用cookie。在服务器断超时或显式失效session.invalidate(),客户端关闭浏览器、离开网站时,会话实效。

    会话中常用的方法有:

l         Enumeration getAttributeNames() 返回的Enumeration中每个加进对话的对象有个String对象名

l         String getId() 返回引擎对这个会话生成的ID

l         getAttribute(String name) 返回会话中的属性为name的属性值

l         Void invalidate() 这个方法在不再需要会话时使用

l         Boolean isNew() 返回true,说明对话在浏览器引用前是新的。

l         Void removeAttribute(String name) 删除属性

 

1.4.4 Cookies

Cookies在用户系统中存储有限的信息,以便在后续事务中返回服务器,Cookies的属性有:

l         Domain 控制发送Cookie的服务器范围的域,缺省值返回产生域,如www.sybex.com,但设置为.sybex.com可以让Cookie返回www2.sybex.comftp.sybex.com之类的服务器

l         Max-Age 这个数字属性用于避免在浏览器中堆满过时信息,浏览器删除指定时间以前的Cookie

l         Path 这个变量限制服务器中返回Cookie的路径,这是外部客户机看到的路径,而不是文件系统路径,设置为“/”可以返回服务器中的所有路径,而设置为“/servlets”则只让以“servlets”开头的URL访问这个Cookie,包括其所有子目录。

l         Name 所有Cookies都有名称

l         Value 返回服务器的文本

 

1.4.5 ServletContext

servletContext提供了一个跨web服务实例中的多个servlet来共享数据的机制,不过因为这些属性只存在于创建他们的那个web服务实例中,所以无法使用servletContext来今行跨多个服务器实例的通信。

servletContext接口提供了一些常用方法有:

l         String getMimeType(String s) 返回MIME类型,没有时返回null

l         Set getResourcePaths(String s) set为从web应用程序根目录开始在参数s目录下的文件或文件夹列表。如:getResourcePaths(“/”)返回根目录下的文件或文件夹列表。

l         URL getResource(String s) s“/”从根目录开始的文件路径,返回该文件路径的URL类,没有时返回null

l         InputStream getResourceAsStream(String s) 返回一个指定路径文件的InputStream,这个文件流交给servlet处理。

l         RequestDispatcher getRequestDispatcher(String s) 返回RequestDispatcher参数s文件路径以“/”开始

l         RequestDispatcher getNamedDispatcher(String s) 参数sServlet名称,根据servlet名称返回一个RequestDispatcher对象

 

l         String getRealPath(String s) 参数s为一个文件的相对路径,返回一个绝对路径

l         String getServerInfo() 返回servlet运行的容器的名称和版本信息

l         String getInitParameter(String s) 返回web.xml中参数为s的配置信息

l         Enumeration getInitParameterNames() 返回web.xml中所有的参数名称

l         String getServletContextName()

l         Object getAttribute(String s) 根据属性名称,servlet容器返回属性值

l         void setAttribute(String s, Object obj) servlet容器中放置属性

l         void removeAttribute(String s) servlet容器中删除属性s

 

1.4.6 ServletConfig

Servletconfig这个接口对象保存Servlet初始化期间使用的信息。

Servletconfig提供的方法有:

l         String getServletName() 返回servlet的名称

l         ServletContext getServletContext() 返回ServletContext

l         String getInitParameter(String s) 返回web.xmlservlet参数为s的配置参数

l         Enumeration getInitParameterNames() 返回所有在web.xml中配置的servlet的参数名称

 

1.4.7 RequestDispatcher

不要对本地URL使用HttpResponse.sendRedirect()。在服务端内部处理请求时,可以使用RequestDispather.forward()方法将用户重定向到另一个资源。

 

这个接口将请求从当前的Servlet转发到另一个ServletJSP中进一步处理。

RequestDispatcher提供的方法有:

l         void forward(ServletRequest servletrequest, ServletResponse

servletresponse) 传递request到一个servletjsphtml

l         void include(ServletRequest servletrequest, ServletResponse

servletresponse)包含response中一个servletjsphtml文件资源

 

 

第二章:Listener

servletContextListener应用程序生命周期事件,提供了两个方法:

l         contextInitialized(ServletContextEvent event)servlet引擎在初始化web应用程序期间调用。

l         contextDestroyed(ServletContextEvent eent)servlet引擎在结束web应用程序服务时调用。

 

监听类的继承关系如下图:

 

2.1 ServletContextAttributeListener

ServletContextAttributeListener servletContext属性改变事件提供了以下方法:

l         attributeAdded(ServletContextAttributeEvent event):在将属性添加到ServletContext时调用。

l         attributeRemoved(ServletContextAttributeEvent event)-在从ServletContext中删除属性时调用。

l         atributeReplaced(ServletContextAttributeEvent event)-在属性替换时调用。

 

2.2 HttpSessionListener

HttpSessionListener提供了一下一些方法:

l         sessionCreated(HttpSessionEvent httpsessionevent);在一个新session创建时调用

l         sessionDestroyed(HttpSessionEvent httpsessionevent);session消除时调用

 

2.3 HttpSessionActivationListener

HttpSessionActivationListener提供了一下一些方法:

l         sessionWillPassivate(HttpSessionEvent httpsessionevent);在将会话迁移到另一个JVM实例之前,要序列化会话,在进行序列化之前调用。

l         sessionDidActivate(HttpSessionEvent httpsessionevent);当在目标服务器实例上还原会话之后调用。

 

2.4 HttpSessionAttributeListener

HttpSessionAttributeListener提供了一下一些方法:

l         attributeAdded(HttpSessionBindingEvent httpsessionbindingevent);新增属性时调用

l         attributeRemoved(HttpSessionBindingEvent httpsessionbindingevent);删除属性时调用

l         attributeReplaced(HttpSessionBindingEvent httpsessionbindingevent);修改属性时调用

 

2.5 HttpSessionBindingListener

HttpSessionBindingListener与前面的监听器不同的是,实现HttpSessionBindingListener的类没有注册在web.xml部署描述中。

HttpSessionBindingListener提供了一下一些方法:

l         valueBound(HttpSessionBindingEvent httpsessionbindingevent);当应用程序代码在会话上调用setAttribute()方法时,如果参数值对象实现了HttpSessionBindingListener,那么将被调用。

l         valueUnbound(HttpSessionBindingEvent httpSessionbindingevent);当从会话中取消对属性值的绑定时,无论是removeAttribute()或会话超时或调用了invalidate()方法,都将被调用

 

第三章 Filter

3.1 类结构图

Filter的类结构图如下:

 

 

 

 

3.2 Filter提供的方法

Filter提供的方法:

l         void init(FilterConfig filterconfig) web容器需要一个Filter,装入Filter时调用。

l         void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain) 在每次请求通过FilterChain时被调用, ServletRequest, ServletResponse经过处理后再传给FilterChain

l         void destroy() web容器删除Filter时调用。

 

3.3 FilterChain

FilterChain提供的方法:

l         void doFilter(ServletRequest servletrequest, ServletResponse servletresponse)

 

第四章 JSP

4.1 JSP运行机理

JSP页面的请求由Web服务器定向到JSP引擎,JSP引擎根据页面名查找相应的Servlet,如果Servlet存在且最新,则请求和普通的Servlet一样用HttpServletRequestHttpServletResponse对象传递给Servlet _jspService方法;如果源页面已经改变或没有编译,则JSP引擎分析源代码,创建Servlet等价的Java代码,扩展HttpJSPServlet.然后编译这个代码,并执行Servlet

 

4.2 类结构图

 

4.3 JSP特性

4.3.1 resquest

    HttpServletRequest类,和servlets中的HttpServletRequest一样,包装客户端的请求信息。

4.3.2 response

    HttpServletResponse类,和servlets中的HttpServletResponse一样,包装返回到客户端响应信息。

 

4.3.3 p ageContext

pageContextJSP中提供的一个包装其他所有特性的类。pageContext的方法如下:

l         void setAttribute(String s, Object obj) 把对象存入jspContext自己的Hashtable

l         void setAttribute(String s, Object obj,int scope) 根据int把对象存入sessionrequestservletContext中。

l         Object getAttribute(String s) jspContextHashTable中获得对象

l         Object getAttribute(String name, int scope) 从指定的int

requestsessionservletContext)中获得对象

l         void removeAttribute(String s) 删除sessionrequestservletContext中的对应对象

l         void removeAttribute(String s,int scope) 根据intrequestsessionservletContext)删除对象

l         JspWriter getOut() 获取JspWriter对象

l         HttpSession getSession() 获取HttpSession对象

l         Object getPage()  获取page对象(this对象)

l         ServletRequest getRequest() 获取HttpServletRequest对象

l         ServletResponse getResponse() 获取HttpServletResponse对象

l         ServletConfig getServletConfig() 获取ServletConfig对象

l         ServletContext getServletContext() 获取ServletContext对象

l         void forward(String s) 把当前HttpServletRequestHttpServletResponse转到另一个资源

l         void include(String s) 把制定资源作为当前HttpServletRequestHttpServletResponse的一部分

 

4.3.4 session

    HttpSession类,和servlets中的HttpSession一样。包装会话信息。

 

4.3.5 a pplication

ServletContext类,和servlets中的ServletContext一样,提供应用全局信息的类。

 

4.3.6 out

    JspWriter类,是JSP中新增的类。功能和servlets中的PrintWriter类类似。

 

4.3.7 config

    ServletConfig类,和servlets中的ServletConfig一样,包装servlet初始化的信息和提供全局信息类ServletContext

 

第五章 标签

5.1 标签元素

Tgglib中的元素定义了标签库,这些元素包括:

l         Tlib-version:这个标签库实现的版本

l         Jsp-version:标签库所必需的JSP版本

l         Short-name:在JSP中使用的默认的命名空间的前缀

l         Uri:标识标签库的这个实现,就好像在web.xml中定义一样

l         display-nameJSP编辑工具可以使用这个名称表示标签库

l         small-icon:引用一幅图片表示标签库

l         large-icon:引用一幅图片表示标签库

l         desscriptoin:描述标签库

l         Example:使用example标签演示库的使用

l         Listener元素:一个tag库可能定义一些类做为它的事件侦听类

l         Tag:使用tag元素来定义标签库中每个可用的标签

n         name: 标签的名称

n         Tag-class:指定实现了标签的处理程序

n         Body-content:处理标签体的方式,一般为JSP

n         Attribute:表明标签包含的属性

u       Display-nameJSP编辑工具可以使用这个名称表示标签

u       Small-icon:一幅图片

u       Large-icon:一幅图片

u       Descriptin:属性描述

u       Example:演示使用的标签

u       Name:属性名称

u       Required:是否必须包含该属性

u       Retexprvalue:属性是静态的还是会动态的接受一个表带式作为值

u       Type:如果是动态的,定义值的类型

 

5.2一个例子

TLD的一个例子

<taglib>

<tlib-version>1.0</tlib-version>

<jsp-version>1.2</jsp-version>

<short-name>stock</short-name>

<uri>http://www.learnweblogic.com/tlds/stock_1_0</uri>

<tag>

<name>stockPrice</name>

<tag-class>com.learnweblogic.examples.ch4.StockPriceHandler</tag-class>

<body-content>JSP</body-content>

<attribute>

<name>tickerSymbol</name>

<required>true</required>

<rtexprvalue>true</rtexprvalue>

<type>java.lang.String</type>

</attribute>

</tag>

<taglib>

</taglib>

 

5.3 实现类

处理程序类实现了以下三个接口中的一个:TagIterationTagBodyTag,常扩展TagSupportBodyTagSupport中的一个,重写这些类中的方法:

l         Public int doStartTag() 处理在JSP处理JSP中找到的定制标签的起始标签或空标签

l         Public int doAfterBody() doStartTag()之后,在doEndTag()方法之前调用

l         Public int doEndTag() 处理在JSP中找到的定制标签的终止标签或空标签

l         Public void release() 释放资源,并重置标签处理器实例中的变量

 

5.4 类处理逻辑

方法处理逻辑顺序如图(注意:根据实现的接口不同,处理逻辑会稍有不同):

 

方法说明:

l         Instantiation() JSP为被请求的处理程序类创建一个实例

l         setPageContext() 通过JSP页面的PageContext来设置标签处理程序的PageContet

l         setParent() JSP把标签处理程序的父亲程序传递给马上要封闭的定制标签

l         setAttributeNames() 对于JSP标签中的每个属性,JSP页面都会在标签处理程序对象中调用setAttributeName()方法

l         doStartTag()

l         doAfterBody()

l         doEndTag()

l         Release()

 

 

5.5 JSP页面中标签声明

    如果在web.xml中配置了标签库可以使用以下的声明方式:

<%@ taglib uri=“pathtolib” prefix=“ai” %>

Web.xml配置如下:

<taglib>

<taglib-uri> pathtolib</taglib-uri>

<taglib-location>/WEB-INF/jsp/example-taglib.tld</taglib-location>

</taglib>

    如果没有在web.xml中配置,可以用以下的方法声明:

<%@ taglib uri="/WEB-INF/tlds/ch06.tld" prefix="ch06" %>

 

 

第六章:web.xml

6.1 web.xml中的元素

l         web-app元素内的合法元素必需按一定的次序存放

l         icon icon元素指出IDEGUI工具用来表示Web应用的一个和两个图像文件的位置

l         display-name display-name元素提供GUI工具可能会用来标记这个特定的Web应用的一个名称

l         description description元素给出与此有关的说明性文本。

l         context-param context-param元素声明应用范围内的初始化参数

l         filter 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。

l         filter-mapping 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servletJSP页面相关联。

l         listener servlet API的版本2.3增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或servlet环境时得到通知。Listener元素指出事件监听程序类。

l         servlet 在向servletJSP页面制定初始化参数或定制URL时,必须首先命名servletJSP页面。Servlet元素就是用来完成此项任务的。

l         servlet-mapping 服务器一般为servlet提供一个缺省的URL

l         session-config 如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。可通过使用HttpSessionsetMaxInactiveInterval方法明确设置单个会话对象的超时值,或者可利用session-config元素制定缺省超时值。

l         mime-mapping 如果Web应用具有想到特殊的文件,希望能保证给他们分配特定的MIME类型,则mime-mapping元素提供这种保

l         welcom-file-list welcome-file-list元素指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件。

l         error-page error-page元素使得在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。

l         taglib taglib元素对标记库描述符文件(Tag Libraryu Descriptor file)指定别名。此功能使你能够更改TLD文件的位置,而不用编辑使用这些文件的JSP页面。

l         resource-env-ref resource-env-ref元素声明与资源相关的一个管理对象。

l         resource-ref resource-ref元素声明一个资源工厂使用的外部资源。

l         security-constraint security-constraint元素制定应该保护的URL。它与login-config元素联合使用

l         login-config login-config元素来指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。

l         security-role security-role元素给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。

l         env-entry env-entry元素声明Web应用的环境项。

l         ejb-ref ejb-ref元素声明一个EJB的主目录的引用。

l         ejb-local-ref ejb-local-ref元素声明一个EJB的本地主目录的应用。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值