severlet笔记整理
servlet 规范文档
servlet 规范文档
**Servlet 规范文档**
In the realm of web development, the Servlet specification plays a pivotal role in defining the standards for server-side programming. The Servlet API is a Java-based specification that outlines how web servers should interact with Java-based web applications. It is a crucial component of the Java EE (Java Platform, Enterprise Edition) technology stack, enabling developers to create dynamic, scalable, and secure web applications.
在Web开发领域,Servlet规范在定义服务器端编程标准方面起着举足轻
重的作用。Servlet API是一个基于Java的规范,它概述了Web服务器应如何与基于Java的Web应用程序进行交互。它是Java EE(Java平台企
业版)技术栈的重要组成部分,使开发人员能够创建动态、可扩展且安全的Web应用程序。
The Servlet specification details the lifecycle of a Servlet, from its initialization to its destruction. It specifies how a Servlet should handle requests and generate responses, including the handling of errors and exceptions. Furthermore, it outlines the security mechanisms that must be adhered to when developing Servlets, ensuring that sensitive data is protected and unauthorized access is prevented.
servlet的基本运行流程
Servlet的基本运行流程
Servlet是Java Web中的一种技术,能够处理来自客户端的请求并生成响应。它
是在Web服务器上运行的Java类,可以与容器进行交互。
下面将详细描述Servlet的基本运行流程的步骤和流程。
1. Servlet的生命周期
Servlet的生命周期包括以下三个阶段: - 初始化阶段(Initialization) - 服务阶段(Service) - 销毁阶段(Destroy)
1.1 初始化阶段
在Servlet类被加载到容器中时,(通常在Web应用程序启动时),容器会实例化Servlet对象,并调用其init()方法来进行初始化。该方法只会在Servlet生命周期中被调用一次。
1.2 服务阶段
一旦Servlet被初始化后,在其生命周期内,任何对Servlet的请求都会被容器处理。
当接收到一个客户端请求时,容器会创建一个新的线程,并调用Servlet的service()方法来处理该请求。service()方法会根据请求的类型(GET、POST等)来调用相应的方法(如doGet()、doPost()等)进行处理。
1.3 销毁阶段
当Web应用程序被关闭或Servlet容器被关闭时,容器会调用Servlet的destroy()方法来清除资源、释放内存和进行最后的操作,以完成Servlet的销毁过程。
2. Servlet运行流程
Servlet的运行流程包括以下几个步骤:
2.1 客户端发送请求
当客户端(如浏览器)向Web服务器发送一个HTTP请求时,请求首先会到达Web
servlet笔记整理(tomcat服务器)
servlet笔记整理(tomcat服务器)
目录
1.配置tomcat (2)
2.主动改变tomcat的端口 (2)
3.设置首页 (2)
4.虚拟目录配置 (2)
5.配置域名 (2)
6.配置默认主机 (2)
7.实现servlet接口的方式 (2)
8.在MyEclipse中配置tomcat (3)
9.使用通配符在servlet映射到URL中 (4)
10.servlet 中的配置 (5)
11.ServletConfig对象 (5)
12.http请求消息头 (6)
13.状态码原因叙述 (6)
14.http响应消息头详解 (7)
15.定时刷新Refresh使用 (7)
16.文件下载Content-Disposition (7)
17.缓存讲解 (8)
18.中文乱码处理 (8)
19.HttpServletRequest对象的详解 (9)
20.连接数据库 (9)
21.分页操作 (11)
22.md5加密算法 (11)
23.cookie说明 (12)
24.session生命周期设置 (12)
25.验证码生成算法 (12)
26.过滤器 (14)
27.控制session的销毁时间 (16)
28.ServletContext的应用 (16)
1.配置tomcat
1环境变量中添加JAVA_HOME= 指向你的jdk的主目录(并不是bin文件目录)
2在不配置JAVAHOME的前提下启动tomcat
在startup.bat的第25行中添加set JAVA_HOME=JKD路径
2.主动改变tomcat的端口
到conf/server.xml 文件中修改server.xml的端口号)protocol="org.apache.coyote.http11.Http11NioProtocol"
Servlet工作原理
Servlet工作原理
Servlet是Java编写的服务器端程序,用于处理客户端的请求并生成响应。它是Java Servlet API的一部分,可以在支持Java的Web服务器上运行。本文将详细介绍Servlet的工作原理。
1. Servlet容器
Servlet容器是Web服务器或应用服务器中的一个组件,用于管理和执行Servlet。它负责加载、初始化和销毁Servlet,以及处理客户端的请求和生成响应。常见的Servlet容器有Tomcat、Jetty和WebLogic等。
2. Servlet生命周期
Servlet的生命周期包括三个阶段:加载和初始化、请求处理和销毁。
2.1 加载和初始化
当Servlet容器启动时,会加载并初始化配置的Servlet。加载过程中,容器会查找并加载Servlet的类文件。初始化过程中,容器会调用Servlet的init()方法,用于执行一些初始化操作,如读取配置文件、建立数据库连接等。
2.2 请求处理
当客户端发送请求时,Servlet容器会创建一个Servlet实例来处理该请求。容器会调用Servlet的service()方法,并将请求和响应对象作为参数传递给该方法。在service()方法中,开发人员可以根据请求类型(GET、POST等)进行相应的处理逻辑,如读取请求参数、调用业务逻辑处理数据等。
2.3 销毁
当Servlet容器关闭或重新加载Web应用程序时,会销毁所有已加载的Servlet 实例。容器会调用Servlet的destroy()方法,开发人员可以在该方法中执行一些清理操作,如关闭数据库连接、释放资源等。
Servlet学习笔记(一)
Servlet学习笔记(一)
1.一个Servlet程序就是一个实现了特殊接口的Java类,它由支持servlet(具有servlet引擎)的web服务器调用和启动运行。
一个Servlet程序负责处理它所对应的一个或一组url地址的访问请求,并接收客户端发出的访问请求信息和产生响应内容。
2.所有的servlet(自定义的)都必须实现servlet接口(javax.servlet.Servlet)。由于Servlet接口中有很多方法不需要实现,因此可以继承GenericServlet类。
GenericServlet实现了servlet接口的基本特征和功能。
javax.servlet.http.HTTPServlet类继承了GenericServlet类,并在其基础上进行了一些对HTTP 协议的扩充。
3.客户端每次访问一个支持HTTP的Servlet程序时,Servlet引擎都将调用Servlet的service 方法来进行处理。
HTTPServletRequest用于封装HTTP请求,HTTPServletResponse用于封装HTTP响应。HTTPServletResponse对象的getWrite()方法可以获得一个文本输出流对象。其内容可以作为响应消息的内容。
4.Servlet的注册与运行:
(1).Servlet程序必须通过Servlet引擎来启动运行,并且存储目录有特殊要求,通常需要存储在<Web应用程序>/WEB-INF/classes/目录中。
(2).Servlet程序必须在Web应用程序的web.xml文件中进行注册和映射其访问路径,才可以被servlet引擎加载和被外界访问。
servlet常用方法
servlet常用方法
Servlet是在服务器端运行的Java程序,可以接收客户端请求并做出响应。Servlet 常用的方法包括:
1、init(ServletConfig config): 初始化方法,在Servlet第一次创建时调用,且只调用一次。
2、service(ServletRequest request, ServletResponse response): 服务方法,处理客户端的请求,返回响应给客户端。这个方法在接收到一个请求时被调用一次。
3、destroy(): 销毁方法,当服务器停止或者卸载Servlet时调用,仅执行一次。
4、getServletConfig(): 返回当前Servlet的配置对象。
5、getServletInfo(): 返回关于Servlet的描述信息。
6、getAttribute(String name): 获取名称为name的属性值。
7、setAttribute(String name, Object object): 在请求中保存名称为name的属性。
8、getInitParameter(String name): 返回初始化参数name的值。
9、getServletContext(): 返回当前Servlet的上下文。
10、getMajorVersion(), getMinorVersion(): 返回主、次版本号。
11、getEffectiveMajorVersion(), getEffectiveMinorVersion(): 返回实际主、次版本号。
简述 servlet 的概念和技术特点。
简述servlet 的概念和技术特点。
解析:
servlet 的概念:Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态内容。
Servlet 技术具有如下特点:
1.方便:Servlet 提供了大量的实用工具例程,如处理很难完成的HTML 表
单数据、读取和设置HTTP 头,以及处理Cookie 和跟踪会话等。
2.跨平台:Servlet 使用Java 类编写,可以在不同的操作系统平台和不同的
应用服务器平台运行。
3.灵活性和可扩展性强:采用Servlet 开发的Web 应用程序,由于Java类
的继承性及构造函数等特点,使得应用灵活,可随意扩展。
servlet的init方法
servlet的init方法
一、init()方法的作用
init()方法是Servlet生命周期中的一个阶段,在Servlet被容器初始化时调用。它的主要作用是进行一些初始化工作,例如加载配置文件、建立数据库连接等。通过init()方法,我们可以在Servlet启动时完成一些必要的准备工作,确保Servlet在处理请求时能够正常运行。
二、init()方法的使用方式
在Servlet类中,我们需要重写init()方法,以实现自定义的初始化操作。init()方法有一个参数,类型为javax.servlet.ServletConfig,用于获取Servlet的配置信息。在init()方法中,我们可以通过调用getInitParameter()方法获取web.xml文件中配置的初始化参数,从而获取一些必要的配置信息。
例如,我们可以在web.xml中配置数据库的连接信息,然后在init()方法中读取这些配置信息,建立数据库连接。这样,在Servlet启动时,我们就可以预先建立好数据库连接,以提高后续处理请求的效率。
三、init()方法的注意事项
1. init()方法在Servlet的整个生命周期中只会被调用一次。当Servlet第一次被请求时,容器会调用init()方法进行初始化工作。之后,只要Servlet处于运行状态,容器就不会再次调用init()方法。
2. init()方法在处理请求之前被调用,因此在init()方法中执行的操作不会对每个请求产生影响。例如,在init()方法中建立的数据库连接是共享的,多个请求可以共享同一个连接。
Servlet常见注解Filter常见注解
Servlet常见注解Filter常见注解
- name:指定Servlet的名称。
- value/urlPatterns:指定Servlet的访问路径,可以是一个字符
串数组。
- initParams:指定Servlet的初始化参数。
- asyncSupported:指定Servlet是否支持异步处理,默认为false。
- description:指定Servlet的描述信息。
- displayName:指定Servlet的显示名称。
- value:指定HTTP方法,可以是一个字符串数组。
- emptyRoleSemantic:指定当没有指定角色时的语义,默认为PERMIT。
- rolesAllowed:指定允许访问该Servlet的角色,可以是一个字符
串数组。
- transportGuarantee:指定安全通信使用的传输保证,可以是NONE、INTEGRAL或CONFIDENTIAL。
- fileSizeThreshold:指定上传文件的大小阈值,默认为0,表示
任何文件都会被写入磁盘。
- maxFileSize:指定上传文件的最大大小,默认为-1,表示不限制
文件大小。
- maxRequestSize:指定一次请求的最大大小,默认为-1,表示不限
制请求大小。
- location:指定保存上传文件的目录路径。
Filter常见注解:
- filterName:指定Filter的名称。
- value/urlPatterns:指定Filter的访问路径,可以是一个字符串
数组。
- initParams:指定Filter的初始化参数。
新概念SQL—server学习笔记
新概念SQL_SERVER2005教程学习笔记
第一章、数据库基础
1.1概述
计算机的出现,标志着人类开始使用机器来存储和管理数据。在20世纪50年代出现了文件管理系统,即以文件形式来管理和处理数据;在20世纪60年代出现了数据库管理系统。
数据库管理系统与文件管理系统相比有以下特点:
●数据的结构化
●数据共享
●数据独立性
●可控冗余度
数据库发展经历了3个阶段:网状数据库、层次性数据库和关系型数据库。常见的数据库都是关系型,包括SQL SERVER、DB2、ORACLE、SYBASE、Informix等。
1.2数据库模型
数据库的整体结构可分为3中数据模型:网状、层次型和关系型。其中前两类又称为格式化模型。
1.2.1网状
网状数据库模型将每个记录当成一个节点,节点和节点之间可以建立关联,形成一个复杂的网状结构。
网状数据库的优点是避免了数据的重复性,缺点是关联性比较复杂,尤其是当数据库变得越来越大时,关联性的维护会非常麻烦。
1.2.2层次
层次性数据库模型采用树状结构,依据数据的不同类型,将数据分门别类,存储在不同的层次之下。
层次性数据库模型的优点是数据结构类似金字塔,不同层次之间的关联性直接而且简单,缺点是,由于数据纵向发展,横向关系难以建立,数据可能会重复出现,造成管理维护的不便。
1.2.3关系型
关系型数据库模型是以二维矩阵来存取数据的,行和列形成一个关联的数据表(Table)。
1.3数据库系统
一个数据库系统(database system)可以分为数据库和数据库管理系统(DBMS)。简单的说,数据库即是一组经过计算机整理后的数据,存储在一个或者多个文件中,而管理这个数据库的软件就称之为数据库管理系统。
servlet概念
servlet概念
Servlet是Java编写的运行在服务器端的应用程序。它基于客
户端-服务器模型,接收来自客户端的请求,并生成动态的HTML网页或其他类型的响应。Servlet通常用于扩展Web服
务器的功能,例如处理用户注册、登录、数据查询等。
Servlet是Java EE技术的一部分,它遵循Java Servlet API规范。它可以运行在支持Servlet规范的Web服务器(如Tomcat、Jetty等)中。
Servlet与普通的Java类有所不同。它必须实现Servlet接口或
继承自抽象类GenericServlet或HttpServlet。Servlet可以通过HTTP协议处理用户请求,也可以通过其他协议(如FTP、SMTP)处理其他类型的请求。
Servlet主要具有以下特点:
1. 可以处理客户端的请求并生成响应,例如生成动态的
HTML网页、响应XML数据等。
2. Servlet是多线程运行的,每个请求都会由不同的线程处理。
3. 可以与数据库、文件系统等后端资源进行交互,实现数据的增删改查操作。
4. 可以获取和设置请求的参数、头信息等。
5. 提供了一些生命周期方法,如初始化(init)、销毁(destroy)等,用于完成一些初始化和清理工作。
总之,Servlet提供了一种可靠、可扩展的方式来处理Web请求,并生成动态的响应给客户端。
java serverlet类结构
java serverlet类结构
Servlet(服务器端Java程序)是Java编程语言开发的一个Web
组件,用于处理HTTP请求和响应。它是在服务器上运行的Java类,
通过Web容器来创建和管理。Servlet提供了一种处理客户端请求的简单且可扩展的方法,是实现Web应用程序的核心组件之一。
Servlet类结构包括以下几个主要组成部分:生命周期方法、初始化参数、上下文、请求和响应。下面将详细介绍这些结构。
1.生命周期方法
Servlet生命周期方法包括init()、service()和destroy()。
init()方法在Servlet被创建时被调用,用于初始化Servlet的资源。service()方法用于处理客户端的请求,并生成响应。可以根据不同的HTTP方法(GET、POST等)来处理请求。destroy()方法在Servlet被
销毁之前被调用,用于清理Servlet的资源。
2.初始化参数
Servlet可以通过初始化参数进行配置。初始化参数是在部署描述符中定义的,可以在Servlet的初始化方法中访问。这些参数通常用于配置数据库连接、日志配置等应用程序特定设置,以及其他特定于Servlet的配置。
3.上下文
Servlet可以访问上下文对象,该对象是Servlet容器提供的。上下文对象提供了访问Servlet运行环境的方法,如获取Servlet配置信息、共享数据等。ServletContext类是一个接口,用于与Servlet 的上下文交互。
4.请求
Servlet通过HttpServletRequest对象访问客户端请求的信息。可以从该对象中获取请求的URL、HTTP方法、请求参数、请求头等信息。还可以使用该对象处理表单提交、文件上传等操作。
severlet原理
severlet原理
Servlet原理是Web应用程序的一个关键概念,通过这个概念,
可以做到更有效地处理用户请求以及动态生成内容。在本文中,我们
将详细讨论Servlet原理及其重要性,以及Servlet如何与Web服务
器进行交互,实现动态Web应用程序。
一、Servlet原理是什么?
Servlet是Java编写的服务器端程序,在常规的Web应用程序中,Servlet被用来动态生成内容,处理表单数据以及连接数据库。相比静态页面,Servlet可以让Web应用程序更加人性化,提供更好的用户体验。
Servlet原理可以分为四个阶段:初始化、服务开始、服务方法
调用和销毁阶段。
1. 初始化阶段:在这个阶段中,Servlet容器加载并初始化Servlet类。在这个阶段,Servlet容器执行init()方法,让
Servlet知道如何运行,并提供任何必要的配置信息。在这个阶段,Servlet会对资源进行一些实例化或者设置一些数据,以便在稍后的处理中使用。
2. 服务开始阶段:这一阶段是Servlet正式接到客户端请求开
始执行业务逻辑的状态。当客户端向服务器发送一个请求时,Servlet
容器创建一个新的线程来处理该请求,并调用service()方法。在此阶段,Servlet会解析HTTP请求,并调用响应的HTTP方法来处理请求。
3. 服务方法调用阶段:在这一阶段,Servlet根据HTTP请求返
回响应。Servlet可以调用多种处理方法来动态生成内容,例如doGet ()方法,doPost()方法,doPut()方法等。根据不同的请求类型,Servlet将对应的响应返回给客户端。
serverlet的工作原理
serverlet的工作原理
Servlet是Java Web开发中的一个重要组件,它是运行在Web
服务器上的Java程序,用于处理客户端(浏览器)发送的请
求并返回响应。Servlet的工作原理如下:
1. 客户端发送请求:当用户在浏览器中访问某个URL时,浏
览器会向Web服务器发送一个HTTP请求。
2. Servlet容器接收请求:Web服务器中的Servlet容器(例如Tomcat)接收到请求,并根据请求的URL将其分派给相应的Servlet进行处理。
3. 加载Servlet:Servlet容器根据请求的URL查找并加载相应
的Servlet类。每个Servlet类都需要继承自
javax.servlet.http.HttpServlet,并通过注解或配置文件与URL
进行映射。
4. 初始化Servlet:Servlet容器在加载Servlet类后,会调用其init()方法进行初始化操作。在这个方法中,Servlet可以进行
一些初始化配置,例如读取配置文件、建立数据库连接等。
5. 处理请求:一旦Servlet被初始化后,Servlet容器会创建一
个新的线程来处理该请求。Servlet类中的service()方法负责处
理请求,并根据请求的类型(GET、POST等)调用对应的doGet()、doPost()等方法来具体处理请求,例如获取请求参数、验证用户身份等。
6. 生成响应:Servlet处理请求后,可以生成相应的数据,并将其封装成一个HTTP响应,包括响应头和响应体。可以通过设置响应头来控制缓存、重定向、设置Cookie等。
Servlet教程
17
HELLOWORDSERVLET
编写一个HelloWordServlet类
18
部署HELLOWORLDSERVLET
在web.xml中部署Servlet后才能够使用Servlet
19
简单 SERVLET 的结构
需要导入的包
用于处理 GET 请 求的方法
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ClientServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) 这是一个显示 HttpServletRequest throws IOException, ServletException 接口一些 和 HttpServetResponse { 方法的简单 Servlet
23
总结 2-2
Servlet 的生命周期包含三种方法,分别是 init()、service() 和 destroy() Servlet 既可以扩展 Geຫໍສະໝຸດ BaiduericServlet 类,也可 以扩展 HttpServlet 类 MyEclipse 是用于开发 Web 应用程序(如 Servlet、Applet 和 JSP)的一种非常有用的 软件
Java_WEB(JSPSeverlet)上课笔记
Java_WEB(JSPSeverlet)上课笔记
http协议:访问请求----->响应的过程一问一答
http请求头请求的方式,协议,URL
http响应头
Web容器(服务中间件):
tomcat 开源的
WebLogic IBM
Resin
JBoss
WebSphere
下载安装tomcat
安装是1.输入administrator用户及密码
2.指定jre java的虚拟机
注:tomcat默认商品为8080端口,
查看当前主机端口的使用情况: netstat -a
tomcat的目录结构:
%tomcat_home%\bin 存放应用程序启动,关闭脚本
%tomcat_home%\conf tomcat配置目录context.xml server.xml tomcat-users.xml web.xml
%tomcat_home%\lib 存放所有项目都可以使用的jar包
%tomcat_home%\logs 存放tomcat日志
%tomcat_home%\webapps 存放所有项目
%tomcat_home%\work 所有jsp文件转换成class文件存放的地方
修改server.xml
修改目的:为了解决使用HTTP Get方法传递中文参数乱码的问题
修改context.xml
把修改成
修改目的:当Web应用中的文件或者web.xml文件修改后,Tomcat服务器会自动重新加载当前Web应用,避免重新启动Tomcat。
tomcat-users.xml 配置管理tomcat用户
tomcat配置到MyEclipse中:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
xml 配置 :
表单的POST提交 (method="post")
特点:
1.POST请求 服务器会自动调用servlet的 doPost()
2. 不会将要传给服务器的数据添加到地址栏 相对比较安全 理论上参数传递的多少不受限制.
get请求和post请求:
get请求会要求服务器 立即处理该请求 不会形成请求队列.
问题: 对于servlet的 doGet doPost 都是服务器自动调用的, 那么 服务器怎么处理?
服务器会先在 HttpServlet中 调用service() 获得请求方式,判断请求方式的类型,调用相应的方法.
响应: 转发 重定向
转发: 组件A 将未完成的任务 和 请求及响应对象 一同传递给 组件B .
特点:
1. 用户发出请求到获得结果 ,只发送一次数据.
2. 转发属于 服务器端跳转
重定向: 组件A 修改 浏览器的路径 使 浏览器向 组件B 发送请求
1.用户发出请求到获得结果,至少发送两次请求
2.重定向 属于 客户端跳转
//服务器调用 doGet / doPost 取决于 请求方式
//请求方式 被封装到了 请求对象中 request.getMethod() ---post
@Override
/*protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("这是service....");
String method=req.getMethod();
if ("GET".equals(method)) {
doPost(req, resp);
}else if ("POST".equals(method)) {
doPost(req, resp);
}
}*/
//doGet
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//获得登录页面的数据 从请求对象获得
String name=request.getParameter("userName");//根据标签的name属性值 获得 标签的值
String password=request.getParameter("password");
System.out.println("GET 账号:"+name+" 密码:"+password);
}
//doPost
// 请求对象中 封装的请求方式 = post request.getMethod()
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//获得登录页面的数据 从请求对象获得
String name=request.getParameter("userName");//根据标签的name属性值 获得 标签的值
String password=request.getParameter("password");
System.out.println("POST 账号:"+name+" 密码:"+password);
//假设 账号--TOM 密码--123 成功 否则失败
// 告诉用户登录 结果 响应 : 转发 重定向
if ("TOM".equals(name)&&"123".equals(password)) {
//使用转发技术 回复 用户
request.getRequestDispatcher("SuccessServlet").forward(request, response);//将当前请求和响应对象 一起 传递
给下一个组件
} else {
// 重定向
response.sendRedirect("FailureServlet");//参数: URL
//告诉浏览器 向某个地址 再次发送数据 属于直接访问
//修改 地址栏上的 路径: http://localhost:8080/servlet/FailureServlet 然后提交
}
}
//服务器调用 doGet / doPost 取决于 请求方式
//请求方式 被封装到了 请求对象中 request.getMethod() ---post
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//out.println--向浏览器/网页 打印信息 System.out.print()---向控制台打印信息
页面向服务器传递数据 : 将数据封装到请求对象中
服务器向页面传递数据 : 将数据封装到响应对象中
页面之间传递数据 : URL 其他
服务器中 组件之间 传递数据: 容器
name=张三
servletA ..转发.> servletB ---重定向--> servletC
为什么要使用容器: 解决服务器端组件之间传递数据问题.
Servlet的容器: request容器 session容器 application容器
request对象:
1.服务器将客户端的数据封装到 request对象
2.request也作为一个容器对象,存放数据
request容器:
向容器中放入数据:request.setAttribute("属性名称","值"); // 键名--->值
取出容器中的数据:request.getAttribute("属性名称");
范围: 同一个请求和响应中(同一个请求对象).
session容器:
向容器中放入数据:session对象.setAttribute("属性名称","值"); // 键名--->值
取出容器中的数据:session对象.getAttribute("属性名称");
范围: 服务器会给浏览器分配一个sessionID,之后根据sessionID判断是否为同一个用户.当浏览器不关闭 不重启 不超过sessionID的保存, session将不会失效.
session容器的有效范围: 浏览器不关闭 不重启 session不超时.
application容器:
向容器中放入数据:application对象.setAttribute("属性名称","值"); // 键名--->值
取出容器中的数据:application对象.getAttribute("属性名称");
范围: 服务器从开始 直到 停止为止.
区别:
三个容器: 有效范围不同.
相同点:
容器对象.setAttribute("属性名称","值"); // 键名--->值
容器对象.getAttribute("属性名称");
容器对象.removeAttribute("属性名称");
1.getAttribute用来获取用setAttribute设定的属性值
2.getParameter的返回值类型为string;getAttribute的返回值类型是object(即可以传递对象)
3.request.getParameter()方法获取从Web客户端传到Web服务器端的HTTP请求数据;
request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部(服务器端),
在具
有转发关系的Web组件之间共享。即request.getAttribute()方法返回request范围内存在的对象,
而request.getParameter()方法是获取http提交过来的数据。
request容器:
只能使用同一个request对象,进行容器中数据的读取.如果不是同一request对象,
就无法用当前的request对象取出另一个request容器中的数据.
session容器:
只要浏览器不关闭,不新打开浏览器,那么无论是否发生了转发或者重定向,
都可以取出session容器中的数据.
servletContext对象:
从服务器开启,并向容器中存放数据开始,到服务器结束. 这段时间内,无论是否转发,
重定向,重启浏览器,等 都可以访问到该容器内的数据.
数据的传递:
页面-->服务器,使用请求对象传递 服务器将数据封装到了请求对象中
服务器中的各组件之间: 容器 将数据放入到特定的容器中,根据容器的有效范围,供其他组件进行访问.
Servlet容器: request容器 session容器 application容器
request容器:同一个请求过程中有效(同一个请求对象). 请求---->取出 ----->取出---> 响应 ---->取出不到了
request不仅是请求对象,还是一个容器.
特点: 与请求对象有关.
session容器: 同一个会话中.只要客户的浏览器不关闭,不重启,session不失效(默认30分钟),在同一个项目的任何位置都可以访问到session容器中的数据.
特点: 与转发和重定向无关,与浏览器的状态有关.
application容器: 从服务器开启并产生向容器中放入数据开始,到服务器关闭时结束.在同一个项目的任何位置都可以访问到application容器中的数据.
特点:与转发,重定向,浏览器无关. 与服务器的状态有关.
共同点:
容器对象.setAttribute(参数名,值);
容器对象.getAttribute(参数名);
容器对象.removeAttribute(参数名);
区别: 容器中数据的有效范围不同.
网页操作数据库:
//设置编码
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//获得type参数 判断 业务类型
String type=request.getParameter("type");
if ("addStu".equals(type)) {
addStu(request, response);
}else if ("delStu".equals(type)) {
delStu(request, response);
}else if ("upStu".equals(type)) {
upStu(request, response);
}else if ("selStu".equals(type)) {
selStu(request, response);
}
}
private void selStu(HttpServletRequest request, HttpServletResponse response) throws IOException {
//默认查询所有数据
String sql="select * from t1";
List list=null;
try {
list=stu.select(sql,new Object[0]);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
if (list!=null) {
out.print("
ID | >姓名 | 密码 | 性别 | 年龄 | 地址 |
---|---|---|---|---|---|
"+map.get("id")+" | "+map.get("name")+" | "+map.get("password") +" | "+map.get("sex")+" | "+map.get("age")+" | "+map.get("address")+" |
} else {
out.print("对不起,没有您要查询的数据...");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void upStu(HttpServletRequest request, HttpServletResponse response) throws IOException {
//获得数据
String oldname=request.getParameter("oldname");
String name=request.getParameter("name");
String password=request.getParameter("password");
String sex=request.getParameter("sex");
String age=request.getParameter("age");
String address=request.getParameter("address");
Object[] param=new Object[]{name,password,sex,age,address,oldname};
//执行添加
int i=stu.update(param);
//处理执行结果
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
if (i!=-1) {
out.println("修改成功,3秒后跳转到主页..");
} else {
out.println("修改失败,3秒后跳转到主页..");
}
response.setHeader("refresh", "2;url=main.jsp");
}
private void delStu(HttpServletRequest request, HttpServletResponse response) throws IOException {
String name=request.getParameter("name");
Object[] param=new Object[]{name};
int i=stu.delete(param);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
if (i!=-1) {
out.println("删除成功,3秒后跳转到主页..");
} else {
out.println("删除失败,3秒后跳转到主页..");
}
}
private void addStu(HttpServletRequest request, HttpServletResponse response)
throws IOException {
//获得数据
String name=request.getParameter("name");
String password=request.getParameter("password");
String sex=request.getParameter("sex");
String age=request.getParameter("age");
String address=request.getParameter("address");
Object[] param=new Object[]{name,password,sex,age,address};
//执行添加
int i=stu.insert(param);
//处理执行结果
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
if (i!=-1) {
out.println("添加成功,3秒后跳转到主页..");
} else {
out.println("添加失败,3秒后跳转到主页..");
}
response.setHeader("refresh", "2;url=main.jsp");
}
//查询 : 查询所有 条件查询(检验登录 )
public List select(String sql,Object[] param) throws SQLException {
//加载驱动
//获得数据库连接
//创建执行对象
//使用执行对象执行SQL命令
//处理结果
//关闭资源
db.doSQL(sql,param);
ResultSet resultSet=db.getRS();
List list=null;
if (resultSet!=null) {//只要查询正常执行 都会返回一个集合 即使是空集合
st();//将指针移动到最后一行
int i=resultSet.getRow();//获得当前行的 行索引
if (i>0) {//至少含有一条数据
list=new ArrayList();//用来存放map 每个map代表一条数据
resultSet.beforeFirst();//将指针移动到最前端
while(resultSet.next()){//将指针向后移动一次 如果含有数据 返回true 否则 false
Map map=new HashMap();
String id=resultSet.getString("id");
String name=resultSet.getString("name");//根据字段的名称 获的当前行 字段的值
String sex=resultSet.getString("sex");
String password=resultSet.getString("password");
String age=resultSet.getString("age");
String address=resultSet.getString("address");
map.put("id",id);
map.put("name",name);
map.put("password",password);
map.put("sex",sex);
map.put("age",age);
map.put("address",address);
list.add(map);
//System.out.println("id:"+id+" name:"+name+" sex:"+sex+" age:"+age+" address:"+address);
}
} else {//没有任何数据 空集合
System.out.println("对不起,没有您要查询的数据...");
}
} else {
System.out.println("异常....");
}
db.getClose();
return list;
}
}