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有效typeBean实例类型,可以是本类或其父类,或实现的接口,默认为本类scope各项参数的意义:page:仅涵盖使用JavaBean的页面request:有效范围仅限于使用JavaBean的请求session:有效范围在用户整个连接过程(整个会话阶段均有效)application:有效范围涵盖整个应用程序,也就是对整个网站均有效
0 0