servlet 笔记

来源:互联网 发布:网络科学导论 pdf下载 编辑:程序博客网 时间:2024/05/24 01:45

1mvc 设计模式的主要优点是模型和视图的分离。
2模型是表示正在发送或接受数据的javabean,控制器是操作或发送数据的servlet,视图是表示交易执行结果的jsp。
3在服务器端实现mvc的步骤:web客户机向web服务器发出请求;web服务机把这一请求转送给控制器servlet;servlet对javabean、ejb模型进行必要的操作;控制器servlet把处理结果转发给jsp视图;jsp视图对模型进行格式化以备显示,并把html结果回送给web服务器;web服务器再把信息回送给web客户机。
1.从某种程度上看,可以将servlet看做是含有html的java程序,将jsp看作是含有java代码的html页面。
2.jsp文档是编写servlet的另一种方式。jsp页面会被翻译成servlet,servlet会被编译,在请求期间运行的就是servlet。
3.原则上,servlet并不仅仅限于处理http请求的web服务器或者应用服务器,他同样可以用于其他类型的服务器。例如,servlet可以嵌入ftp或者是邮件服务器中,扩展它们的功能。
4.servlet基本结构:
用户在地址栏中输入url、点击web页面内的链接、或提交没有指定method或指定method=“get”的html表单时,浏览器都会生成get请求。
提交method=“post”的html表单时,会生成post请求。
5.servlt生成html要添加三步:(1)告知浏览器,即将想它发送html;(2)修改println语句,构建合法的web页面;(3)用形式语法验证器检查生成的html。
第一步通过http Content-Type响应报头设为text/html来完成。response.setContentType(“text/html”)
也可以创建其他类型的文档比如excel表格和jpeg图象。
6.servlet打包,使用包名。
7.简单的html构建工具:见tomcat下的biaozhun目录
8.servlet生命周期:
(1)service方法:用doGet方法调用doPost方法。
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { //Servlet code }
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{doGet(request,response);}
(2)doGet,doPost和doXxx方法
99%用的是doGet和doPost方法
(3)init方法
它在servlet初次创建时被调用,之后处理每个用户的请求时,则不再调用这个方法。
init方法的定义如下:
public void init() throws ServletException{//code。。。。}
两种初始化:常规初始化和由初始化参数控制的初始化。
(4)destroy方法
9.SingleThreadModel接口(Servlet 2.4中禁用)
让servlet实现SingleThreadModel接口,阻止多线程的访问
public class YourServlet extends HttpServlet implements SingleThreadModel{}
10多线程编程有三种方案可以解决:
(1)减少竞争(不用)(2)使用SingleThreadModel(尽量不用)(3)明确地同步对代码的访问(使用)synchronized
代码:
synchronized(this){String id="user-id"+nextid;out.println("<h2>"+id+"</h2>");nextid=nextid+1;}


第四章 客户请求的处理:表单数据
1.表单数据的作用
比如在搜索引擎搜索数据时,在地址栏里面有“?”后面加上一大堆的信息,问号后面的数据成为表单数据或者是查询数据,它是服务器端的程序从web页面获取信息时所采用的最为常见的方式。表单数据可以跟在问号后面附加到url的结尾,Get请求就使用这种方式。表单数据可以在单独的行中发送到服务器,post请求就是这样的。
(1)使用form元素创建html表单<form action="">......</form>(2)使用输入元素收集用户数据<input type="text" name="...">(3)在接近表单的尾部放置提交按扭<input type="submit">
2.在servlet中读取表单数据
调用getParameter方法可以得到表单参数的值。如果表单多次出现,可以调用getParameterValues。如果想得到当前请求中参数的完整年列表,调用getParameterNames方法。
(1)单个值的读取: getParameter.如果参数存在但是没有相应的(即用户在提交表单时没有填写对应的文本字段),则返回空的String;如果没有这样的参数,则返回null。注意:参数名对大小写敏感。
(2)多个值的读取getParameterValues
(3)参数名的查找: getParameterNames和getParameterMap.
getParameterNames以Enumeration的形式返回这种列表,其中每一项都可以转换成String,并可以用在getParameter或getParameterValues中。它并不保证具体的实现会采用某种特定的底层数据结构。
getParameterNames的替代方案是getParameterMap。
(4)原始表单数据的读取及对上载文件的分析;getReader 或getInputStream
但是这样不能保证可以同时使用getParameter.
有两种情况需要读取原始的输入:
第一,当数据不是由html表单提交,而是来自定制的客户程序时,可能需要自己读取和分析这些数据。最常见的定制客户程序是applet。
第二,当数据来自上载的文件时,可能需要自己读取数据,<input type="file"....>,它允许客户将文件上载到服务器。
servlet的api 没有定义任何机制来读取这些文件。需要第三方的库
(5)多字符集输入的读取setCharacterEncoding,如要读汉字就要用它。
3.参数缺失或异常时默认值的应用。
需要检查三种参数:
(1)参数的值为null;
(2)参数的值为空字符串,可以用trim移除空格。
(3)参数的值为非空字符串,但格式错误。
4.过滤字符串中的html特殊字符
<使用&lt
>使用&gt
双引号使用&quot
&使用&amp
5.当参数缺失或异常时重新显示输入表单
重新显示的几个方案:
(1)由同一servlet提供表单、处理数据并提供最后的结果
(2)由一个servlet提供表单,由第二个servlet处理数据并提供结果
(3)由一个jsp页面“手动地”提供表单:由一个servlet或jsp页面处理数据并提供结果
(4)由一个jsp页面提供表单,用从数据对象获取的值自动填写表单中相应的字段,由一个servlet或jsp页面处理这些数据并提供最终的结果
                      第五章 客户请求的处理:http请求报头
1.请求报头的读取。在http1.1中,只有host是必需的。所以在使用请求报头之前一定要检查是否为null。调用HttpServletRequest的getHeader方法。报头名称对大小写不敏感例如, Request.getHeader("Connection")完全等同于Request.getHeader("Connection").
读取输入报头的方法:
getCookie
getAuthType getRemoteUser
getcontentLength
getContentType
getHeaderNames
getHeaders
获取主请求自身的信息:
getMethod 主要返回主请求方法(一般是get或post,但也有可能是head,put,和delete)
getRequestURL此方法返回url中主机和端口之后,但在表单数据之前的部分。
getQueryString 返回表单数据
getProtocol 返回请求行的第三部分
2.制作所有请求报头的表格。
3.了解http1.1请求报头
(1)Accept 这个报头指定浏览器或其他客户程序能够处理的mime类型。ie5和6存在一个bug。
(2)Accept-Charset 这个报头标明浏览器可以使用的字符集(如ISO-8859-1)
(3)Accept-Encoding 这个报头详细列出客户端能够处理的编码类型。
(4)Accept-Language 在servlet能够以多种语言生成结果时,列出客户程序首选的语言。这个报头的值应该是标准语言的一种。
(5)Authorization在访问密码保护的web页面时,客户用这个报头来标识自己的身份。
(6)Connection这个报头标明客户是否能够处理持续性http连接。
(7)Content-Length这个包头只适合于post请求,用来给定post数据的大小,以字节为单位request.getContentlength()就可以得到这个报头的值
(8)Cookie 这个报头向服务器返回cookie,使用request.getCookies
(9)Host 浏览器和其他客户程序需要指定这个报头,它标明原始url中给出的主机名和端口号
(10)if-Modified-Since
(11)if-Unmodified-Since
(12)Referrer 这个报头标明引用web页面的url
(13)User-Agent这个报头标识生成请求的浏览器或其他客户程序,根据这个报头,可以针对不同的浏览器返回不同的内容
4.发送压缩的web页面
gzip文本压缩方案能够极大的减少html页面的大小在服务器端压缩文档所需要的时间,以及之后在客户端解压所需要的时间,一般会小于在下载上节省的时间。
5.区分不同的浏览器类型(没有看)
6.依据客户的到达方式定制页面
7.标准cgi变量的访问。(没有看)
第六章   服务器响应的生成;http状态代码
1.来自浏览器或其他客户程序的请求,由一个http命令(一般为get或post)、0个或多个请求报头(http1.1中为一个或多个,因为host是必须的)、一个空行以及一些查询数据(post请求)典型的格式如下:
GET/servlet/SomeName http/1.1
Host: . . .
Header2: ....
HeaderN:.....
(blank Line)
web 服务器对请求的响应一般由一个状态行、一个响应报头、一个空行和相应的文档构成。典型响应的形式如下:
http/1.1 200 ok
Content-Type:text/html
Header2:...
HeaderN:..
(blank Line)
<!DOCTYPE ......>
<HTML><HEAD>....</HEAD><BODY>.......</BODY></HTML>
2.状态代码的指定
100-199
200-299
300-399
400-499
500-599
(1)100(Continue,继续)
(2)200(ok,一切正常)
(3)202(Accepted,已接受)
(4)204(No Content,没有新文档)
(5)205(Reset Content,重置内容)
(6)301(Moved Permanently,被永久移动)
(7)302(Found,找到)
(8)太多了 不写 了 
4.各种搜索引擎的一个前端
第七章 服务器响应的生成;http响应报头
1.在servlet中设置响应报头
必须在返回实际的文档之前指定相关的报头。
setHeader(String headerName,String headerValue)
setDateHeader(String header,long milliseconds)
setIntHeader(String header,int headerValue)
setContentType(String mimeType)
setContentLength(int length)
addCookie(Cookie c)
sendRedirect(String address)
第八章 cookie管理
1.cookie的优点
在电子商务会话中标识用户(电子商务的购物车)
记录用户名和密码
定制站点
定向广告
2.cookie的发送和接受
(1)向客户程序发送cookie
步骤:创建cookie对象 Cookie c=new Cookie("userID","a1234");设置最大时效以毫秒记c.setMaxAge(60*60*24*7)//一个星期将最大时效设为0则是命令浏览器删除该cookie;将cookie放入到http响应报头,使用response.addCookie完成这项任务
(2)从客户端读取cookie
步骤:调用request.getCookie,可以得到一个cookie对象的数组 ;
对数组进行循环,调用每个cookie的getName方法,直到找到感兴趣的cookie为止。
6.使用cookie属性  
(1)public String setComment(String comment)
public String getComment
(2)public void setDomain(String domainPattern)
public String getDomain()
(3)public void setMaxAge(int lifetime)
public int getMaxAge()
负值(默认值)表明cookie仅仅用于当前浏览会话(即直到用户退出浏览器为止),并不存储在磁盘上.
(4)public String getName()
(5)public void setPath(String path)
public String getPath() 如果要指定cookie适用于您网站上所有的url,使用cookie.setPath("/");
(6)public void setSecure(boolean secureFlag)
public boolean getSecure()
(7)public void setValue(String cookieValue)
public String getValue()
(8)public void setVersion(int version)
public int getVersion()
8.基本的cookie实用程序
9.修改cookie的值:记录用户的访问计数
10.使用cookie记录用户的偏好

 

 

 

 

 

 

 

 


servlet会话
1.使用隐藏的表格字段
2。永久性Cookie
3.url重写
4.servlet api内置的会话跟踪