Servlet学习笔记
来源:互联网 发布:win10精简优化工具 编辑:程序博客网 时间:2024/06/05 11:40
Servlet简介
- Servlet是服务器小应用程序
- 用来完成B/S架构,客户端请求的相应处理
- 平台独立,性能优良,能以线程方式运行
- Servlet API为Servlet提供了统一的编程接口
- Servlet一般在容器中运行
Tomcat的目录结构
- bin/ :二进制可执行文件和脚本
- common/ :CataLina本身和web应用可加载的类目录
- conf/ :配置文件目录
- log/ :日志目录
- server/ :服务器所需的类文件目录
- shared/ :web APP共享的类库
- webapps/ :web应用所存放的目录applications
- work/ :Tomcat的工作目录(存放JSP产生的class文件)
- temp/ :存放临时产生的文件
Tomcat的配置文件
- conf/server.xml :服务器的主配置文件
- conf/web.xml :定义所有web应用的配置
- conf/tomcat-user.xml :定义 了Tomcat的用户信息
Servlet的生命周期
生命全过程:分为5个阶段:加载、创建、初始化、处理客户请求、卸载
(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet
(2)创建:通过调用servlet构造函数创建一个servlet对象
(3)初始化:调用init方法初始化
(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求
(5)卸载:调用destroy方法让servlet自己释放其占用的资源
- 加载 :classLoader
- 实例化 :new
- 初始化 :init(ServletConfig)
- 处理请求 :service doGet,doPost
- 退出服务:destory()
只有一个对象
请求处理方法(分别对应http协议的7种请求)
- doGet:响应get请求,常用
- doPost:响应post请求,常用
- doPut:用于http1.1协议
- doDelete:用于http1.1协议
- doHead:用于http1.1协议,仅响应get请求的头部
- doOptions:用于http1.1协议
- doTrace:用于http1.1协议
在非分布的情况下,通常一个Servlet在服务器上只有一个实例
cookie
- Http协议的无连接特性要求出现的一种保存C/S间状态的机制
- cookie:保存到客户端的一个文本文件,与特定客户相关
- cookie以“名-值”对的形式保存数据
- 创建cookie:new cookie(name,value)
- cookie分为两种:
属于窗口/子窗口
属于文本 - 一个Servlet或JSP设置的cookie能够被同一路径下面或子路径下面的Servlet或JSP读到(路径=URL,路径!=真实文件路径)
- 可以使用cookie的setXXX方法设定一些相应的值
setName(String name);/getName()
setValue(String name);/getValue()
setMaxAge(int age);/getMaxAge() —设置cookie的生存时间,如果没有设置生存时间,则浏览器窗口关闭之后,cookie自动删除
利用HttpServletResponse的addCookie(cookie)方法将它设置到客户端
利用HttpServletRequest的getCookie()方法来读取客户端的所有cookie,返回一个cookie数组
session会话
- 在某段时间一连串客户端与服务器端的”交易”
- 在Servlet/JSP中,如果浏览器不支持Cookie,可以通过URL重写来实现,就是将一些额外数据追加到表示回话的每个URL末尾,服务器在该标示符与其存储有关的会话数据之间建立关联(即有两种方式建立session:利用cookie或者利用URL重写)
- 可以通过程序来终止一个会话,如果客户端一定时间内没有操作,服务器会自动终止会话
- 通过HttpSession来读写session
- 规则:
如果浏览器支持cookie,创建session时会被sessionID保存在cookie里
如果浏览器不支持cookie,必须自己编程使用URL重写的方式实现session
response.encodeURL()
转码,URL后面加上sessionID
session不像cookie拥有路径访问的问题,同一个application下的servlet/JSP可以共享同一个session,前提是同一个客户端窗口
application
- 用于保存整个WebApplication的生命周期内都可以访问的数据
- 在API中表现为ServletContext
- 通过HttpServlet的ServletContext方法可以拿到
- 通过ServletContext的get/setAttribute方法取得/设置相关属性
Servlet中使用Bean
- 属性名称第一个字母必须小写,比如:private protectedID
- 一般具有getters,setters
- 不应具有GUI表现
- 一般用来实现某一业务逻辑或取得特定结果
JSP
- JSP—-Java Server Pages
- 拥有Servlet的特性与优点(本省就是一个Servlet)
- 直接在HTML中内嵌JSP代码
- JSP程序由JSP Engine先将它转换成Servlet代码,接着将其编译成类文件载入执行
- 只有当客户端第一次请求JSP时,才需要将其转换、编译
- 优点:
优良的性能,由于CGI,PHP,ASP
平台无关性:操作系统无关,Web服务器无关
可扩展性:tag的扩展机制,简化页面开发
jsp:include/jsp:param
- 用于动态包含JSP程序或HTML文件等
- 除非这个指令会被执行到,否则它是不会被Tomcat等JSP Engine编译
- 格式:
//jsp:include/jsp:param <jsp:include page="URL" flush="true" /> <jsp:include page="URL" flush="true"> <jsp:param name="ParamName" value="paramValue" /></jsp:include>//include编译指令<%@ include file="URL" %>
jsp:param用来设定include文件时的参数和对应的值
和编译指令include的区别:
include编译指令是在jsp程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行,而include指令在转换时期是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译嵌入
include不能带参数,而 jsp:include 可以
jsp:forward/jsp:param
- 用于将一个jsp内容传送到page指定的jsp程序或者Servlet中处理(URL)
- 格式
<jsp:forward page="URL" flush="true" /><jsp:forward page="URL" flush="true"> <jsp:param name="paramName" value="paramValue" /></jsp:forward>/*<jsp:forward>与response.sendRedirect的区别:<jsp:forward>使用同一个requestresponse.sendRedirect使用不同的request*/
jsp:param用于指定参数和其对应值
jsp:useBean
- 通过jsp:useBean,可以在JSP中使用定义好的Bean
- 基本要素:
必须要有一个不带参数的构造器。在JSP元素创建Bean时会调用空构造器
Bean类应该没有任何公共实例变量,也就是说,不允许直接访问实例变量,变量名称首字母必须小写
通过getter/setter方法来读写变量的值,并且将对应的变量首字母改成大写 - 基本用法:
<jsp:useBean id="beanName" scope="page | request | session | application" class="package BeanClass" type="typeName" /><jsp:useBean id="beanName" scope="page | request | session | application" class="package BeanClass" type="typeName"> <jsp:setProperty...> <jsp:getProperty...></jsp:useBean>id:对象实例名称scope:Bean作用范围,默认为page,对整个jsp有效type:Bean实例类型,可以是本类或其父类,或实现的接口,默认为本类scope各项参数的意义:page:仅涵盖使用JavaBean的页面request:有效范围仅限于使用JavaBean的请求session:有效范围在用户整个连接过程(整个会话阶段均有效)application:有效范围涵盖整个应用程序,也就是对整个网站均有效
0 0
- Servlet学习笔记 Servlet原理
- 《Servlet学习笔记》Servlet 简介
- Servlet学习笔记
- servlet学习笔记
- Java Servlet学习笔记
- Servlet学习笔记
- servlet 学习笔记(1)
- servlet 学习笔记(2)
- Servlet学习笔记
- Servlet学习笔记
- JSP/Servlet学习笔记
- servlet学习笔记
- Servlet学习笔记
- SERVLET学习笔记
- servlet学习笔记
- Servlet 学习笔记
- servlet学习笔记
- servlet学习笔记
- TCP套接字的数据传输
- Mac OS X上使用Wireshark抓包
- 套接字地址结构及其创建
- HOJ 1017 模拟约瑟夫问题
- 网络模型与协议
- Servlet学习笔记
- 出错处理
- 第三周项目猜数字
- Mac版下Mysql错误修正
- 互斥锁和条件变量
- msup 蚂蚁开放日游记之 分布式业务下测试分析和自动化
- 魔方阵
- 线程的终止和私有数据
- linux 线程属性函数总结