Servlet总结

一、导入tomcat的servlet的jar包
服务器不是运行在IDE中,而是运行在tomcat中,tomcat运行时,调用java的方法,实现响应客户端请求的功能。
路径:
webapp/项目名/WEB-INF/web.xml文件配置servlet的地址映射
webapp/项目名/WEB-INF/lib 放项目的jar包
webapp/项目名/WEB-INF/classes 放java编译后的二进制流文件
webapp/项目名/静态资源

二、Servlet生命周期
Servlet(接口)---GenericServlet(接口)--HttpServlet(抽象类)
方法执行顺序:
constructor    init (前面的从tomcat容器启动开始只执行一次) --- Servlet对象只创建一次 
doGet/doPost (每访问一次执行一次) 
destroy(后面只有tomcat关闭时才执行)
 全过程:
加载 ClassLoader将classes文件load进tomcat
实例化 new一个Servlet对象
初始化 执行init方法(初始化参数ServletConfig)
处理请求 (doGet doPost)
退出服务 destroy

/和没有/的区别:/是tomcat的根路径,没有/是当前路径
三、关于Cookie:(Http协议的无连接性,需要记录识别某个用户)
服务器通过Set-Cookie向客户端写数据
客户端可以阻止服务器写入
同源策略:只能向客户端写同一个域的Cookie

设置Cookie(向response设置)
1
Cookie cookie = new Cookie("Session Cookie", "cookie value");
2
response.addCookie(cookie);//Session Cookie,相当于存在内存里,生命周期是该窗口打开时
3
4
cookie = new Cookie("Persistant Cookie", "cookie value");
5
cookie.setMaxAge(3600);//设置1小时后销毁
6
response.addCookie(cookie);//持久化Cookie,以文件形式保存
获取Cookie(向request获取)
1
Cookie[] cookies = request.getCookies();
2
String cookieName = cookies[0].getName();
3
String cookieValue = cookie[0].getValue();

临时Cookie----相当于存在内存里,窗口关闭后就消失了。(cookie.setMaxAge(-1)或不写,用于记录该界面的用户是谁)
普通Cookie---以文件的形式存在计算机里

servlet/jsp设置的Cookie能被同一个路径下或子目录下的Servlet/jsp读取到,父路径无法读取这个Cookie
四、Session(保存在服务器端)
服务器开辟一个内存空间放用户的Session,和某个用户的浏览器关联,不同浏览器不同Session
用于唯一标识客户端的浏览器和唯一标识其向对应的Session----通过唯一标识符SessionId

Session的两种实现方式:
1.通过Cookie实现(将JSESSIONID保存在cookie里,请求时告诉浏览器去找这个SESSIONID对应的session)
1
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
2
    //创建session
3
    HttpSession mySession = request.getSession(true);//true--如果没有session则创建,false---没有session不创建
4
    response.setContentType("text/html");
5
    PrinterWriter out = response.getWriter();
6
    
7
    out.println("SessionId: " + mySession.getId());//获取Session的sessionId
8
    
9
    
10
    //拿到访问这个页面的客户端浏览器的SessionId
11
    out.println(request.getRequestSessionId());
12
    
13
    
14
}
2.通过URL重写实现(浏览器不支持Cookie时, 客户端将JSESSIONID写在URL地址中传给服务端
1
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
2
    response.setContentType("text/html");
3
    PrintWriter out = response.getWriter();
4
    //创建Session
5
    HttpSession session = request.getSession(true);
6
    //设置Session属性
7
    session.getAttribute("sessionName","sessionValue");
8
    
9
    //获取Session属性
10
    String sessionValue = session.getAttribute("sessionName");
11
    out.println("sessionName:" + sessionValue);
12
    
13
    //重写URL将jsessionId参数放在URL地址栏中传到服务端
14
    out.println("<BODY><a href=" + response.encodeURL("SessionInfoServlet") + ">refresh</a></BODY>" );
15
}
五、webApplication(对所有访问的用户共享数据)
类:ServletContext(整个webApplication的运行环境)
获取context方法:HttpServlet-----getServletContext方法
获取context属性:ServletContext的get/setAttribute方法
1
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
2
    response.setContentType("text/html");
3
    PrintWriter out = response.getWriter();
4
    //获取WebApplication上下文
5
    ServletContext application = this.getServletContext();
6
    //获取上下文的counter属性
7
    int counter = application.getAttribute("counter");
8
    if(counter == null){
9
        counter = new Integer(0);
10
    }else{
11
        count = new Integer(count.intValue()+1);
12
    }
13
    //设置上下文的counter属性
14
    application.setAttribute("counter",counter);
15
   
16
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值