首先先明确servlet是用来处理客户端请求的
servlet的作用:
1.获取表单数据
2.获取浏览器附加信息
3.处理数据(在servlet中调用其它的处理数据方式来完成,如jdbc rpc等)
4.给客户端产生一个响应
5.在响应中添加附加信息
浏览器与服务器会话状态信息
cookie: 分为 会话cookie(随浏览器关闭而结束) 和 持久化cookie(持久化到本地,可以通过cookie.setMaxAge(2000)设置有效时长)
存在于客户端浏览器,每一次请求都会将有效的cookie发送给服务器 所以cookie有数量限制(具体数量与不同浏览器有关)
session: 分为两部分 sessionid与session(键值对的关系) 存在服务器端,服务器通过cookie将sessionid发送给浏览器,
所以可以在不同请求间传递信息 1.关闭tomcat 2.reload web应用 3.session时间到 (在web.xml中配置)4invalidate session(方法调用强制失效
servlet的实例化:
容器利用Java反射实例化servlet对象
类反射加载机制:Class clazz=Class.forName(“类名”) 或者用一个实例对象getClass()方法 加载类
进行了IO类加载以及静态成员初始化操作
Servlet obj=clazz.newInstance()在堆内存完成所有成员变量初始化创造对象
obj.init();
servlet 生命周期
servlet生命周期是由容器管理
分为
三个阶段:
init初始化
service
服务 destroy 销毁
当客户端浏览器第一次请求该servlet时,Tomcat会立即创建该servlet对象,并立即调用init()完成初始化 并且在
新的线程中
调用service()方法。
Tomcat会对已经实例化的servlet对象进行缓存,当有客户端浏览器
再次请求
该servlet,容器
不会再次创建
servlet对象,而是在一个新的线程中调用service()方法。
在容器关闭时, 容器会在servlet对象销毁之前调用一次destroy()方法
//servlet可以在web.xml中配置,使其在容器启动时初始化,不必依赖于请求而创建
cookie和session:
HTTP是无连接的不能记录状态信息,而在一些场景下需要这些状态信息(记住用户名,验证是否已经登陆,验证码等信息)
所以记录客户端状态,识别请求状态需要cookie session
cookie:
分为 会话cookie(随浏览器关闭而结束) 和 持久化cookie(持久化到本地,可以通过cookie.setMaxAge()设置有效时长 单位为Second秒)
存在于客户端浏览器,每一次请求都会将有效的cookie发送给服务器 所以cookie有数量限制(具体数量与不同浏览器有关)
session:
分为两部分 sessionid与session(键值对的关系) 存在服务器端,服务器通过cookie将sessionid发送给浏览器, 所以可以在不同请求间传递信息
session失效方法:
1.关闭tomcat 2.reload web应用 3.session时间到 (在web.xml中配置)4invalidate session(方法调用强制失效)
JSP:
(jsp引擎编译为一个servlet文件 其实本质和servlet相同 在客户端第一次请求时,或者jsp被修改时编译)
三种原始标签:(作为Java编译)
1.声明:<%! %> jsp编译后的Java源文件中的类下
2.赋值:<%= %> jsp编译后的Java源文件中的字符输出流方法中(切记,不要加分号)
3.脚本:<% %> jsp编译后的Java源文件中的jspServices方法中
jsp指令标签:
1.<%@ page launguae=”java” import=”java.util.*” pageEncoding=”utf-8″%>
2.<%@ include %>
jsp内置对象(暗对象):
jsp已经为我们创建好的对象(9个):
jsp中 servlet中
request HttpServletRequest
作用域一次请求
response HttpServletResponse
application ServletContext
全局作用域
session HttpSession
随浏览器关闭而失效
config ConfigContext
out PrintWriter
exception Throwable
pageContext
page
servlet和jsp本质时一样的,只是jsp对于展示更加擅长 相当于mvc中的view 而servlet则相当于controller
它默认内容是在printwriter流中(相当于servlet的printwriter()中) 通过标签来确定Java代码作用域
本人新人小白,有错误欢迎指出