servlet

Servlet生命周期

1.容器收到请求后创建对应的servlet的实例对象

也可以指定servlet在服务器启动时加载

只需要在web.xml部署文件对应的servlet里面添加<load-on-startup>标签

它的值必须是一个整数,当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet

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

2.servlet通过调用init()方法进行初始化

init()方法只调用一次,在后续每次用户请求时不再调用。

3.servlet调用service处理客户端请求

4.servlet调用destroy方法结束

destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。

最后垃圾回收器进行垃圾回收

 

 

重定向:

当前请求处理完毕,让浏览器重写发送一个请求到对应的servlet

request.sendRedirect("url");//jsp或者servlet

转发:

把当前客户端请求转交给另外一个servlet处理

request.setAttribute("name",Object);//绑定数据

处理转发的servlet可通过request.getAttribute("name")获取数据

RequestDispatcher rd = request.getRequestDispatcher("url");//获取转发器

rd.forward(request,response);//执行转发

 

Cookie

服务端发送给浏览器的少量数据,大约4KB左右

Cookie cookie = new Cookie("name","value");//创建Cookie

cookie.setMaxAge(60*60*24);//指定 cookie 能够保持有效的时间(以秒为单位)

不设置的话,默认为存储在内存,浏览器关闭则清除

response.addCookie(cookie);//添加 HTTP 响应头中的 Cookie

Cookie[] cookies = request.getCookies();//获取Cookie 对象的数组

Cookie只能存放合法的ascii字符,对于中文,需要将其转换成合法的ascii字符的形式。

在添加cookie时,使用encode方法来编码
    String URLEncoder.encode(String str,String charset);
在读取cookie时,使用decode方法来解码
    String URLDecoder.decode(String str,String charset);

建议,在添加cookie时,不管是否是中文,都统一使用encode方法 来处理。

Cookie的路径问题:

浏览器在向服务器发送请求时,会比较请求地址是否符合cookie的路径要求,只有符合要求的cookie才会被发送。

符合要求:请求地址要么等于Cookie的路径,要么是其子路径。

Cookie的默认路径等于添加该Cookie的web组件的路径,比如:/TestServlet/demo/Login.jsp内添加了一个Cookie,则该Cookie的默认路径就是:"/TestServlet/demo"

修改Cookie的默认路径:cookie.setPath(String path);

 

Session(会话)

服务器为了保存用户状态而创建的一个特殊对象,该对象一般称之为session对象。

该对象有一个唯一的id,一般称之为sessionId。

服务器会将sessionId以Cookie形式发送给浏览器。

当浏览器再次访问服务器是会将sessionId发送过来,服务器就可以利用sessionId找到对应的session对象。

获取Session对象:

HttpSession session = request.getSession();

服务器先查看请求当中是否有sessionId,如果没有,则创建一个session对象;如果有,则依据该sessionId去查找对应的session对象,如果找到了,则返回该session对象,如果没有找到,则创建一个新的session对象。

HttpSession session = request.getSession(false);

服务器先查看请求当中是否有sessionId,如果没有,则返回null;如果有,则依据该sessionId去查找对应的session对象,如果找到了,则返回该session对象,如果没有找到,则返回null。

使用session进行状态管理:

session.setAttribute("name",obj);//将数据绑定到session对象上。

obj = session.getAttribute("name");//依据绑定名获取绑定值,没有返回null。

session.removeAttribute("name");//接触绑定。

Session超时:服务器会把空闲时间过长的session对象从内存中删除,一般默认30分钟

修改Session的超时时间长度:session.setMaxInactiveInterval(int seconds);//单位:秒

删除Session:session.invalidate();

优点:安全、支持更多的数据类型、可存放的数据量更大。

缺点:session会占用服务器端的内存空间,如果用户量大,会严重 影响系统性能(cookie不会占用服务器端的内存空间)。

 

Servlet上下文

容器启动之后,会为每一个web应用创建唯一的一个符合ServletContext 接口要求的对象,该对象一般称之为Servlet上下文。

一个web应用对应一个Servlet上下文。

ServletContext中的属性的生命周期从创建开始,到服务器关闭结束。

2)如何获得Servlet上下文?

GenericServlet、ServletConfig、HttpSession及FilterConfig都提供了一个方法(getServletContext)来获得上下文。

绑定到Servlet上下文中的数据所有用户都能访问到。

添加属性:setAttribute(String name, Object obj);

得到值:getAttribute(String name),这个方法返回Object

删除属性:removeAttribute(String name)

<!--配置全局参数-->
<context-param>
    <param-name>name</param-name>
    <param-value>tom</param-value>
</context-param>

String getInitParameter("name"); //获取全局参数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值