java编程_servlet(续)

来源:互联网 发布:淘宝标题改了有影响吗 编辑:程序博客网 时间:2024/05/22 13:46

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()得到


会话:一个浏览器和服务器之间发生的一系列的请求和响应的过程


用SessionID来标识同一个会话请求
用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)

Enumeration  getAttributeNames():返回request域中所有属性名的枚举

使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)

Enumeration  getAttributeNames():返回request域中所有属性名的枚举


下面是查阅的资料

所谓“作用域”就是通过设置属性的方式,将一些信息绑定到对象上。

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();




原创粉丝点击