- Servlet生命周期
- Servlet在整个生命周期中被调用的方法
- Servlet运行原理
- Cookie案例代码
- 例1:从Servlet向客户端存入cookie
- 例2:在客户端读取cookie
- 例3:利用cookie计数
- 例4:删除cookie
- 例5:购物车登录实验
- 1.从首页进入购物车页面
- 2.购物车页面,先判断用户是否已经登录,否则跳转登录页面login.html
- Servlet三种实现方式
- 1.实现 javax.servlet.Servlet接口
- 2.继承GenericServlet类
- 3.继承HttpServlet类
- 配置Servlet(使用标签)
- Session创建和销毁
- Session怎么存值
- Cookie怎么设置有效期
- Cookie写入和读取
- Session和Cookie的区别
- 不同
- 联系
Servlet生命周期
Servlet的生命周期可以概括为以下几个阶段:
(1)、当支持Servlet运行的Web容器接收到客户端的请求时,会先判断用户所请求的Servlet对象是否存在。
如果不存在,则需要加载Servlet类,创建 Servlet的对象,然后调用Servlet的init( ) 方法进行初始化。
(2)、容器针对本次客户端请求创建 ServletRequest 和 ServletResponse 对象,并且创建一个线程,调用Servlet对象的service( )方法,,service()方法再根据客户端的请求方式间接调用 doGet() 方法或者 doPost() 方法。
service()方法运行结束后产生响应,容器将响应发回客户端。
(3)、当Web应用被卸载或者服务器被关闭的时候,容器会销毁为本次客户端请求创建的 ServletRequest 和 ServletResponse 对象以及相应的线程。此时会调用 destroy() 方法释放资源。
需要注意的是,加载 Servlet 类,创建 Servlet 对象、调用初始化方法 init() 和销毁方法 destroy() 在Servlet的整个生命周期中都只有一次。
Servlet在整个生命周期中被调用的方法Servlet在整个生命周期中会有一些方法被服务器自动调用,其中的主要方法有:
init( )方法:用于初始化
Destro( )方法:用于释放资源
service( )方法:服务类方法,对用户的请求进行处理,并对用户进行响应,几乎所有处理功能都在这里完成。service( )方法通常会激活doGet( )或 doPost( ) 方法。
doGet( )方法可以响应get方式的请求,doPost( ) 方法可以响应 post方式的请求。
一般不推荐直接重写 service( )方法,而是应该重写doGet( )或者 doPost( )方法。通常,表单提交常使用post方式,超链接使用 get 方式。
//SetCookie Servlet
Cookie c=new Cookie("season","spring");
c.setMaxAge(30);
response.addCookie(c);
Cookie d=new Cookie("nextseason","summer");
d.setMaxAge(10);
response.addCookie(d);
例2:在客户端读取cookie
//getCookie.jsp <% Cookie[] a=request.getCookies(); for(int i=0;i例3:利用cookie计数out.println(a[i].getName()+“:"+a[i].getValue()+"
"); } %>
//visitCount.jsp计数次数
<%@ page contentType="text/html;charset=UTF-8" %>
<%int count = 0;
Cookie[] cookies = request.getCookies(); / / 得到所有的Cookie
if(cookies != null) {
for(int i=0; i
if(cookies[i].getName().equals("Counter"))
count = Integer.parseInt(cookies[i].getValue()); //获取Counter以前值
} }
count++;
if(count == 1)
out.println("欢迎首次光临");
else
out.println("您已经光临了" + count+"次");
// 将新的count写入客户端
Cookie c = new Cookie("Counter", ""+count);
c.setMaxAge(60*60*24*365); // Cookie 的有效期为 1 年
response.addCookie(c); %>
例4:删除cookie
//cookie remove.jsp
<%
int count=0;
// 将新的count写入客户端
Cookie c = new Cookie("Counter", ""+count);
c.setMaxAge(0); // Cookie 的有效期为 0
response.addCookie(c); %>
例5:购物车登录实验
1.从首页进入购物车页面
//首页home.html 购物车 删除计数cookie2.购物车页面,先判断用户是否已经登录,否则跳转登录页面login.html
//购物车 https://blog.csdn.net/rej177/article/details/cart.jspServlet三种实现方式购物车
<%int count = 0; Cookie[] cookies = request.getCookies(); // 得到所有的Cookie if(cookies != null) { for(int i=0; iif(cookies[i].getName().equals("Counter")) count = Integer.parseInt(cookies[i].getValue()); //获取Counter以前值 } } if(count==0)response.sendRedirect(request.getContextPath()+"/login.html"); %> //login.html 用户登录
//visit.jsp <%int count = 0; Cookie[] cookies = request.getCookies(); // 得到所有的Cookie if(cookies != null) { for(int i=0; iif(cookies[i].getName().equals("Counter")) count = Integer.parseInt(cookies[i].getValue()); //获取Counter以前值 } } count++; if(count == 1) response.getWriter().println("欢迎首次光临"); else response.getWriter().println("您已经光临了" + count+"次"); // 将新的count写入客户端 Cookie c = new Cookie("Counter", ""+count); c.setMaxAge(60*60*24*365); // Cookie 的有效期为 1 年 response.addCookie(c); response.sendRedirect(request.getContextPath()+"/https://blog.csdn.net/rej177/article/details/cart.jsp"); %>
实现Servlet的三种方式:一个实现,两个继承
1.实现 javax.servlet.Servlet接口@WebServlet(urlPatterns = "/second",initParams = {@WebInitParam(name="user",value="Tom")})
public class Second implements Servlet {
private ServletConfig config;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
this.config=arg0;
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out=arg1.getWriter();
out.print("this is Second Servlet");
out.print(this.config.getInitParameter("user"));
//释放printwriter对象
out.flush();
out.close();
}
}
2.继承GenericServlet类
@WebServlet(urlPatterns = "/third")
public class Third extends GenericServlet {
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
PrintWriter out=arg1.getWriter();
out.print("this is Third Servlet");
//释放printwriter对象
out.flush();
out.close();
}
}
3.继承HttpServlet类
//编写一个类去继承HttpServlet抽象类重写doget( )和dopost( )方法
public class HelloHttp extends HttpServlet{
//处理get请求
public void doGet(HttpServletRequest req, HttpServletResponse res){
//业务逻辑
try{
PrintWriter pw = res.getWriter();
pw.println("hello, Http");
}
catch (Exception e){
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req, HttpServletResponse res){
this.doGet(req,res);
}
}
配置Servlet(使用标签)
Session创建和销毁hello HelloWorld hello /hello
session什么时候被创建
HttpServletRequest.getSession(true) 这样的语句时才会被创建。 所以没有调用getSession方法则不会创建session。
要了解Session首先要知道一个概念:
Session的销毁只有两种情况:
第一:session调用了 session.invalidate()方法。
第二:前后两次请求超出了session指定的生命周期时间。
● Session中的数据是通过哈希表的方式进行存取的:
● setAttribute(String name,Object value)
● Object getAttribute(String name)
● public void setMaxAge(int maxAge):设置Cookie的有效时间,以秒为单位
● maxAge如果为正数,在有效期内,用户关闭浏览器后再重新启动,Cookie仍有效
● maxAge如果为负数,只在当前浏览器有效,当关闭浏览器时,Cookie失效
● maxAge如果为0,会删除过去有效的Cookie。
● public int getMaxAge():获取cookie在失效以前的最大时间,以秒计算
//写入
Cookie c=new Cookie("season","spring");
c.setMaxAge(30); //cookie的有效期为30秒
response.addCookie(c); //将cookie写入客户端
//读取
Cookie[] a=request.getCookies();
//根据设置时的cookie个数决定数组元素个数
for( int i=0;i
String name=(String)(a[i].getName());
String value=(String)(a[i].getValue());
out.println(name+”:”+value);
}
Session和Cookie的区别
不同
存放地点:cookie存放在客户端的硬盘里,属于离线存放,而session存放在服务器的内存中。
存活时间:cookie可以长期存放在客户端,具体的存活时间由setMaxAge()方法所指定的数值决定,session随用户访问服务器而产生,随客户超时或下线而消失。
安全性:cookie存放在客户端,可能会被别有用心的网站读取,安全性较差,而session存放在服务器的内存中,用户不能修改,且随客户端浏览器的关闭而消失,安全性较好。
不论是cookie还是session隐含对象都需要浏览器支持cookie并且没有禁用cookie。



