什么是Servlet?
J2EE规范的一部分,是用java语言编写的服务器端程序,用于创建动态页面,不依赖于具体的协议,必须运行在web容器中。Servlet是J2EE的其中的一个标准,servlet开发人员遵循这个标准开发的Servlet可以部署到任何的web application server中。
1.模块化的程序,运行在服务器端,增强了请求、响应导向服务。
2.应用示例:
a)访问远端对象
b)跟踪大量信息
c)多用户协作
------------------------------------------------------------------------------------------------------------------------------------
CGI和Servlet的优缺点
CGI程序可以有多种语言编写,但是服务器端处理请求使用单进程,消耗服务器端资源。
Servlet只能由java编写,服务器端处理请求使用多线程,移植性好。
------------------------------------------------------------------------------------------------------------------------------------
使用Servlet的步骤
1.写Servlet类
(1)继承HttpServlet
(2)重写服务方法,一般是以下两种方式:
doGet(HttpServletRequest request,HttpServletResponse response)
doPosr(HttpServletRequest request,HttpServletResponse response)
(3)设置响应的文本类型
response.setContext("text.xml");
(4)获取输出流
response.getWriter();
response.getOutputStream();
(5)往客户端写内容
pw.print(...);
(6)关闭输出流
pw.close();
(7)可以记录日志
getServletContext().log(...);
2.编译Servlet
javac -classpath javax.servlet.jar -d Servlet类.java==>产生.class文件
3.创建符合要求的WEB应用目录结构
应用名
---->WEB-INF
----->classes :存放生成的.class文件
----->lib :存放第三方jar包
----->web.xml :配置Servlet
web.xml中的配置:
<servlet>
<servlet-name>name</servlet-name>
<servlet-class>class</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>name</servlet-name>
<url-pattern>url</url-pattern>
</servlet-mapping>
4.将web应用程序打成war包
jar -cvf hello.war
在Tomcat中能自动识别war包,并对其进行解压
5.将war包考到Tomcat/webapps下
6.启动Tomcat
7.打开浏览器访问 http://127.0.0.1:8080/应用名/servlet的url-pattern
-----------------------------------------------------------------------------------------------------------------------------------
Servlet 的生命周期
1.通过web Container容器装载(J2EE的组件都是被动地装载入Container)并实例化Servlet对象,产生一个实例。
2.调用init()方法(在整个生命周期中只被调用一次)
init(ServletConfig config)先被调用, init()后被调用
设置初始化参数:
(1) 全局的
<context-param>
<param-name>age</param-name>
<param-value>20</param-value>
</context-param>
通过ServletConfig.getServletContext().getInitParameter(...)获取
通过getServletContext()获得运行上下文环境才能获取到全局参数的值
(2)局部的
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param>
</servlet>
通过ServletConfig.getInitParameter(....)获取
3.根据用户的每一次请求,调用一次service()服务方法doGet()/doPost()等(在整个生命周期中可被多次调用);
a.service(ServletRequest req,ServletResponse res)
b.service(HttpServletRequest req,HttpServletResponse res)
c.doGet()/doPost()
需要考虑多线程的问题:
多线程的处理
1)implements SingleThreadModel每个请求创建一个Servlet实例为其服务,性能低。
2)建议在servlet类不要用实例变量,如果用,使用synchronized进行同步
4.调用destroy()方法(在整个生命周期只被调用一次)
-----------------------------------------------------------------------------------------------------------------------------------
用Servlet处理表单数据
1. Form元素的属性
1) ACTION: 用来指定要处理FORM数据的Servlet的URL,也可以指定FORM数据将要发送到的电子邮件;
2) METHOD: 指定数据传送给HTTP服务器的方法;
3) ENCTYPE: 指定数据在传输之前进行编码的方式, 例multipart/form-data 编码将每个字段作为MIME可兼容的文档的单独部分传输。
2. 解析请求
对于所有的请求:
a. getParameterNames: 以Enumeration形式获取表单中清单, 每一项都可以转换成String;
b. getParameter: 返回表单中参数名(区分大小写)对应的值(没有这样的参数,返回null;没有任何值,返回空String);
c. getParameterValues: 返回表单中参数名(区分大小写)对应的字符串数组(没有这样的参数,返回null;只有一个值,返回值为单一元素组);
http请求:包括请求头和请求体
Get请求:浏览器提交的数据是放在请求头部的;
Post请求:浏览器提交的数据是放在请求体部的;
----------------------------------------------------------------------------------------------------------------------------------
Servlets中的持久状态
1. HTTP协议中无状态的优缺点:
优点:可以服务很多客户端;
缺点:不能在多个请求之间共享信息(通过Cookie和Session解决);
2. Cookies
1) Cookies是Web服务器发送到浏览器的简短文本信息,以后在访问同一个Web站点或域时浏览器就会毫无更改地返回该文本信息。
2) 用户可以决定是否接受Cookie。
3) 一个Cookie由以下内容组成:
a. 名称;
b. 单个值;
c. 一些操作属性:路径或所在域、有效期以及版本号。
4) 每个站点,浏览器通常只接受20条Cookie,总共接受300条,以及每条Cookie限制为4KB。
3. 设置Cookie
1) 创建Cookie:
Cookie c = new Cookie("CookieName", "CookieValue");
2) 设置有效期:
c.setMaxAge(int lifetime); 黙认为负值,只作用于当前会话,不能存储在磁盘上;如为0值表示删除Cookie;有效值为秒为单位。
3) 在响应头中放置Cookie:
response.addCookie(c);
4) 从客户端读取Cookie:
Cookie[] cookies = request.getCookies();
Cookie cookie;
for(int i=0; i<cookies.length; i++)
{
cookie = cookies[i];
out.println("<tr><td>" + cookie.getName() + "</td><td>" + cookie.getValue());
}
4. Sessions
1) 一个客户端和一个服务器端一次连接信息的所有集合,通过brower发出,由服务器端的servlet调用;
2) 提供一种方式在多个页面请求间确认用户或者储存关于用户的信息;
3) 实现会话跟踪的三种方式:a. cookie; b. URL重写; c. 隐藏的表单段
5. 设置Sessions
1) 创建Sessions:
HttpSession session = request.getSession(true); // true表示如不存在则创建一个新的session
2) 用指定名称将一个对象绑定到session:
public void setAttribute(String name, Object value);
3) 删除与指定名称相关的所有值:
public void removeAttribute(String name);
4) 返回会话中所有属性名
public Enumeration getAttributeNames();
5) 返回指定名称对象
public Object getAttribute(String name);
6. Cookies和Sessions的比较
1) Cookies可由用户决定是否需要, Sessions不能;
2) Cookies是一种装载sessionID的可能;
3) Cookies存储在客户端, Sessions存储于服务器端;
4) Cookies可以构造,可以由Request取出,由Response返回
分享到:
相关推荐
Servlet 2.4 API帮助文档 chm英文版 是本人根据sun官方j2eeri-1_4-doc-api制作而成!欢迎各位下载使用.如有任何意见和建议请联系我... Java Servlet Development Kit 2.4 DocumenTation by Cn.zwj186.chm
深入java servlet 网络编程 深入java servlet 网络编程 深入java servlet 网络编程 深入java servlet 网络编程 深入java servlet 网络编程
第2章 Java Servlet简介 2. 1 Servlet生命周期 2. 2 Java Servlet API简介 2. 3 处理表单和返回数据的实例 2. 4 错误处理和日志记录 2. 4. 1 Java中的异常处理机制 2. 4. 2 在Java Servlet中处理异常 2. 4. 3...
java servlet 中文说明手册,适合新手学习java servlet
这是对SUN公司开源的Java Servlet原理的详细剖析,对WEB加深理解特别有帮助,这是各种WEB组件的基础。
Java Servlet API 2.5.zip
JAVA SERVLET 高级编程(处理多媒体信息,Java Server Page 技术,servlet与applet 通讯,Servlet 间通讯)
基于Java Servlet实现的灾情控制系统基于Java Servlet实现的灾情控制系统 基于Java Servlet实现的灾情控制系统基于Java Servlet实现的灾情控制系统 基于Java Servlet实现的灾情控制系统基于Java Servlet实现的灾情...
java servlet demo,jsp 页面嵌套jstl 标签,及jstl 标签使用
Java Servlet Programming 2nd Edition
java Servlet 学习笔记分享很详细
Java Servlet API说明文档,主要对Java Servlet API2.1进行说明讲解,也提供了一些相关文档的下载。
Java Servlet API 说明文档
深入Java Servlet 网络编程
写的一个注册登录JavaServlet示例。希望和大家一起分享
java servlet实现图片上传下载
java servlet jar包,在某些环境下需要这些jar包,总共三个!
我认为写的比较好 希望对大家有帮助 是关于JAVA SERVLET 的指南 谢谢
Java Servlet2.5 的函数介绍
Java Servlet Programming9