servlet笔记整理

一、简介

servlet是一段服务器程序,它是客户端和服务端的 中间层。可以通过servlet往页面动态展示当前时间,可以从客户端接受数据存到数据库,或者从数据库取数据到页面展示给客户。

二、应用程序的体系结构

1、C/S(Client/Server)

  特点:1必须安装特定软件;

      2维护升级麻烦;

2、B/S(Browser/Server)

  特点:1不需要安装特定软件

       2维护升级相对简单

       3使用的是http协议,方便和internet整合

三、

(1)实现servlet接口  必须实现接口所有方法

(2)继承GenericServlert 必须实现service抽象方法,(和协议无关)

(3)继承HttpServlet 通常覆盖和http协议相关的service方法 (注意必须在JavaProject导入servlet-api.jar)

四、请求servlet方式

1地址栏请求2超链接请求3表单请求

五、servlet生命周期

调用的方法     调用时间        调用次数

实例化  构造方法      第1次请求           1

初始化  init           构造之后,接着调用   1

服务    service        client请求到达        N

销毁    destroy        server停止            1

特殊情况:

当在<servlet>中定义了<load-on-startup>时,实例化和初始化阶段 会被提前到tomcat启动时进行。

1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。

2)它的值必须是一个整数,表示servlet应该被载入的顺序

2)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;

3)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。

4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。

5)当值相同时,容器就会自己选择顺序来加载。

所以,<load-on-startup>x</load-on-startup>,中x的取值1,2,3,4,5代表的是优先级,而非启动延迟时间。

六如果定义了成员变量servlet不安全(一个用户一个线程一个servlet对象,多个用户多个线程,多个servlet对象,共享成员变量,),不定义则安全。

七redirect和forward

1forward:

// 1 获取client数据

// 2 调用业务类的方法,实现“XXX”功能

// 3 根据结果,跳转

RequestDispatcher rd = request.getRequestDispatcher(“/url-pattern”);

rd.forward(request, response);

--传递数据

// 往request中设置命名属性(在ActionServlet中)

request.setAttribute(“name”, obj);

// 从request中获取命名属性(在ViewServlet中)

Object obj = request.getAttribute(“name”);

2redirect

1) 传递数据

response.sendRedirect(“/web应用名/url-pattern?xx=111”);

3区别

Forward: 服务器内部的转 共享同一个request 地址栏不变 响应的永久转 只能转站内

重定向:client的跳转  不共享request f 地址栏改变 响应永久转 可以转站外

使用场景区分:

需要往后传递数据 ,必须使用 forward;

除此以外 重定向优先!!!

八session和cookies

会话跟踪技术: 用于解决 http协议的无状态。

一、Cookie

Cookie,是 server 往 client 写的一小段文本信息,由2部分构成:name 和 value。

1、server往client写cookie

Cookie c = new Cookie(“name”, ”tom”);

c.setMaxAge(n);  // 设置cookie的有效时间(秒)

n>0   // n秒后cookie失效

n=0   // 删除当前cookie

n<0   // cookie的有效期 和 浏览器绑定,IE关 则cookie失效

response.addCookie(c);

2、读取client的cookie

Cookie[] cs = request.getCookies(); // 没有cookie 返回null

二、Session【重点】

会话,同1个client 和 server 建立起连接后的 多次请求/响应 过程。

HttpSession session = request.getSession(true);

True: 如果当前client没有session 则创建;有session 则直接使用。

False:                          则返回null;有 则直接使用。

1、作用域范围

开始:client第1次请求server 并且遇到getSession(true)

结束:超时、调用invalidate()方法。

使用:session.setAttribute(“name”, obj);  //设置命名属性

obj = session.getAttribute(“name”); // 获取命名属性

session.removeAttribute(“name”);  // 删除命名属性

2、Session的特点

1) session 和 client浏览器(同1机器上 打开的同类 产品) 一一对应;

2) Session 比 request 作用范围大。

4、设置session的失效时间

session.setMaxInactiveInterval(秒);    // 设置当前session的失效时间为指定的秒

在web.xml中进行配置(整个项目中的session)

<!-- 设置session的失效时间,分钟 -->

<session-config>

<session-timeout>10</session-timeout>

</session-config>

5、底层实现

Session 的实现 底层使用了 cookie!

Client第1次请求server,server接收请求 检查当前client是否有对应的session,如果没有 则为该client创建对应的session对象(唯一的ID-32位的16进制数),处理完请求响应回client时,把当前sessionID以cookie(JSESSIONID-xxxxx 有效期为负数)的形式 存入client。

以后次请求,client会先读取本地的cookie(名称是JSESSIONID的) 获取到SESSIONID ,和请求信息一起 到达server,server接到请求,根据client请求中的sessionID在内存中检查是否有ID相同的session,如果有 代表是当前client对应的session。

如果cookie被禁用,JAVAEE中可以使用 response.encodeURL(“网址”)进网址进行编码,如果检查到cookie被禁用,则在原网址后;jseessionid=xxxxx实现会话跟踪。

三、ServletContext接口

1、是web.xml在内存中的表现。

演示读取全局初始化参数:

1) web.xml 配置全局初始化参数

<!-- 配置全局初始化参数 -->

<context-param>

<param-name>name</param-name>

<param-value>tom</param-value>

</context-param>

2) 使用ServletContext获取全局初始化参数

ServletContext ctx = super.getServletContext();

String val = ctx.getInitParameter("name");

2、作用域范围

开始:server启动

结束:server停止

使用:ctx.setAttribute(“name”, obj);

obj = ctx.getAttribute(“name”);

ctx.removeAttribute(“name”);

小结Servlet中的三个作用域对象:

request:

开始:client发出请求开发

结束:响应结果回到client结束

session

开始:client第1次请求 遇到getSession(true)

结束:超时、手动销毁(调用invalidate)

ServletContext

不同的client 共享数据时。

时间: 2024-11-20 13:37:26

servlet笔记整理的相关文章

java笔记整理

Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, Ejb, java和模式 Linux/Unix笔记 inode :存储编号(地址) ls -k:查看磁盘分区 ls -li:显示当前文件的inode号. 目录的大小跟文件的大小有关,跟目录里的文件(目录)数量无关. 一行多个命令的话,中间用分号分开.如:pwd;cal;date last | grep

纸质笔记整理(二)

若你的应用需要进行分布式部署,如果你的分布式对象需要支持事务.如果你的关键业务逻辑需要能够支持多种不同类型的客户端,那么EJB将会是一个很好的选择. java虚拟机运行时数据区:                                         需要同时满足下面3个条件才能算是"无用的类": 1,该类的所有实例都已被回收,也就是JAVA堆中不存在该类的任何实例. 2,加载该类的ClassLoader已被回收. 3,该类的java.lang.Class对象没有在任何地方被引

jqGrid 学习笔记整理——终极篇(一)

jqGrid 学习笔记整理--终极篇(一) 本篇开始实现利用jqGrid框架实现 主从表 的显示效果及与后台交互的实例,使用的平台和上篇博文[jqGrid 学习笔记整理--进阶篇(二)](http://blog.csdn.net/dfs4df5/article/details/51108798)一致 也将使用上篇中的数据库和代码进行添加和修改,如果未看上篇的请先去看上篇,本篇不再重复贴出上篇出现的源码. 一.数据库部分 为了检索方便,这里建立了一个视图 关联两个表,设置为外键 最后如果有什么不清

jqGrid 学习笔记整理——进阶篇(二)

jqGrid 学习笔记整理--进阶篇(二 ) 本篇开始正式与后台(java语言)进行数据交互,使用的平台为 JDK:java 1.8.0_71 myEclisp 2015 Stable 2.0 Apache Tomcat-8.0.30 Mysql 5.7 Navicat for mysql 11.2.5(mysql数据库管理工具) 一.数据库部分 1.创建数据库 使用Navicat for mysql创建数据库(使用其他工具或直接使用命令行暂不介绍) 2.创建表 双击打开上步创建数据库--右击T

WPF笔记整理 - Bitmap和BitmapImage

项目中有图片处理的逻辑,因此要用到Bitmap.而WPF加载的一般都是BitmapImage.这里就需要将BitmapImage转成Bitmap 1. 图片的路径要用这样的,假设图片在project下的Images目录,文件名XXImage.png. pack://application:,,,/xxx;component/Images/XXImage.png 2. 代码: Bitmap bmp = null; var image = new BitmapImage(new Uri(this.X

WPF笔记整理--DataBinding(2)

图片绑定时的一个问题.场景如下: 有2个窗口A和B,A窗口的业务逻辑是编辑生成图片.然后从A窗口可以打开B窗口.B窗口是由A生成所有图片的列表.当在A窗口编辑生成图片并保存后打开B窗口就会看到刚刚生成的图片.关闭B窗口,可以在A窗口中继续编辑图片,再次保存图片并打开B窗口,就会看到最新的图片的变化.图片是保存在本地路径. 解决方案:定义一个Converter,将图片读到MemoryStream中,然后再Binding.代码如下: public object Convert(object valu

WPF笔记整理--DataBinding(1)

WPF的数据绑定是一大亮点.如果用WPF而不用数据绑定,那就太失败了. 也不多废话,如果不知道如何绑定,请百度一下.这里简单的提几点: 1. ObservableCollection可用于集合绑定,由于已经实现了INotifyPropertyChanged,可以通过添加删除集合中的元素来实现对UI列表项更新.注意,当一个ObservableCollection已经有元素,通过再次new集合并不能实现清空页面已显示的内容. 如果希望ObservableCollection中某列表项的属性值改变显示

Deep Learning(深度学习)学习笔记整理系列七

Deep Learning(深度学习)学习笔记整理系列 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除. 3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢. 4)阅读本文需要机器学习.计算机视觉.神经网络等等基础(如果没有也没关系了,没

Deep Learning(深度学习)学习笔记整理系列之(五)

Deep Learning(深度学习)学习笔记整理系列 [email protected] http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04-08 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主