Servlet,cookie,域对象知识点整理

一.servlet(server Applet)
Servlet是java的一个类, Servlet是sun公司提供的一门用于开发动态web资源的技术
二. Servlet的生命周期(servlet 类加载–>实例化–>服务–>销毁)
 1.init()。当Servlet第一次被装载时,Servlet引擎调用这个Servlet的init()方法,只调用一次。如果某个Sevlet需要特殊的初始化需要。那么Servlet编写人员可以重写该方法来执行初始化任务。这是一个可选的方法。如果某个Servlet不需要初始化,那么默认情况下将调用它父类的init方法。系统保证,在init方法成功完成以前,是不会调用Servlet去处理任何请求的。
  2.service()。这是Servlet最重要的方法,是真正处理请求的地方。对于每个请求,Servlet引擎将调用Servlet的service方法,并把Servlet请求对象和Servlet响应对象最为参数传递给它。
3.destroy()。这是相对于init的可选方法,当Servlet即将被卸载时由Servlet引擎来调用,这个方法用来清除并释放在init方法中所分配的资源。
三.servlet程序创建
1.创建一个新的web项目,选择Dynamic web module version 2.5的时候默认创建XML文件,需要在web.xml文件中进行配置,设置对外访问路径(3.0版本在新建Servlet文件时会自动加上注解,不在需要额外的配置)

2.新建的html action名称必须跟url-pattern一致,action名称与对应的sevrlet类一致,ajax提交的的方式在url里面填入对应的sevrlet类
四. HttpServletRequest 对象
主要作用是用来接收客户端发送过来的请求信息
1.主要方法:

2.获取请求头

五.post请求乱码问题
解决POST请求乱码:
resp.setContentType(“text/html;charset=utf-8”);;加入以上代码即可,Tomcat8开始get请求不会乱码不需要添加
以上代码指定客户端与服务单编码格式
六.servlet域对象

  1. request(域对象):通过该对象可以在一个请求中传递数据,作用范围为在一次请求中有效,即服务器跳转有效
    request.setAttribute():设置域对象内容;request.getAttribute(String name):获取域对象内容;request.removeAttribute(String name): 删除域对象内容

2.session(见下十)

3.servletContext对象
ServletContext当做域对象来使用,通过向 ServletContext 中存取数据,可以使得整个应用程序共享某些数据。当然不建议存放过多数据,因为 ServletContext 中的数据一旦存储进去没有手动移除将会一直保存。
ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。
例:publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//往serlvetContext里面存数据

     //1.获取ServletContext对象
     //getServletContext()
     //2.往对象里面设置数据
     getServletContext().setAttribute("username", "admin");
    
     response.getOutputStream().write("用户名写入到servletContext成功".getBytes())}

注意: 域对象在选择的时候,能使用小的就不要使用大的。一般情况下,可以这么选择:

  • 如果需要存储全局的数据,这个时候可以使用ServletContext域对象。比如

    • 网站在线人数统计: 所有用户看到的都应该是这一个数据
  • 如果数据是在多次请求中使用,并且在会话结束了后就无效了,那么就可以使用HttpSession域对象。

    • 用户登录:在访问其他页面时,用户的数据也是需要显示的。
    • 购物车:购物信息可以随时向购物车添加商品,也可以随时查看购物车信息。
  • 只在这次请求中使用,请求结束了就没有了,可以使用HttpServletRequest域对象。

    • 访问一个列表页面:数据只要显示到页面就可以了,下一次访问再重新查询。
  • 对于使用session域还是request域,还可以这么选择:

    • 如果想用请求转发,那么就一定使用request域来进行数据传递。
      七.httpServletResponse对象
      1.定义: httpServletResponse主要功能是对客户端的请求进行响应,再通过response对象向客户端输出数据
      Web 服务器收到客户端的 http 请求,会针对每一次请求,分别创建一个用于代表请求的 request 对象和代表响应的 response 对象。
      request 和 response 对象代表请求和响应:获取客户端数据,需要通过 request 对象;向客户端输出数据,需要通过 response 对象。
      2.常用方法

      3.自动刷新跳转
      例: response.setHeader(“refresh”, “2”); // 2秒刷新一次
      response.setHeader(“refresh”,“2;URL=http://www.baidu.com”); // 2秒钟后跳转到百度
      八.重定向跳转
      1)请求转发与重定向区别

1.转发使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect();
2.转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;
3.转发是服务器行为,重定向是客户端行为;
4.转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;
5.转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)。
九. cookie的创建跟发送
1)继承HttpServlet,重写service方法
例: 1.创建Cookie对象
Cookie cookie = new Cookie(“uname”,“admin”);
创建Cookie对象
Cookie cookie2 = new Cookie(“uname2”,“zhangsan”);
2.发送Cookie对象(响应cookie)
resp.addCookie(cookie);
resp.addCookie(cookie2);
2)获取 Cookie对象
1.提供了一个 getCookies()的方法用来获取客户端回传的所有cookie 组成的一个数组,
2.如果需要获取单个 cookie 则需要通过遍历,getName()获取 Cookie 的名称,getValue()获取 Cookie 的值。
3) Cookie到期时间的设定
1)到期时间,到期时间用来指定该 cookie 何时失效。默认为当前浏览器关闭即失效。
2)可以手动设定 cookie 的有效时间(通过到期时间计算),通过 setMaxAge(int time);方法设定 cookie 的最大有效时间,以秒为单位。
1.大于 0 的整数,表示存储的秒数;
2.若为负数,则表示不存储该 cookie;
3.若为 0,则删 除该 cookie。
4.负整数:cookie 的 maxAge 属性的默认值就是-1,表示只在浏览器内存中存活,一旦关闭浏览器窗口,那么 cookie 就会消失。
5.正整数:表示 cookie 对象可存活指定的秒数。当生命大于 0 时,浏览器会把 Cookie 保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie 也会存活相应的时间。
6.零:cookie 生命等于 0 是一个特殊的值,它表示 cookie 被作废!也就是说,如果原来浏览器已经保存了这个 Cookie,那么可以通过 Cookie 的setMaxAge(0)来删除这个 Cookie。 无论是在浏览器内存中,还是在客户端硬盘上都会删除这个 Cookie
4)Cookie的注意
1.Cookie存在本机上,换电脑后失效;Cookie不跨浏览器
2.出现同名Cookie,会覆盖
3.不同的浏览器对 Cookie 也有限定,Cookie 的存储有是上限的。
4.Cookie不能存中文
Cookie 中不能出现中文,如果有中文则通过 URLEncoder.encode()来进行编码,获取时通过 URLDecoder.decode()来进行解码。
6) Cookie的路径:只要访问的路径中包含cookie的path才能访问到该cookie< cookie的路径默认是当前站点名下
十. Session
1)理解:表示一次会话,会话可以保留指定时间长度
且在一次会话(一个用户的多次请求)期间共享数据。
2)创建Session对象
request.getSession(); // 如果session不存在则新建session对象;如果session对象存在则获取session
3)获取域对象
1.请求转发
request作用域不会失效,session作用域不会失效
2.重定向
request作用域会失效,session作用域不会失效
4) Session的失效
1.关闭浏览器 (session的底层是依赖cookie,默认关闭浏览器即失效;JSESSIONID不存在时,后台会新建一个sesession对象)
2.关闭服务器(非正常关闭服务器时才会销毁,session对象在服务器正常关闭时会钝化到本地磁盘中,下次启动时从本地磁盘中读取出来,在Tomcat解压包的waork目录下)
3.手动销毁(session.invalidate())
4.服务器默认最大不活动时间
Tomcat的解压缩包下的conf目录下的web.xml中
默认30分钟,单位为分钟

30

5.手动设置最大不活动时间
通过 session.setMaxInactiveInterval(int);来设定 session 的最大不活动时间,单位为秒。
通过 getMaxInactiveInterval();方法来查看当前 Session 对象的最大不活动时间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值