Servlet
1.ServletConfig
l 一个ServletConfig对象是servlet container在servlet initialization的时候传递给servlet的。
ServletConfig包涵 ServletContext 和 一些 Name/Value pair (来自于deployment descriptor)
l ServletContext接口封装了Web应用程序的上下文概念。
2.会话跟踪
1) Session
l 当一个Client请求多个Servlets时,一个session可以被多个servlet共享。
l 通常情况下,如果server detect到browser支持cookie,那么URL就不会重写。
2) cookie
l 在Java Servlet中,如果你光 Cookie cookie = newCookie(name,value)
那么当用户退出Browser时,cookie会被删除掉,而不会被存储在客户端的硬盘上。
如果要存储 cookie,需加一句 cookie.setMaxAge(200)
l cookie是跟某一个server相关的,运行在同一个server上的servlet共享一个cookie.
3) URL Rewriting
在使用URL Rewriting来维护Session ID的时候,每一次HTTP请求都需要EncodeURL()
典型的用在两个地方
1)
out.print(“form action=\” ”); out.print(response.encodeURL(“sessionExample”)); out.print(“form action=\” ”); out.print(“method = GET>”);
2)
out.print(“<p><a href=\” ”); out.print(response.encodeURL(“SessionExample?database=foo&datavalue=bar”)); out.println(“\” >URL encoded </a>”);
3.SingleThreadModel
默认的,每一个servletdefinition in a container只有一个servlet class的实例。
只有实现了SingleThreadModel,container才会让servlet有多个实例。
Servlet specification上建议,不要使用synchronized,而使用SingleThreadModel。
SingleThreadModel(没有方法)
保证servlet在同一时刻只处理一个客户的请求。
SingleThreadModel是耗费资源的,特别是当有大量的请求发送给Servlet时,SingleThreadModel的作用是使包容器以同步时钟的方式调用service方法。
这等同于在servlet的service()方法种使用synchronized.
Single Thread Model一般使用在需要响应一个heavy request的时候,比如是一个需要和数据库打交道的连接。
2. 在重载Servlet地init()方法后,一定要记得调用super.init( );
3. the client通过发送一个blank line表示它已经结束request
而the server通过关闭the socket来表示response已结束了。
4. 一个Http Servlet可以送三种东西给Client
1) a single status code
2) any number of http headers
3) a response body
5. Servlet之间信息共享的一个最简单的方法就是
System.getProperties().put(“key”,”value”);
6. Post和Get
Post:将form内各字段名称和内容放置在html header内传送给server
Get: ?之后的查询字符串要使用URLEncode,经过URLEncode后,这个字符串不再带有空格,以后将在server上恢复所带有的空格。
Get是Web上最经常使用的一种请求方法,每个超链接都使用这种方法。
7. Web.xml就是Web Applicatin 的deployment descriptor
作用有:组织各类元素
设置init param
设置安全性
8. Request Dispatcher用来把接收到的request forward processing到另一个servlet
要在一个response里包含另一个servlet的output时,也要用到Request Dispatcher.
9. Servlet和Jsp在同一个JVM中,可以通过ServeltContext的
setAttribute( )
getAttribute( )
removeAttribute( )
来共享对象
10. 利用request.getParameter( )得到的String存在字符集问题。
可以用 strTitle =request.getParameter(“title”);
strTitle =new String(strTitle.getBytes(“8859-1”),”gb2312”);
如果你希望得到更大得兼容性
Stringencoding = response.getCharacterEncoding();
//确定Application server用什么编码来读取输入的。
strTitle =new String(strTitle.getBytes(encoding),”gb2312”);