??xml version="1.0" encoding="utf-8" standalone="yes"?> 那是用什么机制来保存q些记忆呢? Cookie
无知者无惧啊Q这ơ用的是C++在Ubuntuq行电子表格的绘ӞC++要学QGTKmm也要学,搞不懂ؓ什么好好的QT不用Q说是ؓ了省钱,说QT要钱``` ```真是~~
昨天接到南京文思创新的offerQ过完年再去那边看看。下午的时候和同事几个在街Ҏ太阳看美奌打算QŞ势很不乐观哪~哈哈
]]>
]]>
场景 监听者接?/td> 事gcd 你想知道一个WEB应用是否dQ?strong>删除?strong>替换了一?strong>上下文属?/strong> Javax.servlet.ServletContextAttributeListener
attributeAdded
attributeRemoved
attributeReplacedServletContextAttributeEvent 你想知道什么时?strong>dQ?strong>删除或?strong>替换一?strong>h属?/strong> Javax.servlet.ServletRequestAttributeListener
attributeAdded
attributeRemoved
attributeReplacedServletRequestEvent 你想知道什么时?strong>dQ?strong>删除或?strong>替换一?strong>会话属?/strong> javax.servlet.http.HttpSessionAttributeListener
attributeAdded
attributeRemoved
attributeReplacedHttpSessionBindingEvent 每次h到来你都想知道,以便建立日志记录或者干点初始化之类的事?/td> Javax.servlet.ServletRequestListener
requestInitialized
requeseDestoryedServletRequestEvent 你想知道有多个q发用户Q也是_你想跟踪zd会话 javax.servlet.http.HttpSessionListener
sessionCreated
sessionDestoryedHttpSessionEvent 你想知道是否创徏或者撤销了一?strong>上下?/strong> javax.servlet.ServletContextListener
contextInitialized
contextDestoryedServletContextEvent 你有一个属性类Q这个属性类的对象将被放在一个属性中Q,而且你希望这个类型的对象l定C个会话或从一个会话删除时得到通知 javax.servlet.http.HttpSessionBindingListener
valueBound
valueUnboundHttpSessionBindingEvent 你有一个属性类Q而且你喜Ƣ子属性对象绑定的会话q移到另一个JVM时得到通知 javax.servlet.http.HttpSessionActivationListener
sessionDidActivate
sessionWillPassivateHttpSessionEvent
]]>
| q回name的实际初始化?/td> |
以数l的形式q回所有的初始化?/td> | |
q回上下?/td> | |
q回q个servlet实例的名U?/td> |
在XMl中的代码表现形式是这hQ?/p>
<servlet>
<init_param>
<param_name>myEmailAddress</param_name>
<param_value>pengjunxlx@yahoo.com.cn</param_value>
</init_param>
</servlet>
在servlet代码中:
String emailAddress = getServletconfig().getInitparameter("myEmailAddress");//q里的myEmailAddress也就是上面在XML中定义的<param_name>myEmailAddress</param_name>
容器初始化一个servlet的时候,他会读DDQ就是XML配置文gQƈ为servletConfig创徏?值对。具体的步骤是这P
问题来了Q这个数据要是JSP也想用怎么办呢Q?/p>
在servlet中:request.setAttribute("jspEmail",emailAddress );
然后在JSP中:request.getAttribute("jspEmail");
但是Q如果想q样一个属性,需要在很多地方用到Q那最好用上下文初始化参数了:servletContext
servletContext与servletConfig的比较学习:
servletConfig | servletContext | |
适用范围 | 只对配置?lt;init_param>响应的servlet适用 | 适用于整个web目 |
部v表述文g | <web_app> ... ... <servlet> <init_param> <param_name></param_name> <param_value></param_value> </init_param> </servlet> ...... </web_app> | <web_app> ... ... <servlet> ... ... </servlet> <context_param> <param_name></param_name> <param_value></param_value> </context_param> ... ... </web_app> |
servlet代码中的表现 | getServletconfig().getInitparameter(" ") | getServletContext().getInitParameter(" ); |
servletContextq能做什么?看看servletContext主要的一些方法吧Q?/p>
servletContext是JSPzȝservlet与容器及WEB应用其他部分的一个连接?/p>
| 通过name得到属?/td> |
得到属性数l?/td> | |
| 得到初始化参?/td> |
得到初始化参数数l?/td> | |
| 讄属?/td> |
| 删除属?/td> |
h分派 |
servlet抽象集是javax.servlet.Servlet接口Q它规定了必ȝServletcd现由servlet引擎识别和管理的Ҏ集?
Servlet接口的基本目标是提供生命期方?u>init() ,service()?u>destroy()Ҏ?
servlet接口中的Ҏ
void init(ServletConfig config)throws ServletException 在servlet被蝲入后和实施服务前由servlet引擎q行?ơ性调用。如果init()产生溢出UnavailableExceptionQ则 servle退出服务?
ServletConfig getServletConfig() q回传递到servlet的init()Ҏ的ServletConfig对象
void service(ServletRequest request, ServletResponse response)throws ServletException,IOException 处理request对象中描q的hQ用response对象q回hl果
String getServletInfo() q回描述servlet的一个字W串
void destory() 当servlet要卸蝲时由servlet引擎调用
二、javax.servlet.GenericServletc(协议无关版本Q?/strong> GenericServlet是一U与协议无关的servletQ是一U跟本不对请求提供服务的servletQ而是单地从init()Ҏ启动后台U程q在destory()中杀歅R它可以用于模拟操作pȝ的端口监控进E? servlet API提供了Servlet接口的直接实玎ͼUCؓGenericServlet。此cL供除了service()Ҏ外所有接口中Ҏ的缺省实现。这意味着通过单地扩展GenericServlte可以~写一个基本的servlet? 除了Servlet接口外,GenericServlet也实CServletConfig接口Q处理初始化参数和servlet上下文,提供Ҏ权传递到init()Ҏ中的ServletConfig对象的方法? GenericServletcM的方? void destory() ~飞l成单词“destory”的一个注册入? String getInitParameter(String name) q回h指定名称的初始化参数倹{通过凋用config.getInitParameter(name)实现? Enumeration getInitParameterNames() q回此serv]et已编码的所有初始化参数?个枚丄型倹{调用config.getInitParameterNames()获得列表。如果未提供初始化参敎ͼ则返?个空的枚丄型|但不是nullQ? ServletConfig getServletConfig() q回传递到init()Ҏ的ServletConfig对象 ServletContext getServletContext() q回在config对象中引用的ServletContext String getServletInfo() q回I字W串 void init(ServletConfig config)throws ServletException 在一实例变量中保存config对象。编写组成单词“init”的注册入口,然后调用Ҏinit() void init()throws ServletException 可以被蟩q以处理servlet初始?在config对象被保存后init(ServletConfig config)的结֤自动被调?servlet作者经怼忘记调用super.init(config) void log(String msg) ~写注册servlet的入?为此调用servlet上下文的log()Ҏ.servlet的名字被加到消息文本的开头? void log(String msg,Throwable t) ~写一个入口和servlet注册的栈轨迹。此Ҏ也是ServletContext中相应方法的一个副本? abstract void service(Request request,Response response)throws ServletException,IOException 由servlet引擎调用求对象描q的h提供服务。这是GenericServlet中唯一的抽象方法。因此它也是唯一必须被子cL覆盖的方法? String getServletName() q回在Web应用发布描述器(web.xmlQ中指定的servlet的名字? 三、javax.servlet.http.HttpServletc(HTTP版本Q?/strong> 虽然servlet API允许扩展到其?a >协议Q但最l所有的servlet均在Web环境下实施操作,只有几种servlet直接扩展了GenericServlet。对servlet更一般的是扩展其HTTP子类HttpServlet? HttpServlet c通过调用指定到HTTPhҎ的方法实现service()Q亦卛_DELETE、HEAD、GET、OPTIONS、POST、PUT?TRACEQ分别调用doDelete()、doHead()、doGet()、doOptions()、doPost()、doPut()?doTrace()ҎQ将h和响应对象置入其HTTP指定子类? HttpServletcM的方? Void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException 由servlet引擎调用用处理一个HTTP GETh。输入参数、HTTP头标和输入流可从request对象、response头标和response对象的输出流中获得? Void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException 由servlet引擎调用用处理一个HTTP POSTh。输入参数、HTTP头标和输入流可从request对象、response头标和response对象的输出流中获得? Void doPut(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException 由servlet引擎调用用处理一个HTTP PUTh。本Ҏ中请求URI指出被蝲入的文g位置? Void doDelete(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException 由servlet引擎调用用处理一个HTTP DELETEh。请求URI指出资源被删除? Void doOptions(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException 由servlet引擎调用用处理一个HTTP OPTIONSh。返回一个Allow响应头标表明此servlet支持的HTTPҎ。一个servlet不需要覆盖此ҎQ因?HttpServletҎ已经实现规范所需的功能? Void doTrace(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException 由servlet引擎调用用处理一个HTTP TRACEh。得请求头标被反馈成响应关标。一个servlet不需要覆盖此ҎQ因为HttpServletҎ已经实现HTTP规范所需的功能? Void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException Service(Request request,Response response)调用的一个立x法,带有指定HTTPh和响应。此Ҏ实际上将h导向doGet()、doPost(){等。不应该覆盖此方法? Void service(Request request,Response response)throws ServletException,IOException 请求和响应对象|入其指定的HTTP子类Qƈ调用指定HTTP的service()Ҏ? 四、javax.servlet.ServletRequestc(协议无关版本Q?/strong> ServletRequest接口装了客Lh的细节。它与协议无养Iq有一个指定HTTP的子接口? ServletRequest主要处理Q? 1.扑ֈ客户端的L名和IP地址 2.索请求参? 3.取得和设|属? 4.取得输入和输出流 ServletRequestcM的方? Object getAttribute(String name) q回h指定名字的请求属性,如果不存在则q回null。属性可由servlet引擎讄或用setAttribute()昑ּ加入? Enumeration getAttributeName() q回h中所有属性名的枚举。如果不存在属性,则返回一个空的枚举? String getCharacteEncoding() q回h所用的字符~码? Int getContentLength() 指定输入的长度Q如果未知则q回-1? ServletInputStream getInputStream()throws IOException q回与请求相关的Q二q制Q输入流。可以调用getInputStream()或getReader()Ҏ之一? String getParameter(String name) q回指定输入参数Q如果不存在Q返回null? Enumeration getParameterName() q回h中所有参数名的一个可能ؓI的枚D? String[] getParameterValues(String name) q回指定输入参数名的取值数l,如果取g存在则返回null。它在参数具有多个取值的情况下十分有用? String get Protocol() q回h使用协议的名U和版本? String getScheme() q回hURI的子Ԍ但不包含W一个冒号前的内宏V? String getServerName() q回处理h?a >服务?/a>的主机名? String getServerPort() q回接收L正在侦听的端口号? BufferedReader getReader()throws IOException q回与请求相兌入数据的一个字W解d。此Ҏ与getInputStream()只可分别调用Q不能同时用? String getRemoteAddr() q回客户端主机的数字型IP地址? String getRemoteHost() 如果知道Q返回客LL名? void setAttribute(String name,Object obj) 以指定名UC存请求中指定对象的引用? void removeAttribute(String name) 从请求中删除指定属? Locale getLocale() 如果已知Q返回客L的第一现场或者ؓnull? Enumeration getLocales() 如果已知Q返回客L的第一现场的一个枚举,否则q回服务?/a>W一现场? boolean isSecure() 如果h使用了如HTTPS安全隧道Q返回true RequestDispatcher getRequestDispatcher(String name) q回指定源名U的RequsetDispatcher对象? Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1681301 五、javax.servlet.http.HttpServletRequest接口QHTTP版本Q?/strong> HttpServletRequestcM要处理: 1.d和写入HTTP头标 2.取得和设|cookies 3.取得路径信息 4.标识HTTP会话? HttpServletRequest接口中的Ҏ String getAuthType() 如果servlet׃个鉴定方案所保护Q如HTTP基本鉴定Q则q回Ҏ名称? String getContextPath() q回指定servlet上下文(web应用Q的URL的前~? Cookie[] getCookies() q回与请求相关cookie的一个数l? Long getDateHeader(String name) 输{换成适合构徏Date对象的longcd取值的getHeader()的简化版? String getHeader(String name) q回指定的HTTP头标指。如果其p求给出,则名字应为大写不敏感? Enumeration getHeaderNames() q回hl出的所有HTTP头标名称的权丑ր{? Enumeration getHeaders(String name) q回hl出的指定类型的所有HTTP头标的名U的枚D|它对h多取值的头标非常有用? int getIntHeader(String name) 输{换ؓint取值的getHeader()的简化版? String getMethod() q回HTTPhҎQ例如GET、POST{等Q? String getPathInfo() q回在URL中指定的L附加路径信息? String getPathTranslated() q回在URL中指定的L附加路径信息Q被子{换成一个实际\径? String getQueryString() q回查询字符Ԍ即URL?后面的部份? String getRemoteUser() 如果用户通过鉴定Q返回远E用户名Q否则ؓnull? String getRequestedSessionId() q回客户端的会话ID String getRequestURI() q回URL中一部分Q从?”开始,包括上下文,但不包括L查询字符丌Ӏ? String getServletPath() q回hURI上下文后的子? HttpSession getSession() 调用getSession(true)的简化版? HttpSession getSession(boolean create) q回当前HTTP会话Q如果不存在Q则创徏一个新的会话,create参数为true? Principal getPrincipal() 如果用户通过鉴定Q返回代表当前用Ljava.security.Principal对象Q否则ؓnull? boolean isRequestedSessionIdFromCookie() 如果h的会话ID׃个Cookie对象提供Q则q回trueQ否则ؓfalse? boolean isRequestedSessionIdFromURL() 如果h的会话ID在请求URL中解码,q回trueQ否则ؓfalse boolean isRequestedSessionIdValid() 如果客户端返回的会话ID仍然有效Q则q回true? Boolean isUserInRole(String role) 如果当前已通过鉴定用户与指定角色相养I则返回trueQ如果不是或用户未通过鉴定Q则q回false? 六、javax.servlet.ServletResponse接口Q协议无关版本) ServletResponse对象一个servlet生成的结果传到发求的客户端。ServletResponse操作主要是作出流及其内容cd和长度的包容器,它由servlet引擎创徏. ServletResponse接口中的Ҏ void flushBuffer()throws IOException 发送缓存到客户端的输出内容。因为HTTP需要头标在内容前被发送,调用此方法发送状态行和响应头标,以确认请求? int getBufferSize() q回响应使用的缓存大。如果缓存无效则q加0? String getCharacterEncoding() q回响应使用字符解码的名字。除非显式设|,否则为ISO-8859-1 Locale getLocale() q回响应使用的现场。除非用setLocale()修改Q否则缺省ؓ服务器现场? OutputStream getOutputStream()throws IOException q回用于返回的二进制输出写入客L的流Q此Ҏ和getWrite()Ҏ二者只能调用其一? Writer getWriter()throws IOException q回用于返回的文本输出写入客户端的一个字W写入器Q此Ҏ和getOutputStream()二者只能调用其一? boolean isCommitted() 如果状态和响应头标已经被发回客LQ则q回trueQ在响应被确认后发送响应头标毫无作用? void reset() 清除输出~存及Q何响应头标。如果响应已得到认Q则引发事gIllegalStateException? void setBufferSize(int nBytes) 讄响应的最缓存大。实际缓存大可以更大,可以通过调用getBufferSize()得到。如果输出已被写入,则生IllegalStateException? void setContentLength(int length) 讄内容体的长度? void setContentType(String type) 讄内容cd。在HTTP servlet中即讄Content-Type头标? void setLocale(Locale locale) 讄响应使用的现场。在HTTP servlet中,对Content-Type头标取g生媄响? 七、javax.servlet.http.HttpServletResponse接口QHTTP版本Q?/strong> HttpServletResponse加入表示状态码、状态信息和响应头标的方法,它还负责对URL中写入一Web面的HTTP会话IDq行解码? HttpServletResponse接口中的Ҏ void addCookie(Cookie cookie) 一个Set-Cookie头标加入到响应? void addDateHeader(String name,long date) 使用指定日期值加入带有指定名字(或代换所有此名字头标Q的响应头标的方法? void setHeader(String name,String value) 讄h指定名字和取值的一个响应头标? void addIntHeader(String name,int value) 使用指定整型值加入带有指定名字的响应头标Q或代换此名字的所有头标)? boolean containsHeader(String name) 如果响应已包含此名字的头标,则返回true? String encodeRedirectURL(String url) 如果客户端不知道接受cookidQ则向URL加入会话ID。第一UŞ式只对在sendRedirect()中用的URLq行调用。其他被~码?URLs应被传递到encodeURL() String encodeURL(String url) void sendError(int status) 讄响应状态码为指定|可选的状态信息)。HttpServleetResponse定义了一个完整的整数帔R集合表示有效状态倹{? void sendError(int status,String msg) void setStatus(int status) 讄响应状态码为指定指。只应用于不产生错误的响应,而错误响应用sendError()? 八、javax.servlet.ServletContext接口 一个servlet上下文是servlet引擎提供用来服务于Web应用的接口。Servlet上下文具有名字(它属于Web应用的名字)唯一映射到文件系l的一个目录? 一个servlet可以通过ServletConfig对象的getServletContext()Ҏ得到servlet上下文的引用Q如果servlet直接或间接调用子cGenericServletQ则可以使用getServletContext()Ҏ? Web应用中servlet可以使用servlet上下文得刎ͼ 1.在调用期间保存和索属性的功能Qƈ与其他servlet׃nq些属性? 2.dWeb应用中文件内容和其他静态资源的功能? 3.互相发送请求的方式? 4.记录错误和信息化消息的功能? ServletContext接口中的Ҏ Object getAttribute(String name) q回servlet上下文中h指定名字的对象,或用已指定名捆l一个对象。从Web应用的标准观点看Q这L对象是全局对象Q因为它们可以被同一 servlet在另一时刻讉K。或上下文中L其他servlet讉K? void setAttribute(String name,Object obj) 讄servlet上下文中h指定名字的对象? Enumeration getAttributeNames() q回保存在servlet上下文中所有属性名字的枚D? ServletContext getContext(String uripath) q回映射到另一URL的servlet上下文。在同一服务器中URL必须是以?”开头的l对路径? String getInitParameter(String name) q回指定上下文范围的初始化参数倹{此Ҏ与ServletConfigҎ名称不一P后者只应用于已~码的指定servlet。此Ҏ应用于上下文中所有的参数? Enumeration getInitParameterNames() q回Q可能ؓI)指定上下文范围的初始化参数值名字的枚D倹{? int getMajorVersion() q回此上下文中支持servlet APIU别的最大和最版本号? int getMinorVersion() String getMimeType(String fileName) q回指定文g名的MIMEcd。典型情冉|Z文g扩展名,而不是文件本w的内容Q它可以不必存在Q。如果MIMEcd未知Q可以返回null? RequestDispatcher getNameDispatcher(String name) q回h指定名字或\径的servlet或JSP的RequestDispatcher。如果不能创建RequestDispatchQ返回null。如果指定\径,必须心?”开_q且是相对于servlet上下文的剙? RequestDispatcher getNameDispatcher(String path) String getRealPath(String path) l定一个URIQ返回文件系l中URI对应的绝对\径。如果不能进行映,q回null? URL getResource(String path) q回相对于servlet上下文或dURL的输入流的指定绝对\径相对应的URLQ如果资源不存在则返回null? InputStream getResourceAsStream(String path) String getServerInfo() q顺servlet引擎的名U和版本受? void log(String message) void log(String message,Throwable t) 一个消息写入servlet注册Q如果给出Throwable参数Q则包含栈轨qV? void removeAttribute(String name) 从servlet上下文中删除指定属性? 九、javax.servlet.http.HttpSession接口 HttpSessioncM于哈希表的接口,它提供了setAttribute ()和getAttribute()Ҏ存储和检索对象。HttpSession提供了一个会话ID关键字,一个参与会话行为的客户端在同一会话的请求中存储和返回它。servlet引擎查找适当的会话对象,q之对当前h可用? HttpSession接口中的Ҏ Object getAttribute(String name) 会话中一个对象保存ؓ指定名字Q返回或删除前面保存的此名称对象? void setAttribute(String name,Object value) void removeAttribute(String name) Enumeration getAttributeName() q回捆绑到当前会话的所有属性名的枚丑ր{? long getCreationTime() q回表示会话创徏和最后访问日期和旉的一个长整型Q该整型形式为java.util.Date()构造器中用的形式? long getLastAccessedTime() String getId() q回会话IDQservlet引擎讄的一个唯一关键字? ing getMaxInactiveInterval() 如果没有与客L发生交互Q设|和q回会话存活的最大秒数? void setMasInactiveInterval(int seconds) void invalidate() 使得会话被终止,释放其中L对象? boolean isNew() 如果客户端仍未加入到会话Q返回true。当会话首次被创建,会话ID被传入客LQ但客户端仍未进行包含此会话ID的第二次LӞq回true?
假如你已l安装好了Eclipse或者其他IDEQ现在就Z个Servlet文g试试看,你会发现建立的Servlet会默认承javax.servlet.http.HttpServletc,q你没有安装Eclipse也无所谓,知道我们~写的Servlet是需要承javax.servlet.http.HttpServletcd可以啦?br> 现在打开q个cȝ看,看看Servlet的老爸长得如何Qpublic abstract class HttpServlet extends GenericServlet implements Serializable; 从这看得出,Servletq有一个爷P它是javax.servlet.GenericServletQ还实现了一个序列化的功能(java.io.SerializableQ,序列化的׃说啦Q老实_我也没用q序列化q功能,仅处于知道有q个地球上有q么一个东西而已。再接着看看ServletL长得是啥Ppublic abstract class GenericServlet extends Object implements Servlet, ServletConfig, Serializable; 我们q需要留意的是Servlet的爷h实现了Servlet的接口的Q你打开Servlet接口Q里面有q样一句话QDefines methods that all servlets must implement. 换一句话Q它是Servlet的老祖宗,所有的Servlet必须要实现这个接口,要不׃能称之ؓServlet。我们Web用的HTTP协议所以就是HttpServletQ同L道理Q如果将来出现XTTP协议Q也怽会看C个XttpServletQ它必定也是实现了Servlet接口Q当然啦Q技术出C大变革除外)。Servlet的爸爸,L的方法这么多Q不可能每一个都说。就挑一些常用的Q也是Servlet生命周期的几个函敎ͼ说说Q?br> void init(); //Servlet初始?br> void service (ServletRequest req, ServletResponse res);
void doGet (ServletRequest req, ServletResponse res);
void doPost (ServletRequest req, ServletResponse res);
………?br> Servlet各种服务
void destroy(); //Servlet的销?
记得李兴华老师当时是这栯的:Servlet的生命周期其实就是h一生的写照QTomcat是q个C会。h的经历首先是从出生开始的Q对Servlet而言是调用initQ)ҎQ想想看Qh的一生能出生多少ơ啊Q就一ơ,Servlet中initQ)的方法也只能调用一ơ,一般都是在ServletW一ơ运行时加蝲initQ)ҎQ你也可以设|ؓ服务器启动的时候加载。h出生后,随着q纪的增长,你就必须得投入到工作去,w体有缺L例外Q而且工作不是说你只做一ơ,只要有需要,你就必须得做Q重复的做。BOOS的命令,谁敢不服从,要不立刻吵你鱉K。对Servlet而言也是一P只是它没有抵触情l而已Q哈。它也是不断的运行doGet(), doPost(){方法,当中有可能出现异常。hL一天是会死亡的Q死亡的定有两U,一U是的的确MQ他的尸体就w在你面前,另外一U是他失t了多少q_从法律的角度上判断,他是M了,他的老婆拥有了合法改嫁的权利。对Servlet而言Q它的死亡方式也有两U:一U是服务器关闭,也就是的的确死了,另外一U是该Servlet长时间不使用QTomcat判断其死亡,Servlet的生命周期到此结束?/p>
2. Servlet响应
使用响应只是Z向客户发送数据,会对响应调用两个ҎQ?/p>
setContentType()
getWriter()
使用注意Q用Windows Live Writer发布之后QWindows Live Writerq不改变当前H口的状?也没有明昄提示)Q在当前H口中会刚发布的随W处于编辑状态,如果修改q发布,会直接修改刚发布的随W内宏V?