分享

Servlet学习笔记

 AnonymousV脸 2018-11-16

Servlet

引言

问题1: tomcat+HTML展示信息不变?

原因:

① HTML网页中信息是静态(数据不变)

② tomcat直接读取html源文件内容,响应给浏览器.

解决思路:

将java程序交给tomcat管理.

服务器调用java程序,获得结果响应浏览器.

概念:

概念: 一段Java程序,可以运行在tomcat端.

语法: Servlet标准.(接口) JavaEE标准(servlet-api.jar)

Servlet开发的具体步骤

手动部署servlet程序[最重要基础]

需求: 显示当前系统时间?

编写Servlet程序

导入servlet-api的jar.(编写编译java程序使用)

将servlet部署tomcat

在tomcat/webapps下创建文件夹(web项目)

在项目下创建创建WEB-INF/classes,将代码带包拷贝在classes下面

在web.xml描述(全类名+访问路径)

启动tomcat

访问servlet,查看执行响应的结果.

MyEclipse集成开发Servlet和部署

MyEclipse管理tomcat

tomcat交个MyEclipse管理

window--preferences--搜tomcat--->tomcat 8.x---brwose--找到tomcat目录+ 选择ebable.---apply

管理tomcat窗口: window-showview--other-->servers

启动tomcat

servers-tomcat8.x---右键---run server

关闭tomcat

servers-tomcat8.x---右键--stop server

部署项目

参考下面

MyEclipse开发部署Servlet

新建web project

创建web.xml

自动创建好对应的目录结构(WEB-INF classes web.xml)

编写servlet

编写web.xml

部署

servers--tomcat8.x---右键---add deployment--选择项目部署

Servlet生命周期[面试]

概念: servlet创建时机和活跃使用时机,销毁时机.

servlet创建

第一个浏览器访问servlet,对象会被创建

一个Servlet类只会创建一个servlet对象.

servlet服务

浏览器每次访问都会调用service方法.

servlet销毁

tomcat关闭,销毁servlet对象

重点:

Servlet对象只有一个单实例,面向多线程(用户)访问,线程不安全.

如果servlet有属性, service方法中对属性的操作,加锁.

要求: Servlet中不要添加数据属性

Servlet执行原理(原理)

问题: 浏览器发送url的请求---直到浏览器接收到响应结果,过程发生了什么?

浏览器向tomcat发出url的http请求: http://ip:port/web项目名/servlet的url-pattern

tomcat

获得url的项目名, 从本tomcat下的webapps下找到对应文件夹.

根据url中servlet的url-pattern,从web.xml找到 servlet-name, 找到servlet-class

Class clazz = Class.forName('Servlet的全类名');//获得servlet的类对象.

Servlet servlet = (Servlet)clazz.newInstance();//创建出了类的对象(Servlet),

tomcat先调用 方法,(servlet第一被访问)

调用servlet的service方法;

服务器将响应结果返回给浏览器.

浏览器发出第二次请求.

tomcat会直接根据url-pattern,找到servlet对象,调用servlet.service方法.

Servlet请求参数

概念: 浏览器请求servlet携带的数据,叫做请求参数

Servlet接收请求参数:

浏览器请求Servlet的方式

浏览器地址栏.

form表单(的action)请求Servlet

超链接的href.

请求参数乱码问题

Post提交乱码

了解: tomcat接收数据默认编码:

接收:

注意: 设置编码,在接收请求参数之前设置

Get提交乱码

方式:

form action='' method='get'

超链接携带的数据.

浏览器发送请求参数

修改tomcat的conf/server.xml中

多个Servlet配合工作

请求转发(foward)

作用:多个Servlet配合完成一个功能

核心特点:

是服务器(当前web项目)内部发送的流程跳转.

forward请求转发连接的多个servlet,处于一个请求过程中.

页面显示信息和浏览器地址栏不一致(效果,不是错)

代码:

Request作用域

概念: JavaEE提供的存储数据(命名属性)的空间.

命名属性: 名字---值

生命周期: 一次请求过程.[备注:请求转发的servlet正好处于一次请求过程]

存:

取:

请求重定向(Redirect)

核心特点:

服务器(web应用)外部跳转。

通知浏览器,自动去请求下一个要跳转的页面或者Servlet(不需要用户操作)

重定向连接的servlet或者资源,处于两个不同的请求过程。

请求重定向后的页面和浏览器的地址一致。

代码实现:

总结跳转方式

会话技术

http协议: 无状态协议,(协议本身不会记录任何信息,两次信息传输之间没有任何关系)

概念: 客户端(浏览器)会话技术。

应用场景: 浏览器记录 登录验证 验证码 购物车(阉割版)

另一种解释: 浏览器和服务器之间,多次交互依然保存数据(状态)的一种机制。(每个浏览器一份)

Cookie

概念: 服务器保存在浏览器上的一小段字符串[key=value]

工作机制:

服务器tomcat创建

保存在浏览器

浏览器每次访问服务器,都会将服务器(web项目)保存在本浏览器上的cookie发送到服务器上。(发送当前服务器保存的cookie)

编码:

创建:

将cookie存入浏览器

其他方法(设置生命周期,设置存活多久)

获得浏览器请求携带的cookie信息?

总结Cookie的特点

存在浏览器上的一小段字符串

缺点: (数据不太安全)

优点: 分担服务器的压力。(不会占用服务器的任何资源)

cookie只能保存字符串,不能保存中文。

cookie生命周期: (跨多次请求)

设置: setMaxAge(秒)

10 存活10s

0 删除cookie

-1 设置cookie浏览器关闭之前。

默认: 浏览器关闭,cookie丢失。

cookie和浏览器(用户)一一对应。

HttpSession

概念: 服务器会话技术。

核心工作机制: 服务器为每个浏览器分配的一个一一对应的存储空间。

详细: 浏览器第一次访问web应用服务器,服务器分配一个session对象,该浏览器第二次后再访问,服务器直接将原有sessino对象分配给该浏览器。

HttpSession的特点

存放在服务器

每个浏览器和session一一对应

HttpSession的生命周期夸多次请求依然存在。

HttpSession 相关的API

属性: id.

获得session:

浏览器第一次访问: 创建session对象。

浏览器第二 三…次访问: 获得原有的session对象给你。

HttpSession作用

作用域,存储命名属性

存:

取:

移除:

特点:

浏览器一一对应

跨多次请求依然存在

存放在服务器

Session失效时机(补充)

浏览器关闭,session失效。

session默认保留30分钟。 【浏览器和服务器之间,超过30分钟没有请求】

主动失效:

应用: 用户退出登录:

Cookie和Session对比[笔试]

Session和Cookie的相同点:

和浏览器一一对应。

生命周期跨多次请求依然存。

Session和Cookie的不同点:

Cookie:

存在浏览器

cookie只能存储字符串,不能存汉字.(缺点)

cookie数据容易通过浏览器直接查看,不太安全。(缺点)

Session:

存在于服务器端

session可以存对象,可以存入任何类型。(优点)

session数据保存服务器,相对安全。(优点)

session中数据过多,侵占服务器内存资源(对服务器运行造成压力)[缺点]

应用场景分析:

用户私密信息(Session)

用户浏览器过的商品信息(cookie保存)

Session实现原理

机制:

浏览器第一请求服务器web项目,会为该浏览器创建一个session对象。获得session的id,并且将id以cookie的形式写回到浏览器。以后每次浏览器,请求服务器都会自动携带该cookie(JsessionId)信息,tomcat通过获得cookie中名字为jesessionid的cookie的value值,和内部所有的session对象匹配,找到对应的session对该浏览器使用。

内部代码实现(局部代码):

浏览器第一请求服务器

浏览器第二次(以后)请求服务器

用户禁用cookie(了解)

导致session失效,解决办法?

总结:

对所有超链接+表单等一切请求服务器的url路径,全部进行url重写。

方法:

纠错: ;

Filter过滤器

概念: Servlet中提供的技术,可以过滤浏览器发出的请求,并且决定放行请求还是中断请求。

核心工作机制:

编码步骤

自定义一个java类,实现Filter接口

}

}

在web.xml中注册信息

生命周期(了解)

创建: tomcat启动

销毁: tomcat关闭

Filter的url-pattern的写法:

写多个。

---过滤所有请求

---过滤请求以.do的请求

----过滤路径中的url-pattern部分,以/xxxxxooaa开头的请求

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多