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.独立直接调用的方法
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对象解决无连接规则
完全自动
程序运行期间的转跳问题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中用来监听一些对象的活动(实例化,对象销毁,对象真假删除修改数据等)