JSP页面实际上是Servlet
JSP页面也可以写成java代码
作用域--请求域(HttpServletRequest request)
作用范围:只在一次测试中有效四个方法:
void setAttribute(String name,Object obj)
Object getAttribute(String name)
void removeAttribute(String name)
Enumeration getAttributeNames():返回request域中所有属性的枚举
作用域---会话域(HttpSession session)
获得session的代码:
HttpSession session = request.getSession();
在jsp页面中可以直接使用session,而不必用request.getSession()得到
会话:一个浏览器和服务器之间发生的一系列的请求和响应的过程
用session对象来保存该会话的状态信息
服务器决定与某个客户端开启一个会话,创建一个Session对象
通过cookie或者URL参数形式将SessionID传给客户端
Session对象
作用范围:该次会话期间一直有效
Tomcat默认session有效期:30分钟
在Tomcat/conf/web.xml文件中设置(对该服务器所有项目都有效)
<session-config><session-timeout>30</session-timeout></session-config>
对单个项目改变session有效期
在WebRoot/WEB-INF/web.xml文件中 添加
session-config><session-timeout>30</session-timeout></session-config>
常用方法
session.getId();
session.getCreationTime();
session.getLastAccessedTime();
设置当前的HttpSession 对象session可空闲的以秒为单位的最长时间。
设置负数则表示永不过期;设置为0时则表示立即过期。
session.setMaxInactiveInterval();
session.getLastAccessedTime();强制当前HttpSession 对象session无效,释放该对象的空间
session.getServletContext();
void setAttribute(String name,Object obj)
Object getAttribute(String name)
void removeAttribute(String name)
使session无效的方法:
1.session.invalidate()执行后,session无效
2.session的最大等待时间到后,session无效
3.关闭浏览器后,session无效
4.关闭服务器后,session无效
只要浏览器与服务器没有配对的SessionID就表示session无效
浏览器与服务器
浏览器发送一次请求到服务器,服务器首先判断,该请求是否携带一个SessionID值
如果这次请求没有携带一个SessionID值,服务器就知道了,这是第一次来访问该服务器
浏览器与该服务器开始建立会话
服务器会在相应请求的同时,将产生一个SessionID,作为该次会话的标识
再把这个SessionID发给浏览器,浏览器就拥有一个SessionID了
当再次访问该服务器时,浏览器会携带那个SessionID,被传到服务器
服务器首先判断该请求是否携带一个SessionID值,此时有了,代表这不是一个新的会话的请求
如果浏览器两个请求之间的时间太长,超出服务器等待的时间,服务器会删除这个session对象
删除后,再次发送到该服务器,因为服务器里没有这个session对象了,就不能判断请求是否携带SessionID值
也就是说判断不出来,就认为这是一个新的会话开始,又会产生一个SessionID,作为这次新会话的标识
又把这个SessionID发给浏览器,浏览器就拥有一个新的SessionID了
在会话开始时,服务器会自动分配一个空间(session对象),SessionID就在session对象里
javax.servlet.ServletConfig接口
获得ServletConfig对象的代码:
ServletConfig config = this.getServletConfig();
常用的方法:
getInitParameter(String name):返回名字为name的参数的值
String getServletName():返回该Servlet在配置文件中的名字
Enumeration getInitParameterNames():返回所有参数的名字的一个枚举
getServletContext()
web.xml中ServletConfig 的一些属性<param-name><param-value>
javax.servlet.ServletContext接口
一个web应用程序中所有的Servlet都共享同一个ServletContext对象,所以该对象称之为application对象
ServletContext对象WebRoot/WEB-INF/web.xml文件中的<context-param>标签
常用方法:
getInitParameter(String name):返回名字为name的参数的值
Enumeration getInitParameterNames():返回所有参数的名字的一个枚举
getRealPath(String str):用于获取文件本地绝对路径(可以先获取一个xml文件路径 再去读)
getRequestDispatcher(String str):用于资源转向和资源包含
getResourcePaths(String str):用于得到目录下所有子目录和文件路径的名称
void setAttribute(String name,Object obj)
Object getAttribute(String name)
void removeAttribute(String name)
下面是查阅的资料
所谓“作用域”就是通过设置属性的方式,将一些信息绑定到对象上。
Servlet 中能够设置属性的对象有ServletRequest/HttpServletRequest、HttpSession、ServletContext。用于存储、查询和删除这些属性的方法对于所有的作用域都是相同的。它们是:
Object getAttribute(String name);
void setAttribute(String name, Object value);
void removeAttribute(String name);
Enumeration getAttributeNames();
① ServletRequest :请求作用域
对应于JSP 中的Request,封装了客户的请求信息, 如客户的请求方式、参数名和参数值 、客户端正在使用的协议,以及发出请求的远程主机信息。HttpServletRequest 接口包含了客户端的请求信息,通过该接口取得客户端的一些信息(如:IP地址、浏览器类型等)及HTTP 请求类型(如:GET、HEAD、POST、PUT等)。
通过HttpServletRequest 接口中的getSession() 方法还可以获得会话作用域(HttpSession) 。
public HttpSession getSession(); 如果“当前用户的会话对象”为空(第一次访问时)则创建一个新的会话对象返回
public HttpSession getSession(boolean create); create=false:如果“当前用户的会话对象”为空,则返回null(即不自动创建会话对象),create = true 与不带参数用法一样。
ServletRequest 对象获得方法
javax.servlet.ServletRequestWrapper.getRequest();
② HttpSession:会话作用域
对应于JSP 中的Session,为访客分配一个唯一标识,并存储在客户端的Cookie 中。
常用方法:
public boolean isNew(); 判断这个session是不是新的。
public void invalidate(); 终止这个session。所有绑定在这个session上的数据都会被清除。
public void setMaxInactiveInterval(int interval) ;设置会话的超时值。
HttpSession 对象几种获得方法
javax.servlet.http.HttpServletRequest.getSession(boolean create);
javax.servlet.http.HttpServletRequest.getSession();
javax.servlet.http.HttpServletRequestWrapper.getSession(boolean create);
javax.servlet.http.HttpServletRequestWrapper.getSession();
javax.servlet.http.HttpSessionBindingEvent.getSession();
javax.servlet.http.HttpSessionContext.getSession(String sessionID);
javax.servlet.http.HttpSessionEvent.getSession();
③ ServletContext:上下文作用域
对应于JSP 中的Application,是Servlet 与Servlet 容器直接通信的接口,Servlet 容器在启动一个Web 应用时,会为它创建一个唯一的ServletContext 对象。同一个Web 应用的所有Servlet 共享一个ServletContext,Servlet 对象通过它来访问 Servlet 容器中的各种资源。
常用方法:1、访问当前Web 的应用资源
public String getContextpath(); 返回当前Web应用的入口URL。
public String getInitParameter(String name);返回Web 应用范围内的匹配的初始化参数值。在web.xml 中<web-app>元素中<context-param>元素标识应用范围内的初始化参数。
public Enumeration getInitParameterNames();
public String getServletContextName(); 返回Web 应用名字。即<web-app>元素中<display-name>元素的值。
public RequestDispacher getRequestDispacher(String path);返回一个像其他Web组件发送请求的RequestDispacher 对象。
2、访问 Servlet 容器的相关信息
public ServletContext getContext(String uripath); 根据指定的URI,返回当前Servlet容器中,其他Web 应用的ServletContext 对象。
3、访问Web 容器的相关信息
public String getServerInfo(); 返回Servlet 容器的名字和版本。
public int getMajorVersion(); 返回Servlet 容器支持的java Servlet API 的主版本号。
public int getMinorVersion(); 返回Servlet 容器支持的java Servlet API 的主版次号。
4、访问服务器端的文件系统资源
public String getRealPath(String path); 根据参数指定的虚拟路径,返回一个文件系统中的真实路径。
public URL getResource(String path);返回一个指定路径的URL。
5 输出日志
public void log(String msg); 向Servlet 的日志文件中写日志。
public void log(String msg,Throwable throwable);向日志文件中写错误信息,以及异常堆栈信息。
ServletContext 对象获得的几种方式:
javax.servelt.http.HttpServlet.getServletContent();
javax.servlet.http.HttpSession.getServletContext();
javax.servlet.jsp.PageContext.getServletContext();
javax.servlet.servletConfig.getServletContext();