servlet核心对象

ServletContext对象

ServletContext对象,服务器启动自动创建,自动销毁,并且该对象在服务器运行期间有且仅有一个,程序员只要获取这个对象就行

功能一:全局(整个模块)初始化参数的使用,数据存储在ServletContext对象中,不局限在一个Servlet类中,只能通过xml文件配置

  <context-param>
       <param-name>名字</param-name>
       <param-value>小明</param-value>
   </context-param>
   <context-param>
       <param-name>年龄</param-name>
       <param-value>20</param-value>
   </context-param>

这些键值对,存储在ServletContext对象,可以在整个模块中使用

使用getServletContext()获得ServletContext对象


功能二:该对象作为一个作用域对象来使用

作用域对象:对象可以存储数据(对象本身可以作为容器使用)

ServletContext对象作用范围:不同的Servlet类,不同的html页面,不同的浏览器,不同的计算机,对象都是同一个对象

将一个键值对存入ServletContext对象中:

void setAttribute(java.lang.String name, java.lang.Object object) 将键值对存储在ServletContext对象

java.lang.Object getAttribute(java.lang.String name)

根据键获取对应的值

void removeAttribute(java.lang.String name) 根据键删除对应的值

//获得ServletContext对象
ServletContext servletContext = this.getServletContext();
//将键值对存入ServletContext对象中
servletContext.setAttribute("name","小明");

不同数据的区分

初始化参数:局部初始化、全局初始化,都是通过配置来赋值(xml或者注解)

作用域参数:通过代码来赋值

请求参数:从浏览器发出的请求中获取的键值对数据

HttpServletResponse对象

一次请求包含请求+响应

响应状态码:表示服务器运行的状态

404:代表访问路径出现问题

500:服务器端出现了异常

200:服务器一切正常

1.手动发送状态码

sendError(int sc) 发送一个指定的错误响应

sendError(int sc,String msg) 发送一个指定的错误响应和内容

2.响应对象提供了一个打印流,用来打印获得的数据,反馈到浏览器

获得打印流response.getWriter()方法

out.writer()打印

3.乱码现象解决

response.setContenType("text/html;charset=UTF-8");

HttpServletRequest对象

1.独立直接调用的方法

servlet基础02(servlet核心对象)_有效时间

2.获取请求参数数据

string getParameter(String name) 返回一个请求参数的字符串值。若该参数不存在,则返回一个空值。

String[] getParameterValues(String name) 返回一个包含所有的给定请求参数的值的字符串对象的向量。若该参数不存在,则返回一个空值。

请求方式Post中文会乱码,Get中文不会乱码,from表单一般情况下都是Post请求

3.处理乱码现象

设置请求字符编码request.setCharacterEncoding("UTF-8");

request作用域中的数据使用范围是一次请求,服务器运行过程中可以有多个请求

Cookie对象

服务器不会自动创建,需要程序员手动创建,可以将数据存储在浏览器端(客户的电脑)硬盘中的一种技术

应用:购物车记录功能,免登陆功能等

注意Cookie数据和浏览器绑定在一起,不同的浏览器之间不能共用数据

Cookie cookie=new Cookie(键,值);   //创建Cookie对象,参数是一个键一个值
response.addCookie(cookie); //将Cookie对象加入响应对象中,进行响应时就会自动保存

默认情况下,Cookie数据随着浏览器的关闭会消失,一般都会设置有效时间

cookie.setMaxAge(30)   //设置Cookie数据有效时间为30秒

使用request对象获取存储在浏览器的Cookie数据

Cookie[] cookies=request.getCookies()
   if(cookies!=null){
       
  }

HttpSession对象

HTTP协议规则

无状态规则:浏览器发出一个请求,服务器端处理完请求并且响应后,服务器会自动清除这次请求的数据

无连接规则:浏览器发出一个请求,服务器接收请求处理完并响应后,服务器端会根据无连接规则,立刻断开和浏览器的关联

HttpSession对象可以处理这些现象


概念

HttpSession对象:一次会话的对象(一般情况下是和用户登陆绑定在一起),作用范围大概是你登陆了这个网站,直到你退出了这个网站

1.session对象实例化时间(服务器不会创建对象,需要满足特定要求才会创建)

如果一个程序访问了jsp页面后,服务器就会自动创建HttpSession对象

如果一个程序没有访问jsp页面,可以通过request对象的方法创建获取HttpSession对象

HttpSession getSession()

HttpSession getSession(boolean)

session.isNew()方法检测HttpSession对象是否是新创建的,返回值是true就是新创建的

session.getId()方法表示此HttpSession对象的唯一标识,与HashCode()差不多但不一样

注意:getSession()表示如果服务器创建了HttpSession对象就直接返回这个对象,如果服务器没有创建,则这个方法会创建一个HttpSession对象并返回

2.session对象的销毁(session会话的结束)

session对象的有效时间默认是30分钟,可以设置有效时间

session.setMaxInactiveInterval(___) 设置有效时间,单位是秒

session.getMaxInactiveInterval() 获得有效时间

当服务器创建了一个session对象,服务器会自动以cookie的形式将session中的sessionID值存储在硬盘中,如果手动清除了sessionID值,session对象就会被销毁,这次会话就代表结束

 

在服务器运行期间,servletContext对象只有一个

session对象可以有多个(不同的浏览器,不同的电脑)

request对象可以有多个


session对象解决无状态规则

使用session对象存储数据就行了

session对象解决无连接规则

完全自动

servlet基础02(servlet核心对象)_数据_02

程序运行期间的转跳问题

1.从页面跳转到页面:超链接,表单......

2.从一个页面跳转到servlet类:超链接,表单,地址栏拼接.....

从servlet类跳转到另一个servlet类(请求转发/响应重定向)

请求转发(固定代码):请求数量只有一个,数据是共享的

会从servlet类的Post请求转到另一个servlet类的Post请求

执行了请求代码后,会回到原来的servlet类继续执行代码

//获取转发器对象,参数是要跳转的servlet的请求名称
RequestDispatcher requestDispatcher = request.getRequestDispatcher("Servlet_sum");
//跳转
requestDispatcher.forward(request,response);

响应重定向:请求的数量是多个

会从servlet类的Post请求转到另一个servlet类的get请求

会先执行完原来的代码,结束这次请求,浏览器再发出一次指向请求代码的请求,才会执行请求代码,因此新的请求会指向get请求,没有参数

response.sendRedirect("Servlet_sum")

常规选择:如果跳转时需要有数据的参与就选择请求转发,如果跳转时不需要有数据的参与就选择响应重定向

从servlet类跳转到一个页面(jsp,模板)

目前还未学到jsp,后面补充

监听器(Listener)了解即可

监听器是servlet中用来监听一些对象的活动(实例化,对象销毁,对象真假删除修改数据等)