------------------------------------------------------------------------------------------------------------------------------------
什么是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返回
分享到:
相关推荐
Java Servlet API 2.5是Java Web开发中的一个重要组成部分,它是Java服务器端程序与Web应用程序交互的核心接口。这个API定义了一系列用于处理HTTP请求和响应的类和接口,为开发动态、交互式的Web应用提供了基础。在...
**JAVA Servlet 编程指南** Java Servlet是一种Java技术,用于扩展服务器的功能,特别是在Web应用程序中。Servlet是Java EE(企业版)的一部分,它允许开发者创建动态、交互式的Web服务。Servlet容器,如Tomcat,...
Java Servlet是一种基于Java技术的服务器端组件,用于创建动态web应用程序。SUN公司(现在是Oracle)开源的Servlet规范使得开发者能够用Java语言编写能够处理HTTP请求的服务端程序。Servlet在Web开发中扮演着核心...
Java Servlet是Java编程语言中用于开发服务器端应用程序的API,主要用于构建动态Web应用程序。Servlet是Java EE(Enterprise Edition)的一部分,它允许开发者扩展Web服务器的功能,处理HTTP请求并返回响应。在Java ...
**JAVA SERVLET 高级编程** 在Java Web开发领域,Servlet是不可或缺的一部分,它为开发者提供了处理HTTP请求的能力。本教程将深入探讨Java Servlet在处理多媒体信息、集成Java Server Pages (JSP)技术、实现Servlet...
在Java Servlet API 2.5版本中,包含了对Servlet、Filter、Listener等关键概念的详细描述,以及它们在Web应用程序中的应用方式。 1. **Servlet接口**:Servlet是Java中处理网络请求的基础,它定义了web服务器如何与...
1.1 Servlet 定义:Servlet 是 Java 类,遵循 javax.servlet.Servlet 接口,用于接收和响应来自客户端(如浏览器)的请求。它们是服务器端的组件,主要用来生成动态内容。 1.2 Servlet 生命周期:包括加载、初始化...
在这个"JavaServlet示例代码"中,我们可能会看到以下关键点: 1. **注册功能**: - 用户信息可能被存储在一个数据库中,因此需要与数据库的交互。这通常通过JDBC(Java Database Connectivity)实现,包括加载...
Java Servlet是Java编程语言中用于处理Web服务器与客户端交互的一种技术,主要应用于构建动态Web应用程序。Servlet是Java EE(企业版)的一部分,它允许开发者在服务器端创建强大的、可扩展的网络应用程序。以下是对...
Java Servlet API是Java Web开发的核心组件,用于创建和管理服务器端的动态Web应用程序。这个API定义了一组接口和类,允许开发者编写能够处理HTTP和其他网络协议的Java程序,这些程序通常被称为Servlets。Servlets是...
Java Servlet Specification Version 2.3 是一份详细的文档,它定义了Java Servlet技术的规范,用于创建Web应用程序。Servlet是一种基于Java的服务器端组件,由Web容器管理,用于生成动态内容。这个规范是Java 2平台...
Java Servlet 是Java平台上的一个核心技术,用于构建动态web应用程序。它是一个服务器端的API,提供了处理HTTP请求和响应的功能,使得开发者可以扩展web服务器的能力,实现与客户端的交互。本篇文章将深入探讨Java ...
Servlet API是Java Servlet的核心部分,提供了一系列的接口和类,供开发者用来构建可部署在Web服务器上的Java应用程序。这篇帮助文档详细阐述了这些接口和类的使用方法、功能以及它们之间的关系。 在Servlet API中...
JavaServlet帮助文档中的CHM文件是一个编译过的HTML帮助文档,它包含详细的API参考、教程、示例代码和常见问题解答,是开发者学习和查阅Servlet技术的重要资源。利用其内置的搜索功能,开发者可以快速找到所需的信息...
在本文中,我们将深入探讨Java Servlet的相关知识点,包括其概念、工作原理、生命周期、请求和响应处理,以及如何在实际开发中使用。 ## 1. Java Servlet 概念 Java Servlet 是一个Java类,它遵循Servlet API规范,...
Java Servlet是Java平台上的一个核心技术,主要用于构建动态web应用程序。Servlet是服务器端的Java小程序,它接收并响应来自客户端(通常是web浏览器)的请求,处理数据,然后返回响应。在深入理解Java Servlet网络...
Java Servlet是Java EE平台中的核心组件之一,用于构建动态web应用程序。Servlet是一个Java类,它扩展了服务器的功能,处理来自客户端(通常是web浏览器)的请求并返回响应。本教程将深入探讨Java Servlet的基础知识...
Java Servlet Programming是O'Reilly出版的一本关于Java Servlet编程的书籍,涵盖了Java Servlet的基础知识和高级主题。 本书共分为十四章,涵盖了Java Servlet的基础知识、Java Servlet的架构、Servlet生命周期、...
Java Servlet API是Java Web开发中的核心组件之一,它为服务器端的动态网页处理提供了标准的接口和类。这个API说明文档详细阐述了如何利用Java来构建动态、交互式的Web应用程序。下面将对Java Servlet API的一些关键...